diff --git a/src/services/preProcess.ts b/src/services/preProcess.ts index d5c384e9161cc..f891891deb76f 100644 --- a/src/services/preProcess.ts +++ b/src/services/preProcess.ts @@ -347,8 +347,8 @@ namespace ts { if (scanner.getToken() === SyntaxKind.TemplateHead) { const stack = [scanner.getToken()]; - let token = scanner.scan(); loop: while (length(stack)) { + const token = scanner.scan(); switch (token) { case SyntaxKind.EndOfFileToken: break loop; @@ -376,7 +376,6 @@ namespace ts { } break; } - token = scanner.scan(); } nextToken(); } diff --git a/src/testRunner/unittests/services/preProcessFile.ts b/src/testRunner/unittests/services/preProcessFile.ts index a6369d6e4d4cf..a0ff91a26b1b4 100644 --- a/src/testRunner/unittests/services/preProcessFile.ts +++ b/src/testRunner/unittests/services/preProcessFile.ts @@ -205,6 +205,22 @@ describe("unittests:: services:: PreProcessFile:", () => { /* eslint-enable no-template-curly-in-string */ }); + it("Ignores imports in template strings", () => { + /* eslint-disable no-template-curly-in-string */ + test("a ? `&${a}` : `#${b}`;\n\n `import(\"${moduleSpecifier}\").${id}`;", + /*readImportFile*/ true, + /*detectJavaScriptImports*/ true, + { + referencedFiles: [], + typeReferenceDirectives: [], + libReferenceDirectives: [], + importedFiles: [], + ambientExternalModules: undefined, + isLibFile: false + }); + /* eslint-enable no-template-curly-in-string */ + }); + it("Correctly returns imports after a template expression", () => { /* eslint-disable no-template-curly-in-string */ test("`${foo}`; import \"./foo\";",