This is a package that helps you to select nodes when working with extensions in VS Code and Recast.
npm install recast-babel-ts-helperThis is a package that helps you to select nodes when working with extensions in VS Code and Recast.
Basic usage may look like this:
Install:
``node`
npm install recast-babel-ts-helper
Usage:
To see a bit of what you can do, visit the examples in /examples/examples.test.ts. Run the tests with the npm run test-examples.
I'm created this library because I am working with VS Code extensions and I kept writing clunky code to locate nodes with full type safety.
A standard usage case could be to rename a function in your code. In the following example we want to rename "myFunction" to "yourFunction":
`ts
import {
generateAstFromCode,
generateCodeFromAST,
getTypeSafeNode,
isOfNodeType,
} from "recast-babel-ts-helper";
import { ExportNamedDeclaration, VariableDeclaration } from "@babel/types";
const code = export const myFunction = (a: number, b: number): number => a + b;;
const ast = generateAstFromCode(code);
const baseNode = ast.program.body[0];
const exportNamedDeclarationNode = getTypeSafeNode
baseNode,
"ExportNamedDeclaration"
);
if (
isOfNodeType
exportNamedDeclarationNode.declaration,
"VariableDeclaration"
)
) {
const variableDeclaration = getTypeSafeNode
exportNamedDeclarationNode.declaration,
"VariableDeclaration"
);
if ("name" in variableDeclaration.declarations[0].id) {
variableDeclaration.declarations[0].id.name = "yourFunction";
}
}
const newCode = generateCodeFromAST(ast);
console.log(newCode);
// export const yourFunction = (a: number, b: number): number => a + b;
`
Another case can be when you want to examine name och parameters for a piece of code:
`ts
import { parseFunctionOrClass } from "recast-babel-ts-helper";
const exampleCode = "export const makeStatement = () => 'hello world';";
const results = parseFunctionOrClass(exampleCode);
expect(results).toHaveLength(1);
expect(results[0].name).toBe("makeStatement");
expect(results[0].isDefault).toBe(false);
`
In this case, the parseFunctionOrClass function returns an array of objects representing the exports. One entry for each export with information about their name, type and parameters.
The package exposes the following functions:
``
generateCodeFromAST
generateAstFromCode
isOfNodeType
getTypeSafeNode
parseFunctionOrClass
Yes, please. I've designed this lib very much for my current needs. If you want to help expand upon it, please put up a PR and I'll have a look at it as soon as I can.
`node
// Install
npm i
// build
npm run build
// Test
npm t
`
(_This is mainly because I myself sometimes forget_)
Bump the version in package.json and run the following command:
`bashBuild the app in /dist
npm run build