-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Adds the visitor API foundation for tree transformations. #6892
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 3 commits
Commits
Show all changes
131 commits
Select commit
Hold shift + click to select a range
c3faf0f
Added visitor API
rbuckton 3855261
removed unused function
rbuckton cadda66
Adds transform flags aggregation to binder and visitor
rbuckton f8e574f
Added ArrayKind, moved createNode, changed JSDocParsing tests to use …
rbuckton 8bf176a
Cleanup and reorganization of node tests
rbuckton ba9181c
Merge branch 'transforms-visitor' into transforms-flags
rbuckton 1e35593
Adds the transformFiles API
rbuckton b3e9d26
Moved createNode back to parser, added local createNode to factory
rbuckton 34489a4
Merge branch 'transforms-visitor' into transforms-flags
rbuckton cbb910a
Merge branch 'transforms-flags' into transforms-transformer
rbuckton af24b16
PR Feedback
rbuckton 1a0b877
Merge branch 'transforms-visitor' into transforms-flags
rbuckton 51dd27a
Moved TreansformFlags assertions after markers
rbuckton 6fa4002
Merge branch 'transforms-flags' into transforms-transformer
rbuckton 0f2bbb1
Moved LexicalEnvironment to types.ts, minor fixes
rbuckton 6b381ec
Added printer
rbuckton fb19e81
Fixed linter error
rbuckton e545f1b
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 49d2d93
Adds destructuring logic and placeholders for each transformer.
rbuckton f948b14
Adds the TypeScript transformer
rbuckton 387b30c
Some cleanup and reorganization
rbuckton 4577441
Merge branch 'transforms-visitor' into transforms-flags
rbuckton 319ff61
PR Feedback
rbuckton ceae78b
Merge branch 'transforms-flags' into transforms-transformer
rbuckton f8ed021
PR feedback and cleanup
rbuckton ab811f9
Updates to TransformationContext and transformer.ts
rbuckton c634a36
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 0f16e68
PR Feedback
rbuckton 8ec3932
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 357171f
PR feedback, switched to getEmitScriptTarget/getEmitModuleKind
rbuckton c4dc2ae
Merge branch 'transforms-transformer' into transforms-transformer-ts
rbuckton 6c0551f
Adds initial jsx transformer
rbuckton 1ceb02a
Added initial ES7 transformer
rbuckton dd2dc78
Enables source maps for exceptions thrown in the compiler (when avail…
rbuckton c759b63
Adds ES6 transformer
rbuckton 39628d7
Added CommonJS/AMD/UMD module transformer
rbuckton 5564537
Added initial SystemJS transformer.
rbuckton ad64877
Merged some changes from other branches.
rbuckton ab8e83e
Merge branch 'transforms-visitor' into transforms-flags
rbuckton cd7c229
Merged some changes from other branches.
rbuckton 024eff1
Merge branch 'transforms-flags' into transforms-transformer
rbuckton 11d54ba
Merged some changes from other branches.
rbuckton 2ab8877
Fix for new linter warning
rbuckton 8e0d28e
Merge branch 'transforms-flags' into transforms-transformer
rbuckton 80f89a1
PR feedback
rbuckton 7d72c18
Merge branch 'transforms-flags' into transforms-transformer
rbuckton 90a317f
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 6d27336
Merged some changes from other branches.
rbuckton f52a30b
Merged some changes from other branches.
rbuckton efa5353
Fix new linter warning.
rbuckton 64e7aa8
PR Feedback.
rbuckton 0a325ee
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton 3d8cb51
Merge branch 'transforms-transformer-ts' into transforms-transformer-jsx
rbuckton 0145009
Merge branch 'transforms-transformer-jsx' into transforms-transformer…
rbuckton dc0b043
Merge branch 'transforms-transformer-es7' into transforms-transformer…
rbuckton 0b64048
Merge branch 'transforms-transformer-es6' into transforms-transformer…
rbuckton f3179da
Fixed issue with test dependencies
rbuckton 617e511
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 61fe61b
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton c166a2d
Merge branch 'transforms-transformer-ts' into transforms-transformer-jsx
rbuckton 5b7bd63
Merge branch 'transforms-transformer-jsx' into transforms-transformer…
rbuckton 6d111e3
Merge branch 'transforms-transformer-es7' into transforms-transformer…
rbuckton 4a81dde
Fixed issue with smartindenter
rbuckton 2e47e2e
Merge branch 'transforms-transformer' into transforms-printer
rbuckton e5cd8fe
Added temporary compat flag to control emit output to fix tests
rbuckton b3adade
PR Feedback
rbuckton 61f3ba6
Merge branch 'transforms-transformer' into transforms-printer
rbuckton ad314b0
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton 0937cec
Added additional auto-parenthesizing to visitor.
rbuckton 98ab964
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 52c62d0
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton f484ff4
Reenabled transforms.
rbuckton 635347e
Fixed typo in visitEachChild
rbuckton 9871d3b
Merge branch 'transforms-transformer' into transforms-printer
rbuckton de9866f
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton 02b85f8
PR feedback
rbuckton f92c24b
Removed unused liftNode function
rbuckton 40b61fb
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 4f03b31
Updated lift behavior
rbuckton 75b2181
Merge branch 'transforms-transformer' into transforms-printer
rbuckton 951ce55
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton 08036b7
Fixed linter warnings, added comments and minor cleanup.
rbuckton 608822d
Merge branch 'transforms-transformer-ts' into transforms-transformer-jsx
rbuckton c9f5253
Fixed linter warnings
rbuckton 25f4102
Reverted change to emitter to force use of printFiles
rbuckton cde3b34
Merge branch 'transforms-transformer-ts' into transforms-transformer-jsx
rbuckton 5a9b131
Merge branch 'transforms-transformer-jsx' into transforms-transformer…
rbuckton 78dfab8
Merge branch 'transforms-transformer-es7' into transforms-transformer…
rbuckton 0d8e152
Merge branch 'transforms-transformer-es6' into transforms-transformer…
rbuckton 72bfd2f
Fixed linter warnings.
rbuckton cd2cf7d
PR Feedback and defer makeUniqueName/getGeneratedNameForNode to printer.
rbuckton b1d8828
Remove transformCompatibleEmit flag and make it the default.
rbuckton 8e5e5f8
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton 359875b
PR Feedback
rbuckton fe7ad5f
Minor tweaks to naming
rbuckton a0dbe76
PR Feedback
rbuckton a7f9cda
Merge branch 'transforms-transformer-ts' into transforms-transformer-jsx
rbuckton 7d05ba2
Fixed visitJsxText, plus PR Feedback
rbuckton 186f5c8
PR Feedback
rbuckton 2c9cd2e
Merge branch 'transforms-transformer-jsx' into transforms-transformer…
rbuckton 88e1772
Merge branch 'transforms-transformer-es7' into transforms-transformer…
rbuckton 30433c2
ES6 cleanup
rbuckton 2d2709f
Fixed typo in visitCallExpression
rbuckton 70cbb9b
Merge branch 'transforms-transformer-es6' into transforms-transformer…
rbuckton ebb4764
Switch from onBefore/onAfterEmitNode to onEmitNode
rbuckton e66e51d
Merge branch 'transforms-printer' into transforms-transformer-ts
rbuckton 8b35af4
Switched to onEmitNode
rbuckton 1fdaf74
Merge branch 'transforms-transformer-ts' into transforms-transformer-jsx
rbuckton 593fbd4
Merge branch 'transforms-transformer-jsx' into transforms-transformer…
rbuckton 7b28b48
Merge branch 'transforms-transformer-es7' into transforms-transformer…
rbuckton 1c73818
Switched to onEmitNode
rbuckton c4a75ba
Merge branch 'transforms-transformer-es6' into transforms-transformer…
rbuckton 72eebdb
Switched to onEmitNode
rbuckton 1cf183b
Fixed invalid assertion in ts transformer
rbuckton d89e21a
General fixes and cleanup
rbuckton 5b8cf96
Moved modifier related flags to separate enum
rbuckton 99e6ad8
Removed ModifiersArray
rbuckton 47cdfbe
Add support for array return values from visitors
rbuckton 2699bf9
Removed NodeArrayNode in favor of arrays
rbuckton 94018a1
cleaned up assertions and removed flattenNodes.
rbuckton ad0dd4e
Fixed perf issue in binder, plus PR feedback
rbuckton 44ca7d4
Updated baselines
rbuckton ae7843d
PR Feedback
rbuckton 3c5f170
Merge pull request #7206 from Microsoft/transforms-transformer-module
rbuckton 07a3d18
Merge pull request #7194 from Microsoft/transforms-transformer-es6
rbuckton cc00f4c
Merge pull request #7193 from Microsoft/transforms-transformer-es7
rbuckton 829a9df
Merge pull request #7192 from Microsoft/transforms-transformer-jsx
rbuckton ca9148e
Merge pull request #7191 from Microsoft/transforms-transformer-ts
rbuckton 85ae53d
Merge pull request #6987 from Microsoft/transforms-printer
rbuckton a212e2b
Merge pull request #6986 from Microsoft/transforms-transformer
rbuckton f9cb493
Merge pull request #6983 from Microsoft/transforms-flags
rbuckton File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,56 +1,138 @@ | ||
| /// <reference path="types.ts"/> | ||
| /// <reference path="core.ts"/> | ||
| /// <reference path="utilities.ts"/> | ||
| /* @internal */ | ||
|
|
||
| namespace ts { | ||
| export function createNodeArray<T extends Node>(elements?: T[], location?: TextRange): NodeArray<T>; | ||
| export function createNodeArray<T extends Node, TArray extends NodeArray<T>>(elements: TArray, location?: TextRange): TArray; | ||
| export function createNodeArray<T extends Node, TArray extends NodeArray<T>>(elements?: T[], location?: TextRange): TArray { | ||
| const array = <TArray>(elements || []); | ||
| if (location) { | ||
| array.pos = location.pos; | ||
| array.end = location.end; | ||
| let NodeConstructor: new (kind: SyntaxKind, pos: number, end: number) => Node; | ||
| let SourceFileConstructor: new (kind: SyntaxKind, pos: number, end: number) => Node; | ||
|
|
||
| export function createNode(kind: SyntaxKind, pos?: number, end?: number): Node { | ||
| if (kind === SyntaxKind.SourceFile) { | ||
| return new (SourceFileConstructor || (SourceFileConstructor = objectAllocator.getSourceFileConstructor()))(kind, pos, end); | ||
| } | ||
| else if (array.pos === undefined || array.end === undefined) { | ||
| array.pos = -1; | ||
| array.end = -1; | ||
| else { | ||
| return new (NodeConstructor || (NodeConstructor = objectAllocator.getNodeConstructor()))(kind, pos, end); | ||
| } | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createNodeArray<T extends Node>(elements?: T[], pos?: number, end?: number): NodeArray<T> { | ||
| const array = <NodeArray<T>>(elements || []); | ||
| array.pos = pos; | ||
| array.end = end; | ||
| array.arrayKind = ArrayKind.NodeArray; | ||
| return array; | ||
| } | ||
|
|
||
| export function createNodeArrayNode<T extends Node>(elements?: (T | NodeArrayNode<T>)[]): NodeArrayNode<T> { | ||
| const array = <NodeArrayNode<T>>createNodeArray(elements); | ||
| array.kind = SyntaxKind.NodeArrayNode; | ||
| /* @internal */ | ||
| export function createModifiersArray(elements?: Modifier[], pos?: number, end?: number): ModifiersArray { | ||
| const array = <ModifiersArray>(elements || []); | ||
| array.pos = pos; | ||
| array.end = end; | ||
| array.arrayKind = ArrayKind.ModifiersArray; | ||
| array.flags = 0; | ||
| return array; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createSynthesizedNode(kind: SyntaxKind, startsOnNewLine?: boolean): Node { | ||
| const node = <SynthesizedNode>createNode(kind, /*pos*/ -1, /*end*/ -1); | ||
| node.startsOnNewLine = startsOnNewLine; | ||
| return node; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createSynthesizedNodeArray<T extends Node>(elements?: T[]): NodeArray<T> { | ||
| return createNodeArray(elements, /*pos*/ -1, /*end*/ -1); | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createSynthesizedModifiersArray(elements?: Modifier[]): ModifiersArray { | ||
| return createModifiersArray(elements, /*pos*/ -1, /*end*/ -1); | ||
| } | ||
|
|
||
| /** | ||
| * Creates a shallow, memberwise clone of a node. The "kind", "pos", "end", "flags", and "parent" | ||
| * properties are excluded by default, and can be provided via the "location", "flags", and | ||
| * "parent" parameters. | ||
| * | ||
| * @param node The node to clone. | ||
| * @param location An optional TextRange to use to supply the new position. | ||
| * @param flags The NodeFlags to use for the cloned node. | ||
| * @param parent The parent for the new node. | ||
| * @param original An optional pointer to the original source tree node. | ||
| */ | ||
| /* @internal */ | ||
| export function cloneNode<T extends Node>(node: T, location?: TextRange, flags?: NodeFlags, parent?: Node, original?: Node): T { | ||
| // We don't use "clone" from core.ts here, as we need to preserve the prototype chain of | ||
| // the original node. We also need to exclude specific properties and only include own- | ||
| // properties (to skip members already defined on the shared prototype). | ||
| const clone = location !== undefined | ||
| ? <T>createNode(node.kind, location.pos, location.end) | ||
| : <T>createSynthesizedNode(node.kind); | ||
|
|
||
| for (const key in node) { | ||
| if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) { | ||
| continue; | ||
| } | ||
|
|
||
| (<any>clone)[key] = (<any>node)[key]; | ||
| } | ||
|
|
||
| if (flags !== undefined) { | ||
| clone.flags = flags; | ||
| } | ||
|
|
||
| if (parent !== undefined) { | ||
| clone.parent = parent; | ||
| } | ||
|
|
||
| if (original !== undefined) { | ||
| clone.original = original; | ||
| } | ||
|
|
||
| return clone; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createNodeArrayNode<T extends Node>(elements: T[]): NodeArrayNode<T> { | ||
| const node = <NodeArrayNode<T>>createSynthesizedNode(SyntaxKind.NodeArrayNode); | ||
| node.nodes = createNodeArray(elements); | ||
| return node; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createReturn(expression?: Expression): ReturnStatement { | ||
| const node = <ReturnStatement>createSynthesizedNode(SyntaxKind.ReturnStatement); | ||
| node.expression = expression; | ||
| return node; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createStatement(expression: Expression): ExpressionStatement { | ||
| const node = <ExpressionStatement>createSynthesizedNode(SyntaxKind.ExpressionStatement); | ||
| node.expression = expression; | ||
| return node; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createVariableStatement(declarationList: VariableDeclarationList): VariableStatement { | ||
| const node = <VariableStatement>createSynthesizedNode(SyntaxKind.VariableStatement); | ||
| node.declarationList = declarationList; | ||
| return node; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createVariableDeclarationList(declarations: VariableDeclaration[]): VariableDeclarationList { | ||
| const node = <VariableDeclarationList>createSynthesizedNode(SyntaxKind.VariableDeclarationList); | ||
| node.declarations = createNodeArray(declarations); | ||
| return node; | ||
| } | ||
|
|
||
| /* @internal */ | ||
| export function createBlock(statements: Statement[]): Block { | ||
| const block = <Block>createSynthesizedNode(SyntaxKind.Block); | ||
| block.statements = createNodeArray(statements); | ||
| return block; | ||
| } | ||
|
|
||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there any reason you need to do this again instead of leveraging
ts.createNode?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is partly performance related, as the
tsnamespace is horribly deoptimized in v8, but also due to the fact I have a slightly different call signature.