pub enum Component<Impl: SelectorImpl> {
Show 31 variants
Combinator(Combinator),
ExplicitAnyNamespace,
ExplicitNoNamespace,
DefaultNamespace(Impl::NamespaceUrl),
Namespace(Impl::NamespacePrefix, Impl::NamespaceUrl),
ExplicitUniversalType,
LocalName(LocalName<Impl>),
ID(Impl::Identifier),
Class(Impl::ClassName),
AttributeInNoNamespaceExists {
local_name: Impl::LocalName,
local_name_lower: Impl::LocalName,
},
AttributeInNoNamespace {
local_name: Impl::LocalName,
operator: AttrSelectorOperator,
value: Impl::AttrValue,
case_sensitivity: ParsedCaseSensitivity,
never_matches: bool,
},
AttributeOther(Box<AttrSelectorWithOptionalNamespace<Impl>>),
Negation(ThinBoxedSlice<Component<Impl>>),
FirstChild,
LastChild,
OnlyChild,
Root,
Empty,
Scope,
NthChild(i32, i32),
NthLastChild(i32, i32),
NthOfType(i32, i32),
NthLastOfType(i32, i32),
FirstOfType,
LastOfType,
OnlyOfType,
NonTSPseudoClass(Impl::NonTSPseudoClass),
Slotted(Selector<Impl>),
Part(Box<[Impl::PartName]>),
Host(Option<Selector<Impl>>),
PseudoElement(Impl::PseudoElement),
}
Expand description
A CSS simple selector or combinator. We store both in the same enum for optimal packing and cache performance, see [1].
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1357973
Variants§
Combinator(Combinator)
ExplicitAnyNamespace
ExplicitNoNamespace
DefaultNamespace(Impl::NamespaceUrl)
Namespace(Impl::NamespacePrefix, Impl::NamespaceUrl)
ExplicitUniversalType
LocalName(LocalName<Impl>)
ID(Impl::Identifier)
Class(Impl::ClassName)
AttributeInNoNamespaceExists
AttributeInNoNamespace
AttributeOther(Box<AttrSelectorWithOptionalNamespace<Impl>>)
Negation(ThinBoxedSlice<Component<Impl>>)
Pseudo-classes
CSS3 Negation only takes a simple simple selector, but we still need to treat it as a compound selector because it might be a type selector which we represent as a namespace and a localname.
Note: if/when we upgrade this to CSS4, which supports combinators, we need to think about how this should interact with visit_complex_selector, and what the consumers of those APIs should do about the presence of combinators in negation.
FirstChild
LastChild
OnlyChild
Root
Empty
Scope
NthChild(i32, i32)
NthLastChild(i32, i32)
NthOfType(i32, i32)
NthLastOfType(i32, i32)
FirstOfType
LastOfType
OnlyOfType
NonTSPseudoClass(Impl::NonTSPseudoClass)
Slotted(Selector<Impl>)
The ::slotted() pseudo-element:
https://drafts.csswg.org/css-scoping/#slotted-pseudo
The selector here is a compound selector, that is, no combinators.
NOTE(emilio): This should support a list of selectors, but as of this writing no other browser does, and that allows them to put ::slotted() in the rule hash, so we do that too.
See https://github.com/w3c/csswg-drafts/issues/2158
Part(Box<[Impl::PartName]>)
The ::part
pseudo-element.
https://drafts.csswg.org/css-shadow-parts/#part
Host(Option<Selector<Impl>>)
The :host
pseudo-class:
https://drafts.csswg.org/css-scoping/#host-selector
NOTE(emilio): This should support a list of selectors, but as of this writing no other browser does, and that allows them to put :host() in the rule hash, so we do that too.
See https://github.com/w3c/csswg-drafts/issues/2158
PseudoElement(Impl::PseudoElement)
Implementations§
source§impl<Impl: SelectorImpl> Component<Impl>
impl<Impl: SelectorImpl> Component<Impl>
sourcepub fn is_combinator(&self) -> bool
pub fn is_combinator(&self) -> bool
Returns true if this is a combinator.
sourcepub fn as_combinator(&self) -> Option<Combinator>
pub fn as_combinator(&self) -> Option<Combinator>
Returns the value as a combinator if applicable, None otherwise.
Trait Implementations§
source§impl<Impl: Clone + SelectorImpl> Clone for Component<Impl>where
Impl::NamespaceUrl: Clone,
Impl::NamespacePrefix: Clone,
Impl::Identifier: Clone,
Impl::ClassName: Clone,
Impl::LocalName: Clone,
Impl::AttrValue: Clone,
Impl::NonTSPseudoClass: Clone,
Impl::PartName: Clone,
Impl::PseudoElement: Clone,
impl<Impl: Clone + SelectorImpl> Clone for Component<Impl>where
Impl::NamespaceUrl: Clone,
Impl::NamespacePrefix: Clone,
Impl::Identifier: Clone,
Impl::ClassName: Clone,
Impl::LocalName: Clone,
Impl::AttrValue: Clone,
Impl::NonTSPseudoClass: Clone,
Impl::PartName: Clone,
Impl::PseudoElement: Clone,
source§impl<Impl: SelectorImpl> Debug for Component<Impl>
impl<Impl: SelectorImpl> Debug for Component<Impl>
source§impl<Impl: PartialEq + SelectorImpl> PartialEq for Component<Impl>where
Impl::NamespaceUrl: PartialEq,
Impl::NamespacePrefix: PartialEq,
Impl::Identifier: PartialEq,
Impl::ClassName: PartialEq,
Impl::LocalName: PartialEq,
Impl::AttrValue: PartialEq,
Impl::NonTSPseudoClass: PartialEq,
Impl::PartName: PartialEq,
Impl::PseudoElement: PartialEq,
impl<Impl: PartialEq + SelectorImpl> PartialEq for Component<Impl>where
Impl::NamespaceUrl: PartialEq,
Impl::NamespacePrefix: PartialEq,
Impl::Identifier: PartialEq,
Impl::ClassName: PartialEq,
Impl::LocalName: PartialEq,
Impl::AttrValue: PartialEq,
Impl::NonTSPseudoClass: PartialEq,
Impl::PartName: PartialEq,
Impl::PseudoElement: PartialEq,
source§impl<Impl: SelectorImpl> ToCss for Component<Impl>
impl<Impl: SelectorImpl> ToCss for Component<Impl>
source§impl<Impl: SelectorImpl> Visit for Component<Impl>where
Impl::NonTSPseudoClass: Visit<Impl = Impl>,
impl<Impl: SelectorImpl> Visit for Component<Impl>where
Impl::NonTSPseudoClass: Visit<Impl = Impl>,
impl<Impl: Eq + SelectorImpl> Eq for Component<Impl>where
Impl::NamespaceUrl: Eq,
Impl::NamespacePrefix: Eq,
Impl::Identifier: Eq,
Impl::ClassName: Eq,
Impl::LocalName: Eq,
Impl::AttrValue: Eq,
Impl::NonTSPseudoClass: Eq,
Impl::PartName: Eq,
Impl::PseudoElement: Eq,
impl<Impl: SelectorImpl> StructuralPartialEq for Component<Impl>
Auto Trait Implementations§
impl<Impl> Freeze for Component<Impl>where
<Impl as SelectorImpl>::NamespaceUrl: Freeze,
<Impl as SelectorImpl>::NamespacePrefix: Freeze,
<Impl as SelectorImpl>::Identifier: Freeze,
<Impl as SelectorImpl>::ClassName: Freeze,
<Impl as SelectorImpl>::LocalName: Freeze,
<Impl as SelectorImpl>::AttrValue: Freeze,
<Impl as SelectorImpl>::NonTSPseudoClass: Freeze,
<Impl as SelectorImpl>::PseudoElement: Freeze,
impl<Impl> RefUnwindSafe for Component<Impl>where
<Impl as SelectorImpl>::NamespaceUrl: RefUnwindSafe,
<Impl as SelectorImpl>::NamespacePrefix: RefUnwindSafe,
<Impl as SelectorImpl>::Identifier: RefUnwindSafe,
<Impl as SelectorImpl>::ClassName: RefUnwindSafe,
<Impl as SelectorImpl>::LocalName: RefUnwindSafe,
<Impl as SelectorImpl>::AttrValue: RefUnwindSafe,
<Impl as SelectorImpl>::NonTSPseudoClass: RefUnwindSafe,
<Impl as SelectorImpl>::PseudoElement: RefUnwindSafe,
<Impl as SelectorImpl>::PartName: RefUnwindSafe,
impl<Impl> Send for Component<Impl>where
<Impl as SelectorImpl>::NamespaceUrl: Send + Sync,
<Impl as SelectorImpl>::NamespacePrefix: Send + Sync,
<Impl as SelectorImpl>::Identifier: Send + Sync,
<Impl as SelectorImpl>::ClassName: Send + Sync,
<Impl as SelectorImpl>::LocalName: Send + Sync,
<Impl as SelectorImpl>::AttrValue: Send + Sync,
<Impl as SelectorImpl>::NonTSPseudoClass: Send + Sync,
<Impl as SelectorImpl>::PseudoElement: Send + Sync,
<Impl as SelectorImpl>::PartName: Send + Sync,
impl<Impl> Sync for Component<Impl>where
<Impl as SelectorImpl>::NamespaceUrl: Sync + Send,
<Impl as SelectorImpl>::NamespacePrefix: Sync + Send,
<Impl as SelectorImpl>::Identifier: Sync + Send,
<Impl as SelectorImpl>::ClassName: Sync + Send,
<Impl as SelectorImpl>::LocalName: Sync + Send,
<Impl as SelectorImpl>::AttrValue: Sync + Send,
<Impl as SelectorImpl>::NonTSPseudoClass: Sync + Send,
<Impl as SelectorImpl>::PseudoElement: Sync + Send,
<Impl as SelectorImpl>::PartName: Sync + Send,
impl<Impl> Unpin for Component<Impl>where
<Impl as SelectorImpl>::NamespaceUrl: Unpin,
<Impl as SelectorImpl>::NamespacePrefix: Unpin,
<Impl as SelectorImpl>::Identifier: Unpin,
<Impl as SelectorImpl>::ClassName: Unpin,
<Impl as SelectorImpl>::LocalName: Unpin,
<Impl as SelectorImpl>::AttrValue: Unpin,
<Impl as SelectorImpl>::NonTSPseudoClass: Unpin,
<Impl as SelectorImpl>::PseudoElement: Unpin,
impl<Impl> UnwindSafe for Component<Impl>where
<Impl as SelectorImpl>::NamespaceUrl: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::NamespacePrefix: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::Identifier: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::ClassName: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::LocalName: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::AttrValue: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::NonTSPseudoClass: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::PseudoElement: UnwindSafe + RefUnwindSafe,
<Impl as SelectorImpl>::PartName: UnwindSafe + RefUnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)