Skip to content
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.

Commit

Permalink
Enable original-file Typescript parsing via Babylon. (#5778)
Browse files Browse the repository at this point in the history
  • Loading branch information
loganfsmyth authored and jasonLaster committed Mar 24, 2018
1 parent 5e8f2b4 commit 7e6464c
Show file tree
Hide file tree
Showing 6 changed files with 395 additions and 4 deletions.
23 changes: 22 additions & 1 deletion src/workers/parser/getScopes/visitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,28 @@ const scopeCollectionVisitor = {
};
}
});
} else if (t.isIdentifier(node) && t.isReferenced(node, parentNode)) {
} else if (t.isTSEnumDeclaration(node)) {
state.scope.bindings[node.id.name] = {
type: "const",
refs: [
{
type: "decl",
start: fromBabelLocation(node.id.loc.start, state.sourceId),
end: fromBabelLocation(node.id.loc.end, state.sourceId),
declaration: {
start: fromBabelLocation(node.loc.start, state.sourceId),
end: fromBabelLocation(node.loc.end, state.sourceId)
}
}
]
};
} else if (
t.isIdentifier(node) &&
t.isReferenced(node, parentNode) &&
// Babel doesn't cover this in 'isReferenced' yet, but it should
// eventually.
!t.isTSEnumMember(parentNode, { id: node })
) {
let freeVariables = state.freeVariables.get(node.name);
if (!freeVariables) {
freeVariables = [];
Expand Down
338 changes: 338 additions & 0 deletions src/workers/parser/tests/__snapshots__/getScopes.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -12068,6 +12068,344 @@ Array [
]
`;

exports[`getScopes finds scope bindings in a typescript file at line 3 column 0 1`] = `
Array [
Object {
"bindings": Object {
"Color": Object {
"refs": Array [
Object {
"declaration": Object {
"end": Object {
"column": 29,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
},
"end": Object {
"column": 10,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 5,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "decl",
},
Object {
"end": Object {
"column": 10,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"meta": null,
"start": Object {
"column": 5,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "ref",
},
],
"type": "const",
},
"Example": Object {
"refs": Array [
Object {
"declaration": Object {
"end": Object {
"column": 1,
"line": 8,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
},
"end": Object {
"column": 13,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 6,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "decl",
},
],
"type": "let",
},
},
"displayName": "Lexical Global",
"end": Object {
"column": 0,
"line": 9,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 1,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "block",
},
Object {
"bindings": Object {
"Error": Object {
"refs": Array [
Object {
"end": Object {
"column": 19,
"line": 6,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"meta": null,
"start": Object {
"column": 14,
"line": 6,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "ref",
},
],
"type": "global",
},
"this": Object {
"refs": Array [],
"type": "implicit",
},
},
"displayName": "Global",
"end": Object {
"column": 0,
"line": 9,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 1,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "object",
},
]
`;

exports[`getScopes finds scope bindings in a typescript file at line 6 column 4 1`] = `
Array [
Object {
"bindings": Object {
"arguments": Object {
"refs": Array [],
"type": "implicit",
},
"this": Object {
"refs": Array [],
"type": "implicit",
},
},
"displayName": "method",
"end": Object {
"column": 3,
"line": 7,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 2,
"line": 5,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "function",
},
Object {
"bindings": Object {
"Example": Object {
"refs": Array [
Object {
"declaration": Object {
"end": Object {
"column": 1,
"line": 8,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
},
"end": Object {
"column": 13,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 6,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "decl",
},
],
"type": "const",
},
},
"displayName": "Class",
"end": Object {
"column": 1,
"line": 8,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "block",
},
Object {
"bindings": Object {
"Color": Object {
"refs": Array [
Object {
"declaration": Object {
"end": Object {
"column": 29,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
},
"end": Object {
"column": 10,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 5,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "decl",
},
Object {
"end": Object {
"column": 10,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"meta": null,
"start": Object {
"column": 5,
"line": 2,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "ref",
},
],
"type": "const",
},
"Example": Object {
"refs": Array [
Object {
"declaration": Object {
"end": Object {
"column": 1,
"line": 8,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
},
"end": Object {
"column": 13,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 6,
"line": 4,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "decl",
},
],
"type": "let",
},
},
"displayName": "Lexical Global",
"end": Object {
"column": 0,
"line": 9,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 1,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "block",
},
Object {
"bindings": Object {
"Error": Object {
"refs": Array [
Object {
"end": Object {
"column": 19,
"line": 6,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"meta": null,
"start": Object {
"column": 14,
"line": 6,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "ref",
},
],
"type": "global",
},
"this": Object {
"refs": Array [],
"type": "implicit",
},
},
"displayName": "Global",
"end": Object {
"column": 0,
"line": 9,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"start": Object {
"column": 0,
"line": 1,
"sourceId": "scopes/ts-sample/originalSource-1",
},
"type": "object",
},
]
`;

exports[`getScopes finds scope bindings with expression metadata at line 2 column 0 1`] = `
Array [
Object {
Expand Down
8 changes: 8 additions & 0 deletions src/workers/parser/tests/fixtures/scopes/ts-sample.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

enum Color {Red, Green, Blue}

class Example<T> {
method(): never {
throw new Error();
}
}

0 comments on commit 7e6464c

Please sign in to comment.