Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I parse, modify, and regenerate the AST of a TypeScript file (like jscodeshift)?

My use case: I'm building a Yeoman generator, that modifies TypeScript files; in ways similar to:

  • Add import statements
  • Import components into an AngularJS module

Yeoman recommends using an AST parser for this task:

The most reliable way to do so is to parse the file AST (abstract syntax tree) and edit it.

Tools like jscodeshift make this fairly straightforward for JavaScript files, but it doesn't appear to support TypeScript. Are there any similar tools to parse and modify the AST of a TypeScript file?

like image 870
matthewsteele Avatar asked Aug 02 '17 17:08

matthewsteele


2 Answers

Does ts-simple-ast fit your needs?

import { Project } from "ts-simple-ast";

const project = new Project();

// ...lots of code here that manipulates, copies, moves, and deletes files...
const sourceFile = project.getSourceFile("Models/Person.ts");
const importDeclaration = sourceFile.addImportDeclaration({
  defaultImport: "MyClass",
  moduleSpecifier: "./file"
});

// when you're all done, call this and it will save everything to the file system
project.save();

https://github.com/dsherret/ts-simple-ast

https://dsherret.github.io/ts-simple-ast/

https://dsherret.github.io/ts-simple-ast/setup/ast-viewers

https://dsherret.github.io/ts-simple-ast/manipulation/

like image 140
Snekse Avatar answered Nov 07 '22 15:11

Snekse


It looks like jscodeshift supports TypeScript (ts, and tsx) via --parser option since v0.6.0 (https://github.com/facebook/jscodeshift/releases/tag/v0.6.0).

like image 23
rzymek Avatar answered Nov 07 '22 14:11

rzymek