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:

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