Skip to content

Commit 4dc9db1

Browse files
committed
detect nested non-imports
1 parent c64c1c9 commit 4dc9db1

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

src/harness/unittests/services/preProcessFile.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@ describe("PreProcessFile:", () => {
7272
});
7373
}),
7474

75+
it("Do not return reference path of nested non-imports", () => {
76+
test("a.b.import('c');",
77+
/*readImportFile*/ true,
78+
/*detectJavaScriptImports*/ false,
79+
{
80+
referencedFiles: <ts.FileReference[]>[],
81+
importedFiles: <ts.FileReference[]>[],
82+
typeReferenceDirectives: [],
83+
ambientExternalModules: undefined,
84+
isLibFile: false
85+
});
86+
}),
87+
7588
it("Correctly return imported files", () => {
7689
test("import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\"); import i3= require(\"r3.ts\"); import i4=require(\"r4.ts\"); import i5 = require (\"r5.ts\");",
7790
/*readImportFile*/ true,

src/services/preProcess.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,25 @@ namespace ts {
1212
};
1313
const importedFiles: FileReference[] = [];
1414
let ambientExternalModules: { ref: FileReference, depth: number }[];
15+
let lastToken: SyntaxKind;
16+
let currentToken: SyntaxKind;
1517
let braceNesting = 0;
1618
// assume that text represent an external module if it contains at least one top level import/export
1719
// ambient modules that are found inside external modules are interpreted as module augmentations
1820
let externalModule = false;
1921

2022
function nextToken() {
21-
const token = scanner.scan();
22-
if (token === SyntaxKind.OpenBraceToken) {
23+
if (currentToken) {
24+
lastToken = currentToken;
25+
}
26+
currentToken = scanner.scan();
27+
if (currentToken === SyntaxKind.OpenBraceToken) {
2328
braceNesting++;
2429
}
25-
else if (token === SyntaxKind.CloseBraceToken) {
30+
else if (currentToken === SyntaxKind.CloseBraceToken) {
2631
braceNesting--;
2732
}
28-
return token;
33+
return currentToken;
2934
}
3035

3136
function getFileReference() {
@@ -77,6 +82,9 @@ namespace ts {
7782
* Returns true if at least one token was consumed from the stream
7883
*/
7984
function tryConsumeImport(): boolean {
85+
if (lastToken === SyntaxKind.DotToken) {
86+
return false;
87+
}
8088
let token = scanner.getToken();
8189
if (token === SyntaxKind.ImportKeyword) {
8290
token = nextToken();
@@ -295,16 +303,13 @@ namespace ts {
295303

296304
// Do not look for:
297305
// AnySymbol.import("mod")
306+
// AnySymbol.nested.import("mod")
298307

299308
while (true) {
300309
const token = scanner.getToken();
301310
if (token === SyntaxKind.EndOfFileToken) {
302311
break;
303312
}
304-
if (token === SyntaxKind.DotToken) {
305-
nextToken(); // jump over anything directly following the dot
306-
nextToken();
307-
}
308313

309314
// check if at least one of alternative have moved scanner forward
310315
if (tryConsumeDeclare() ||

0 commit comments

Comments
 (0)