Skip to content

Commit 9b93410

Browse files
committed
fix(47597): ignore commented imports following template expression
1 parent 3206df8 commit 9b93410

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

src/services/preProcess.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,20 @@ namespace ts {
345345
break;
346346
}
347347

348+
if (scanner.getToken() === SyntaxKind.TemplateHead) {
349+
while (true) {
350+
if (scanner.getToken() === SyntaxKind.EndOfFileToken) {
351+
break;
352+
}
353+
if (scanner.getToken() === SyntaxKind.CloseBraceToken) {
354+
scanner.reScanTemplateToken(/*isTaggedTemplate*/ false);
355+
break;
356+
}
357+
scanner.scan();
358+
}
359+
nextToken();
360+
}
361+
348362
// check if at least one of alternative have moved scanner forward
349363
if (tryConsumeDeclare() ||
350364
tryConsumeImport() ||

src/testRunner/unittests/services/preProcessFile.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,50 @@ describe("unittests:: services:: PreProcessFile:", () => {
176176
});
177177
});
178178

179+
it("Correctly ignore commented imports following template expression", () => {
180+
test("/**" + "\n" +
181+
" * Before" + "\n" +
182+
" * ```" + "\n" +
183+
" * import * as a from \"a\";" + "\n" +
184+
" * ```" + "\n" +
185+
" */" + "\n" +
186+
"type Foo = `${string}`;" + "\n" + // eslint-disable-line no-template-curly-in-string
187+
"/**" + "\n" +
188+
" * After" + "\n" +
189+
" * ```" + "\n" +
190+
" * import { B } from \"b\";" + "\n" +
191+
" * import * as c from \"c\";" + "\n" +
192+
" * ```" + "\n" +
193+
" */",
194+
/*readImportFile*/ true,
195+
/*detectJavaScriptImports*/ true,
196+
{
197+
referencedFiles: [],
198+
typeReferenceDirectives: [],
199+
libReferenceDirectives: [],
200+
importedFiles: [],
201+
ambientExternalModules: undefined,
202+
isLibFile: false
203+
});
204+
});
205+
206+
it("Correctly returns imports after a template expression", () => {
207+
// eslint-disable-next-line no-template-curly-in-string
208+
test("`${foo}`; import \"./foo\";",
209+
/*readImportFile*/ true,
210+
/*detectJavaScriptImports*/ true,
211+
{
212+
referencedFiles: [],
213+
typeReferenceDirectives: [],
214+
libReferenceDirectives: [],
215+
importedFiles: [
216+
{ fileName: "./foo", pos: 17, end: 22 }
217+
],
218+
ambientExternalModules: undefined,
219+
isLibFile: false
220+
});
221+
});
222+
179223
it("Correctly return ES6 exports", () => {
180224
test("export * from \"m1\";" + "\n" +
181225
"export {a} from \"m2\";" + "\n" +

0 commit comments

Comments
 (0)