@@ -14,6 +14,7 @@ import '../visitor/serialize.dart';
1414import 'node.dart' ;
1515import 'selector/complex.dart' ;
1616import 'selector/list.dart' ;
17+ import 'selector/parent.dart' ;
1718import 'selector/placeholder.dart' ;
1819import 'selector/pseudo.dart' ;
1920
@@ -49,6 +50,13 @@ abstract base class Selector implements AstNode {
4950 @internal
5051 bool get isInvisible => accept (const _IsInvisibleVisitor (includeBogus: true ));
5152
53+ /// Whether this selector contains a [ParentSelector] .
54+ ///
55+ /// @nodoc
56+ @internal
57+ bool get containsParentSelector =>
58+ accept (const _ContainsParentSelectorVisitor ());
59+
5260 // Whether this selector would be invisible even if it didn't have bogus
5361 // combinators.
5462 ///
@@ -169,7 +177,7 @@ class _IsBogusVisitor with AnySelectorVisitor {
169177 }
170178}
171179
172- /// The visitor used to implement [Selector.isUseless]
180+ /// The visitor used to implement [Selector.isUseless] .
173181class _IsUselessVisitor with AnySelectorVisitor {
174182 const _IsUselessVisitor ();
175183
@@ -182,3 +190,10 @@ class _IsUselessVisitor with AnySelectorVisitor {
182190
183191 bool visitPseudoSelector (PseudoSelector pseudo) => pseudo.isBogus;
184192}
193+
194+ /// The visitor used to implement [Selector.containsParentSelector] .
195+ class _ContainsParentSelectorVisitor with AnySelectorVisitor {
196+ const _ContainsParentSelectorVisitor ();
197+
198+ bool visitParentSelector (ParentSelector _) => true ;
199+ }
0 commit comments