ESQuery is a library for querying the AST output by Esprima for patterns of syntax using a CSS style selector system. Check out the demo:
The following selectors are supported:
- AST node type:
ForStatement
-
wildcard:
*
-
attribute existence:
[attr]
-
attribute value:
[attr="foo"]
or[attr=123]
- attribute regex:
[attr=/foo.*/]
or (with flags)[attr=/foo.*/is]
- attribute conditions:
[attr!="foo"]
,[attr>2]
,[attr<3]
,[attr>=2]
, or[attr<=3]
- nested attribute:
[attr.level2="foo"]
- field:
FunctionDeclaration > Identifier.id
-
First or last child:
:first-child
or:last-child
-
nth-child (no ax+b support):
:nth-child(2)
-
nth-last-child (no ax+b support):
:nth-last-child(1)
-
descendant:
ancestor descendant
-
child:
parent > child
-
following sibling:
node ~ sibling
-
adjacent sibling:
node + adjacent
-
negation:
:not(ForStatement)
-
has:
:has(ForStatement)
,:has(> ForStatement)
-
matches-any:
:matches([attr] > :first-child, :last-child)
-
subject indicator:
!IfStatement > [name="foo"]
- class of AST node:
:statement
,:expression
,:declaration
,:function
, or:pattern