5
5
use attr:: { AttrSelectorWithNamespace , ParsedAttrSelectorOperation , AttrSelectorOperator } ;
6
6
use attr:: { ParsedCaseSensitivity , SELECTOR_WHITESPACE , NamespaceConstraint } ;
7
7
use bloom:: BLOOM_HASH_MASK ;
8
- use cssparser:: { ParseError , BasicParseError } ;
8
+ use cssparser:: { ParseError , BasicParseError , CompactCowStr } ;
9
9
use cssparser:: { Token , Parser as CssParser , parse_nth, ToCss , serialize_identifier, CssStringWriter } ;
10
10
use precomputed_hash:: PrecomputedHash ;
11
11
use servo_arc:: { Arc , HeaderWithLength , ThinArc } ;
@@ -58,7 +58,7 @@ pub enum SelectorParseError<'i, T> {
58
58
PseudoElementExpectedColon ,
59
59
PseudoElementExpectedIdent ,
60
60
UnsupportedPseudoClass ,
61
- UnexpectedIdent ( Cow < ' i , str > ) ,
61
+ UnexpectedIdent ( CompactCowStr < ' i > ) ,
62
62
ExpectedNamespace ,
63
63
Custom ( T ) ,
64
64
}
@@ -133,21 +133,21 @@ pub trait Parser<'i> {
133
133
134
134
/// This function can return an "Err" pseudo-element in order to support CSS2.1
135
135
/// pseudo-elements.
136
- fn parse_non_ts_pseudo_class ( & self , name : Cow < ' i , str > )
136
+ fn parse_non_ts_pseudo_class ( & self , name : CompactCowStr < ' i > )
137
137
-> Result < <Self :: Impl as SelectorImpl >:: NonTSPseudoClass ,
138
138
ParseError < ' i , SelectorParseError < ' i , Self :: Error > > > {
139
139
Err ( ParseError :: Custom ( SelectorParseError :: UnexpectedIdent ( name) ) )
140
140
}
141
141
142
142
fn parse_non_ts_functional_pseudo_class < ' t >
143
- ( & self , name : Cow < ' i , str > , _arguments : & mut CssParser < ' i , ' t > )
143
+ ( & self , name : CompactCowStr < ' i > , _arguments : & mut CssParser < ' i , ' t > )
144
144
-> Result < <Self :: Impl as SelectorImpl >:: NonTSPseudoClass ,
145
145
ParseError < ' i , SelectorParseError < ' i , Self :: Error > > >
146
146
{
147
147
Err ( ParseError :: Custom ( SelectorParseError :: UnexpectedIdent ( name) ) )
148
148
}
149
149
150
- fn parse_pseudo_element ( & self , name : Cow < ' i , str > )
150
+ fn parse_pseudo_element ( & self , name : CompactCowStr < ' i > )
151
151
-> Result < <Self :: Impl as SelectorImpl >:: PseudoElement ,
152
152
ParseError < ' i , SelectorParseError < ' i , Self :: Error > > > {
153
153
Err ( ParseError :: Custom ( SelectorParseError :: UnexpectedIdent ( name) ) )
@@ -1152,7 +1152,7 @@ fn parse_type_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParser<'i,
1152
1152
Some ( name) => {
1153
1153
sequence. push ( Component :: LocalName ( LocalName {
1154
1154
lower_name : from_cow_str ( to_ascii_lowercase ( & name) ) ,
1155
- name : from_cow_str ( name) ,
1155
+ name : from_cow_str ( name. into ( ) ) ,
1156
1156
} ) )
1157
1157
}
1158
1158
None => {
@@ -1186,7 +1186,7 @@ enum QNamePrefix<Impl: SelectorImpl> {
1186
1186
fn parse_qualified_name < ' i , ' t , P , E , Impl >
1187
1187
( parser : & P , input : & mut CssParser < ' i , ' t > ,
1188
1188
in_attr_selector : bool )
1189
- -> Result < Option < ( QNamePrefix < Impl > , Option < Cow < ' i , str > > ) > ,
1189
+ -> Result < Option < ( QNamePrefix < Impl > , Option < CompactCowStr < ' i > > ) > ,
1190
1190
ParseError < ' i , SelectorParseError < ' i , E > > >
1191
1191
where P : Parser < ' i , Impl =Impl , Error =E > , Impl : SelectorImpl
1192
1192
{
@@ -1217,7 +1217,7 @@ fn parse_qualified_name<'i, 't, P, E, Impl>
1217
1217
let position = input. position ( ) ;
1218
1218
match input. next_including_whitespace ( ) {
1219
1219
Ok ( Token :: Delim ( '|' ) ) => {
1220
- let prefix = from_cow_str ( value) ;
1220
+ let prefix = from_cow_str ( value. into ( ) ) ;
1221
1221
let result = parser. namespace_for_prefix ( & prefix) ;
1222
1222
let url = result. ok_or ( ParseError :: Custom ( SelectorParseError :: ExpectedNamespace ) ) ?;
1223
1223
explicit_namespace ( input, QNamePrefix :: ExplicitNamespace ( prefix, url) )
@@ -1300,7 +1300,7 @@ fn parse_attribute_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParse
1300
1300
// [foo]
1301
1301
Err ( _) => {
1302
1302
let local_name_lower = from_cow_str ( to_ascii_lowercase ( & local_name) ) ;
1303
- let local_name = from_cow_str ( local_name) ;
1303
+ let local_name = from_cow_str ( local_name. into ( ) ) ;
1304
1304
if let Some ( namespace) = namespace {
1305
1305
return Ok ( Component :: AttributeOther ( Box :: new ( AttrSelectorWithNamespace {
1306
1306
namespace : namespace,
@@ -1358,7 +1358,7 @@ fn parse_attribute_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParse
1358
1358
1359
1359
let mut case_sensitivity = parse_attribute_flags ( input) ?;
1360
1360
1361
- let value = from_cow_str ( value) ;
1361
+ let value = from_cow_str ( value. into ( ) ) ;
1362
1362
let local_name_lower;
1363
1363
{
1364
1364
let local_name_lower_cow = to_ascii_lowercase ( & local_name) ;
@@ -1371,9 +1371,9 @@ fn parse_attribute_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParse
1371
1371
ParsedCaseSensitivity :: AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument
1372
1372
}
1373
1373
}
1374
- local_name_lower = from_cow_str ( local_name_lower_cow) ;
1374
+ local_name_lower = from_cow_str ( local_name_lower_cow. into ( ) ) ;
1375
1375
}
1376
- let local_name = from_cow_str ( local_name) ;
1376
+ let local_name = from_cow_str ( local_name. into ( ) ) ;
1377
1377
if let Some ( namespace) = namespace {
1378
1378
Ok ( Component :: AttributeOther ( Box :: new ( AttrSelectorWithNamespace {
1379
1379
namespace : namespace,
@@ -1551,7 +1551,7 @@ fn parse_compound_selector<'i, 't, P, E, Impl>(
1551
1551
1552
1552
fn parse_functional_pseudo_class < ' i , ' t , P , E , Impl > ( parser : & P ,
1553
1553
input : & mut CssParser < ' i , ' t > ,
1554
- name : Cow < ' i , str > ,
1554
+ name : CompactCowStr < ' i > ,
1555
1555
inside_negation : bool )
1556
1556
-> Result < Component < Impl > ,
1557
1557
ParseError < ' i , SelectorParseError < ' i , E > > >
@@ -1599,13 +1599,13 @@ fn parse_one_simple_selector<'i, 't, P, E, Impl>(parser: &P,
1599
1599
let start_position = input. position ( ) ;
1600
1600
match input. next_including_whitespace ( ) {
1601
1601
Ok ( Token :: IDHash ( id) ) => {
1602
- let id = Component :: ID ( from_cow_str ( id) ) ;
1602
+ let id = Component :: ID ( from_cow_str ( id. into ( ) ) ) ;
1603
1603
Ok ( Some ( SimpleSelectorParseResult :: SimpleSelector ( id) ) )
1604
1604
}
1605
1605
Ok ( Token :: Delim ( '.' ) ) => {
1606
1606
match input. next_including_whitespace ( ) {
1607
1607
Ok ( Token :: Ident ( class) ) => {
1608
- let class = Component :: Class ( from_cow_str ( class) ) ;
1608
+ let class = Component :: Class ( from_cow_str ( class. into ( ) ) ) ;
1609
1609
Ok ( Some ( SimpleSelectorParseResult :: SimpleSelector ( class) ) )
1610
1610
}
1611
1611
Ok ( t) => Err ( ParseError :: Basic ( BasicParseError :: UnexpectedToken ( t) ) ) ,
@@ -1659,7 +1659,7 @@ fn parse_one_simple_selector<'i, 't, P, E, Impl>(parser: &P,
1659
1659
}
1660
1660
}
1661
1661
1662
- fn parse_simple_pseudo_class < ' i , P , E , Impl > ( parser : & P , name : Cow < ' i , str > )
1662
+ fn parse_simple_pseudo_class < ' i , P , E , Impl > ( parser : & P , name : CompactCowStr < ' i > )
1663
1663
-> Result < Component < Impl > ,
1664
1664
ParseError < ' i , SelectorParseError < ' i , E > > >
1665
1665
where P : Parser < ' i , Impl =Impl , Error =E > , Impl : SelectorImpl
@@ -1804,7 +1804,7 @@ pub mod tests {
1804
1804
type Impl = DummySelectorImpl ;
1805
1805
type Error = ( ) ;
1806
1806
1807
- fn parse_non_ts_pseudo_class ( & self , name : Cow < ' i , str > )
1807
+ fn parse_non_ts_pseudo_class ( & self , name : CompactCowStr < ' i > )
1808
1808
-> Result < PseudoClass ,
1809
1809
ParseError < ' i , SelectorParseError < ' i , ( ) > > > {
1810
1810
match_ignore_ascii_case ! { & name,
@@ -1814,7 +1814,7 @@ pub mod tests {
1814
1814
}
1815
1815
}
1816
1816
1817
- fn parse_non_ts_functional_pseudo_class < ' t > ( & self , name : Cow < ' i , str > ,
1817
+ fn parse_non_ts_functional_pseudo_class < ' t > ( & self , name : CompactCowStr < ' i > ,
1818
1818
parser : & mut CssParser < ' i , ' t > )
1819
1819
-> Result < PseudoClass ,
1820
1820
ParseError < ' i , SelectorParseError < ' i , ( ) > > > {
@@ -1824,7 +1824,7 @@ pub mod tests {
1824
1824
}
1825
1825
}
1826
1826
1827
- fn parse_pseudo_element ( & self , name : Cow < ' i , str > )
1827
+ fn parse_pseudo_element ( & self , name : CompactCowStr < ' i > )
1828
1828
-> Result < PseudoElement ,
1829
1829
ParseError < ' i , SelectorParseError < ' i , ( ) > > > {
1830
1830
match_ignore_ascii_case ! { & name,
0 commit comments