📄 ast-converter¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 2 |
| 📦 Imports | 9 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/typescript-estree/src/ast-converter.ts
📦 Imports¶
| Name | Source |
|---|---|
SourceFile |
typescript |
ASTMaps |
./convert |
ParseSettings |
./parseSettings |
TSESTree |
./ts-estree |
Converter |
./convert |
convertError |
./convert |
convertComments |
./convert-comments |
convertTokens |
./node-utils |
simpleTraverse |
./simple-traverse |
Functions¶
astConverter(ast: SourceFile, parseSettings: ParseSettings, shouldPreserveNodeMaps: boolean): { astMaps: ASTMaps; estree: TSESTree.Program }¶
Parameters:
astSourceFileparseSettingsParseSettingsshouldPreserveNodeMapsboolean
Returns: { astMaps: ASTMaps; estree: TSESTree.Program }
Calls:
convertError (from ./convert)instance.convertProgramsimpleTraverse (from ./simple-traverse)convertTokens (from ./node-utils)convertComments (from ./convert-comments)instance.getASTMaps
Internal Comments:
/**
* The TypeScript compiler produced fundamental parse errors when parsing the
* source.
*/ (x2)
/**
* Recursively convert the TypeScript AST into an ESTree-compatible AST
*/ (x2)
/**
* Optionally remove range and loc if specified
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional (x4)
// @ts-expect-error (x4)
/**
* Optionally convert and include all tokens in the AST
*/
/**
* Optionally convert and include all comments in the AST
*/
Code
export function astConverter(
ast: SourceFile,
parseSettings: ParseSettings,
shouldPreserveNodeMaps: boolean,
): { astMaps: ASTMaps; estree: TSESTree.Program } {
/**
* The TypeScript compiler produced fundamental parse errors when parsing the
* source.
*/
const { parseDiagnostics } = ast;
if (parseDiagnostics.length) {
throw convertError(parseDiagnostics[0]);
}
/**
* Recursively convert the TypeScript AST into an ESTree-compatible AST
*/
const instance = new Converter(ast, {
allowInvalidAST: parseSettings.allowInvalidAST,
errorOnUnknownASTType: parseSettings.errorOnUnknownASTType,
shouldPreserveNodeMaps,
suppressDeprecatedPropertyWarnings:
parseSettings.suppressDeprecatedPropertyWarnings,
});
const estree = instance.convertProgram();
/**
* Optionally remove range and loc if specified
*/
if (!parseSettings.range || !parseSettings.loc) {
simpleTraverse(estree, {
enter: node => {
if (!parseSettings.range) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional
// @ts-expect-error
delete node.range;
}
if (!parseSettings.loc) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional
// @ts-expect-error
delete node.loc;
}
},
});
}
/**
* Optionally convert and include all tokens in the AST
*/
if (parseSettings.tokens) {
estree.tokens = convertTokens(ast);
}
/**
* Optionally convert and include all comments in the AST
*/
if (parseSettings.comment) {
estree.comments = convertComments(ast);
}
const astMaps = instance.getASTMaps();
return { astMaps, estree };
}
Internal helpers¶
Declared inside another function in this file.
enter(node: TSESTree.Node): void¶
Parameters:
nodeTSESTree.Node
Returns: void
Internal Comments:
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional (x4)
// @ts-expect-error (x4)
Code
node => {
if (!parseSettings.range) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional
// @ts-expect-error
delete node.range;
}
if (!parseSettings.loc) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional
// @ts-expect-error
delete node.loc;
}
}
Generated by Syntax Scribe