tsquery

by phenomnomnominal

phenomnomnominal /tsquery

TypeScript AST query library

489 Stars 15 Forks Last release: Not found MIT License 110 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

TSQuery

npm version Code Climate Test Coverage

TSQuery is a port of the ESQuery API for TypeScript! TSQuery allows you to query a TypeScript AST for patterns of syntax using a CSS style selector system.

Check out the ESQuery demo - note that the demo requires JavaScript code, not TypeScript

You can also check out the TSQuery Playground - Lovingly crafted by Uri Shaked

Installation

npm install @phenomnomnominal/tsquery --save-dev

Examples

Say we want to select all instances of an identifier with name "Animal", e.g. the identifier in the

class
declaration, and the identifier in the
extends
declaration.

We would do something like the following:

import { tsquery } from '@phenomnomnominal/tsquery';

const typescript = `

class Animal { constructor(public name: string) { } move(distanceInMeters: number = 0) { console.log(`${this.name} moved ${distanceInMeters}m.`); } }

class Snake extends Animal { constructor(name: string) { super(name); } move(distanceInMeters = 5) { console.log("Slithering..."); super.move(distanceInMeters); } }

`;

const ast = tsquery.ast(typescript); const nodes = tsquery(ast, 'Identifier[name="Animal"]'); console.log(nodes.length); // 2

Try running this code in StackBlitz!

Selectors

The following selectors are supported:

Common AST node types

  • Identifier
    - any identifier (name of a function, class, variable, etc)
  • IfStatement
    ,
    ForStatement
    ,
    WhileStatement
    ,
    DoStatement
    - control flow
  • FunctionDeclaration
    ,
    ClassDeclaration
    ,
    ArrowFunction
    - declarations
  • VariableStatement
    - var, const, let.
  • ImportDeclaration
    - any
    import
    statement
  • StringLiteral
    - any string
  • TrueKeyword
    ,
    FalseKeyword
    ,
    NullKeyword
    ,
    AnyKeyword
    - various keywords
  • CallExpression
    - function call
  • NumericLiteral
    - any numeric constant
  • NoSubstitutionTemplateLiteral
    ,
    TemplateExpression
    - template strings and expressions

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.