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)
* matches-any: :matches([attr] > :first-child, :last-child)
* subject indicator: !IfStatement > [name="foo"]
* class of AST node: :statement
, :expression
, :declaration
, :function
, or :pattern