diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts index ecf433425d9..c0d2a7db297 100644 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -2929,6 +2929,7 @@ declare namespace ts { getTokenText(): string; getTokenValue(): string; hasExtendedUnicodeEscape(): boolean; + hasPrecedingDot(): boolean; hasPrecedingLineBreak(): boolean; isIdentifier(): boolean; isReservedWord(): boolean; diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 43320b453c4..c1e7dbb299d 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -22,6 +22,7 @@ namespace ts { getTokenText(): string; getTokenValue(): string; hasExtendedUnicodeEscape(): boolean; + hasPrecedingDot(): boolean; hasPrecedingLineBreak(): boolean; isIdentifier(): boolean; isReservedWord(): boolean; @@ -833,6 +834,7 @@ namespace ts { getTokenText: () => text.substring(tokenPos, pos), getTokenValue: () => tokenValue, hasExtendedUnicodeEscape: () => (tokenFlags & TokenFlags.ExtendedUnicodeEscape) !== 0, + hasPrecedingDot: () => (tokenFlags & TokenFlags.PrecedingDot) !== 0, hasPrecedingLineBreak: () => (tokenFlags & TokenFlags.PrecedingLineBreak) !== 0, isIdentifier: () => token === SyntaxKind.Identifier || token > SyntaxKind.LastReservedWord, isReservedWord: () => token >= SyntaxKind.FirstReservedWord && token <= SyntaxKind.LastReservedWord, @@ -1469,6 +1471,7 @@ namespace ts { pos++; return token = SyntaxKind.MinusToken; case CharacterCodes.dot: + tokenFlags |= TokenFlags.PrecedingDot; if (isDigit(text.charCodeAt(pos + 1))) { tokenValue = scanNumber(); return token = SyntaxKind.NumericLiteral; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 987d403e7cd..a2eae1df6d5 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1585,6 +1585,7 @@ namespace ts { BinarySpecifier = 1 << 7, // e.g. `0b0110010000000000` OctalSpecifier = 1 << 8, // e.g. `0o777` ContainsSeparator = 1 << 9, // e.g. `0b1100_0101` + PrecedingDot = 1 << 10, BinaryOrOctalSpecifier = BinarySpecifier | OctalSpecifier, NumericLiteralFlags = Scientific | Octal | HexSpecifier | BinarySpecifier | OctalSpecifier | ContainsSeparator } diff --git a/src/harness/unittests/services/preProcessFile.ts b/src/harness/unittests/services/preProcessFile.ts index 1e13bc3e345..f68af84f759 100644 --- a/src/harness/unittests/services/preProcessFile.ts +++ b/src/harness/unittests/services/preProcessFile.ts @@ -59,6 +59,19 @@ describe("PreProcessFile:", () => { }); }), + it("Do not return reference path of non-imports", () => { + test("Quill.import('delta');", + /*readImportFile*/ true, + /*detectJavaScriptImports*/ false, + { + referencedFiles: [], + importedFiles: [], + typeReferenceDirectives: [], + ambientExternalModules: undefined, + isLibFile: false + }); + }), + it("Correctly return imported files", () => { 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\");", /*readImportFile*/ true, diff --git a/src/services/preProcess.ts b/src/services/preProcess.ts index fb138a87866..95bcbbe9bc6 100644 --- a/src/services/preProcess.ts +++ b/src/services/preProcess.ts @@ -78,7 +78,7 @@ namespace ts { */ function tryConsumeImport(): boolean { let token = scanner.getToken(); - if (token === SyntaxKind.ImportKeyword) { + if (token === SyntaxKind.ImportKeyword && !scanner.hasPrecedingDot()) { token = nextToken(); if (token === SyntaxKind.OpenParenToken) { token = nextToken(); @@ -293,6 +293,9 @@ namespace ts { // export import i = require("mod") // (for JavaScript files) require("mod") + // Do not look for: + // AnySymbol.import("mod") + while (true) { if (scanner.getToken() === SyntaxKind.EndOfFileToken) { break;