matthewsteele
matthewsteele

Reputation: 1862

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:

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?

Upvotes: 9

Views: 4599

Answers (2)

rzymek
rzymek

Reputation: 876

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).

Upvotes: 2

Snekse
Snekse

Reputation: 15789

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/

Upvotes: 4

Related Questions