Skip to content

Commit a8618a7

Browse files
authored
Merge pull request microsoft#23358 from joscha/joscha/fix-non-imports-matching
fix: do not match MySymbol.import("mod")
2 parents cc6bc76 + f0057f9 commit a8618a7

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

src/harness/unittests/services/preProcessFile.ts

+26
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,32 @@ describe("PreProcessFile:", () => {
5959
});
6060
}),
6161

62+
it("Do not return reference path of non-imports", () => {
63+
test("Quill.import('delta');",
64+
/*readImportFile*/ true,
65+
/*detectJavaScriptImports*/ false,
66+
{
67+
referencedFiles: <ts.FileReference[]>[],
68+
importedFiles: <ts.FileReference[]>[],
69+
typeReferenceDirectives: [],
70+
ambientExternalModules: undefined,
71+
isLibFile: false
72+
});
73+
}),
74+
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+
6288
it("Correctly return imported files", () => {
6389
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\");",
6490
/*readImportFile*/ true,

src/services/preProcess.ts

+14-4
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,23 @@ 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+
lastToken = currentToken;
24+
currentToken = scanner.scan();
25+
if (currentToken === SyntaxKind.OpenBraceToken) {
2326
braceNesting++;
2427
}
25-
else if (token === SyntaxKind.CloseBraceToken) {
28+
else if (currentToken === SyntaxKind.CloseBraceToken) {
2629
braceNesting--;
2730
}
28-
return token;
31+
return currentToken;
2932
}
3033

3134
function getFileReference() {
@@ -77,6 +80,9 @@ namespace ts {
7780
* Returns true if at least one token was consumed from the stream
7881
*/
7982
function tryConsumeImport(): boolean {
83+
if (lastToken === SyntaxKind.DotToken) {
84+
return false;
85+
}
8086
let token = scanner.getToken();
8187
if (token === SyntaxKind.ImportKeyword) {
8288
token = nextToken();
@@ -293,6 +299,10 @@ namespace ts {
293299
// export import i = require("mod")
294300
// (for JavaScript files) require("mod")
295301

302+
// Do not look for:
303+
// AnySymbol.import("mod")
304+
// AnySymbol.nested.import("mod")
305+
296306
while (true) {
297307
if (scanner.getToken() === SyntaxKind.EndOfFileToken) {
298308
break;

0 commit comments

Comments
 (0)