Skip to content

Commit 16ce1c1

Browse files
Completion list for JSON files imported using CommonJS require
1 parent 0e6f8eb commit 16ce1c1

19 files changed

+188
-16
lines changed

src/compiler/checker.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,8 +1257,8 @@ namespace ts {
12571257
return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
12581258
}
12591259

1260-
function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression): Symbol {
1261-
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, Diagnostics.Cannot_find_module_0);
1260+
function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression, reportModuleNotFoundError = true): Symbol {
1261+
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, reportModuleNotFoundError ? Diagnostics.Cannot_find_module_0 : undefined);
12621262
}
12631263

12641264
function resolveExternalModuleNameWorker(location: Node, moduleReferenceExpression: Expression, moduleNotFoundError: DiagnosticMessage): Symbol {
@@ -4565,11 +4565,17 @@ namespace ts {
45654565
}
45664566

45674567
function resolveExternalModuleTypeByLiteral(name: StringLiteral) {
4568-
const moduleSym = resolveExternalModuleName(name, name);
4568+
const nameIsInJavaScriptFile = isInJavaScriptFile(name);
4569+
const moduleSym = resolveExternalModuleName(name, name, /*reportModuleNotFoundError*/ nameIsInJavaScriptFile);
45694570
if (moduleSym) {
4570-
const resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym);
4571-
if (resolvedModuleSymbol) {
4572-
return getTypeOfSymbol(resolvedModuleSymbol);
4571+
const sourceFile = getDeclarationOfKind(moduleSym, SyntaxKind.SourceFile) as SourceFile;
4572+
const resolvedFileIsJSON = getScriptKindFromFileName(sourceFile.fileName) === ScriptKind.JSON;
4573+
// Treated as external module import if it is in JavaScript file or when JSON is required
4574+
if (nameIsInJavaScriptFile || resolvedFileIsJSON) {
4575+
const resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym);
4576+
if (resolvedModuleSymbol) {
4577+
return getTypeOfSymbol(resolvedModuleSymbol);
4578+
}
45734579
}
45744580
}
45754581

@@ -11511,8 +11517,8 @@ namespace ts {
1151111517
}
1151211518
}
1151311519

11514-
// In JavaScript files, calls to any identifier 'require' are treated as external module imports
11515-
if (isInJavaScriptFile(node) && isRequireCall(node, /*checkArgumentIsStringLiteral*/true)) {
11520+
// Calls to any identifier 'require' are treated as external module imports in JavaScript files or when JSON is required
11521+
if (isRequireCall(node, /*checkArgumentIsStringLiteral*/true)) {
1151611522
return resolveExternalModuleTypeByLiteral(<StringLiteral>node.arguments[0]);
1151711523
}
1151811524

src/compiler/core.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,8 @@ namespace ts {
819819
return ScriptKind.TS;
820820
case ".tsx":
821821
return ScriptKind.TSX;
822+
case ".json":
823+
return ScriptKind.JSON;
822824
default:
823825
return ScriptKind.Unknown;
824826
}
@@ -830,6 +832,7 @@ namespace ts {
830832
export const supportedTypeScriptExtensions = [".ts", ".tsx", ".d.ts"];
831833
export const supportedJavascriptExtensions = [".js", ".jsx"];
832834
const allSupportedExtensions = supportedTypeScriptExtensions.concat(supportedJavascriptExtensions);
835+
export const supportedTypeScriptAndJsonExtensions = supportedTypeScriptExtensions.concat([".json"]);
833836

834837
export function getSupportedExtensions(options?: CompilerOptions): string[] {
835838
return options && options.allowJs ? allSupportedExtensions : supportedTypeScriptExtensions;

src/compiler/parser.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,17 @@ namespace ts {
618618
token = nextToken();
619619
processReferenceComments(sourceFile);
620620

621-
sourceFile.statements = parseList(ParsingContext.SourceElements, parseStatement);
621+
if (scriptKind === ScriptKind.JSON) {
622+
const exportAssignment = <ExportAssignment>createNode(SyntaxKind.ExportAssignment);
623+
const json = parseObjectLiteralExpression();
624+
exportAssignment.expression = json;
625+
exportAssignment.isExportEquals = true;
626+
finishNode(exportAssignment);
627+
sourceFile.statements = <NodeArray<Statement>>[<Statement>exportAssignment];
628+
}
629+
else {
630+
sourceFile.statements = parseList(ParsingContext.SourceElements, parseStatement);
631+
}
622632
Debug.assert(token === SyntaxKind.EndOfFileToken);
623633
sourceFile.endOfFileToken = parseTokenNode();
624634

src/compiler/program.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,8 @@ namespace ts {
601601

602602
export function nodeModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
603603
const containingDirectory = getDirectoryPath(containingFile);
604-
const supportedExtensions = getSupportedExtensions(compilerOptions);
604+
const isCommonJS = getEmitModuleKind(compilerOptions) === ModuleKind.CommonJS;
605+
const supportedExtensions = getSupportedExtensions(compilerOptions).concat(isCommonJS ? [".json"] : []);
605606
const traceEnabled = isTraceEnabled(compilerOptions, host);
606607

607608
const failedLookupLocations: string[] = [];
@@ -1334,7 +1335,7 @@ namespace ts {
13341335
getNewLine: () => host.getNewLine(),
13351336
getSourceFile: program.getSourceFile,
13361337
getSourceFileByPath: program.getSourceFileByPath,
1337-
getSourceFiles: program.getSourceFiles,
1338+
getSourceFiles: () => filter(program.getSourceFiles(), sourceFile => sourceFile.scriptKind !== ScriptKind.JSON),
13381339
writeFile: writeFileCallback || (
13391340
(fileName, data, writeByteOrderMark, onError, sourceFiles) => host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles)),
13401341
isEmitBlocked,
@@ -1729,13 +1730,14 @@ namespace ts {
17291730

17301731
const isJavaScriptFile = isSourceFileJavaScript(file);
17311732
const isExternalModuleFile = isExternalModule(file);
1733+
const isCommonJS = getEmitModuleKind(options) === ModuleKind.CommonJS;
17321734

17331735
let imports: LiteralExpression[];
17341736
let moduleAugmentations: LiteralExpression[];
17351737

17361738
for (const node of file.statements) {
17371739
collectModuleReferences(node, /*inAmbientModule*/ false);
1738-
if (isJavaScriptFile) {
1740+
if (isJavaScriptFile || isCommonJS) {
17391741
collectRequireCalls(node);
17401742
}
17411743
}

src/compiler/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2622,7 +2622,8 @@ namespace ts {
26222622
JS = 1,
26232623
JSX = 2,
26242624
TS = 3,
2625-
TSX = 4
2625+
TSX = 4,
2626+
JSON = 5
26262627
}
26272628

26282629
export const enum ScriptTarget {

tests/baselines/reference/moduleResolutionWithExtensions.trace.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"File '/src/a.js.ts' does not exist.",
1818
"File '/src/a.js.tsx' does not exist.",
1919
"File '/src/a.js.d.ts' does not exist.",
20+
"File '/src/a.js.json' does not exist.",
2021
"File name '/src/a.js' has a '.js' extension - stripping it",
2122
"File '/src/a.ts' exist - use it as a name resolution result.",
2223
"Resolving real path for '/src/a.ts', result '/src/a.ts'",
@@ -27,6 +28,7 @@
2728
"File '/src/jquery.js.ts' does not exist.",
2829
"File '/src/jquery.js.tsx' does not exist.",
2930
"File '/src/jquery.js.d.ts' does not exist.",
31+
"File '/src/jquery.js.json' does not exist.",
3032
"File name '/src/jquery.js' has a '.js' extension - stripping it",
3133
"File '/src/jquery.ts' does not exist.",
3234
"File '/src/jquery.tsx' does not exist.",

tests/baselines/reference/moduleResolutionWithSymlinks.trace.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"File '/src/library-a.ts' does not exist.",
66
"File '/src/library-a.tsx' does not exist.",
77
"File '/src/library-a.d.ts' does not exist.",
8+
"File '/src/library-a.json' does not exist.",
89
"File '/src/library-a/package.json' does not exist.",
910
"File '/src/library-a/index.ts' exist - use it as a name resolution result.",
1011
"Resolving real path for '/src/library-a/index.ts', result '/src/library-a/index.ts'",
@@ -15,6 +16,7 @@
1516
"File '/src/library-b.ts' does not exist.",
1617
"File '/src/library-b.tsx' does not exist.",
1718
"File '/src/library-b.d.ts' does not exist.",
19+
"File '/src/library-b.json' does not exist.",
1820
"File '/src/library-b/package.json' does not exist.",
1921
"File '/src/library-b/index.ts' exist - use it as a name resolution result.",
2022
"Resolving real path for '/src/library-b/index.ts', result '/src/library-b/index.ts'",

tests/baselines/reference/pathMappingBasedModuleResolution3_node.trace.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
"File 'c:/root/file4.ts' does not exist.",
2222
"File 'c:/root/file4.tsx' does not exist.",
2323
"File 'c:/root/file4.d.ts' does not exist.",
24+
"File 'c:/root/file4.json' does not exist.",
2425
"File 'c:/root/file4/package.json' does not exist.",
2526
"File 'c:/root/file4/index.ts' does not exist.",
2627
"File 'c:/root/file4/index.tsx' does not exist.",
2728
"File 'c:/root/file4/index.d.ts' does not exist.",
29+
"File 'c:/root/file4/index.json' does not exist.",
2830
"Loading module 'file4' from 'node_modules' folder.",
2931
"File 'c:/root/folder2/node_modules/file4.ts' does not exist.",
3032
"File 'c:/root/folder2/node_modules/file4.tsx' does not exist.",

tests/baselines/reference/pathMappingBasedModuleResolution4_node.trace.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
"File 'c:/root/file4.ts' does not exist.",
2222
"File 'c:/root/file4.tsx' does not exist.",
2323
"File 'c:/root/file4.d.ts' does not exist.",
24+
"File 'c:/root/file4.json' does not exist.",
2425
"File 'c:/root/file4/package.json' does not exist.",
2526
"File 'c:/root/file4/index.ts' does not exist.",
2627
"File 'c:/root/file4/index.tsx' does not exist.",
2728
"File 'c:/root/file4/index.d.ts' does not exist.",
29+
"File 'c:/root/file4/index.json' does not exist.",
2830
"Loading module 'file4' from 'node_modules' folder.",
2931
"File 'c:/root/folder2/node_modules/file4.ts' does not exist.",
3032
"File 'c:/root/folder2/node_modules/file4.tsx' does not exist.",

tests/baselines/reference/pathMappingBasedModuleResolution5_node.trace.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
"File 'c:/root/folder3/file2.ts' does not exist.",
2020
"File 'c:/root/folder3/file2.tsx' does not exist.",
2121
"File 'c:/root/folder3/file2.d.ts' does not exist.",
22+
"File 'c:/root/folder3/file2.json' does not exist.",
2223
"File 'c:/root/folder3/file2/package.json' does not exist.",
2324
"File 'c:/root/folder3/file2/index.ts' does not exist.",
2425
"File 'c:/root/folder3/file2/index.tsx' does not exist.",
2526
"File 'c:/root/folder3/file2/index.d.ts' does not exist.",
27+
"File 'c:/root/folder3/file2/index.json' does not exist.",
2628
"Trying substitution 'generated/*', candidate module location: 'generated/folder3/file2'.",
2729
"Loading module as file / folder, candidate module location 'c:/root/generated/folder3/file2'.",
2830
"File 'c:/root/generated/folder3/file2.ts' exist - use it as a name resolution result.",
@@ -38,6 +40,7 @@
3840
"File 'c:/root/shared/components/file3.ts' does not exist.",
3941
"File 'c:/root/shared/components/file3.tsx' does not exist.",
4042
"File 'c:/root/shared/components/file3.d.ts' does not exist.",
43+
"File 'c:/root/shared/components/file3.json' does not exist.",
4144
"File 'c:/root/shared/components/file3/package.json' does not exist.",
4245
"File 'c:/root/shared/components/file3/index.ts' does not exist.",
4346
"File 'c:/root/shared/components/file3/index.tsx' does not exist.",
@@ -54,19 +57,23 @@
5457
"File 'c:/root/file4.ts' does not exist.",
5558
"File 'c:/root/file4.tsx' does not exist.",
5659
"File 'c:/root/file4.d.ts' does not exist.",
60+
"File 'c:/root/file4.json' does not exist.",
5761
"File 'c:/root/file4/package.json' does not exist.",
5862
"File 'c:/root/file4/index.ts' does not exist.",
5963
"File 'c:/root/file4/index.tsx' does not exist.",
6064
"File 'c:/root/file4/index.d.ts' does not exist.",
65+
"File 'c:/root/file4/index.json' does not exist.",
6166
"Trying substitution 'generated/*', candidate module location: 'generated/file4'.",
6267
"Loading module as file / folder, candidate module location 'c:/root/generated/file4'.",
6368
"File 'c:/root/generated/file4.ts' does not exist.",
6469
"File 'c:/root/generated/file4.tsx' does not exist.",
6570
"File 'c:/root/generated/file4.d.ts' does not exist.",
71+
"File 'c:/root/generated/file4.json' does not exist.",
6672
"File 'c:/root/generated/file4/package.json' does not exist.",
6773
"File 'c:/root/generated/file4/index.ts' does not exist.",
6874
"File 'c:/root/generated/file4/index.tsx' does not exist.",
6975
"File 'c:/root/generated/file4/index.d.ts' does not exist.",
76+
"File 'c:/root/generated/file4/index.json' does not exist.",
7077
"Loading module 'file4' from 'node_modules' folder.",
7178
"File 'c:/root/folder1/node_modules/file4.ts' does not exist.",
7279
"File 'c:/root/folder1/node_modules/file4.tsx' does not exist.",

tests/baselines/reference/pathMappingBasedModuleResolution6_node.trace.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
"File 'c:/root/src/project/file3.ts' does not exist.",
1111
"File 'c:/root/src/project/file3.tsx' does not exist.",
1212
"File 'c:/root/src/project/file3.d.ts' does not exist.",
13+
"File 'c:/root/src/project/file3.json' does not exist.",
1314
"File 'c:/root/src/project/file3/package.json' does not exist.",
1415
"File 'c:/root/src/project/file3/index.ts' does not exist.",
1516
"File 'c:/root/src/project/file3/index.tsx' does not exist.",
1617
"File 'c:/root/src/project/file3/index.d.ts' does not exist.",
18+
"File 'c:/root/src/project/file3/index.json' does not exist.",
1719
"Trying other entries in 'rootDirs'",
1820
"Loading 'project/file3' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file3'",
1921
"Loading module as file / folder, candidate module location 'c:/root/generated/src/project/file3'.",
@@ -31,16 +33,19 @@
3133
"File 'c:/root/generated/src/file2.ts' does not exist.",
3234
"File 'c:/root/generated/src/file2.tsx' does not exist.",
3335
"File 'c:/root/generated/src/file2.d.ts' does not exist.",
36+
"File 'c:/root/generated/src/file2.json' does not exist.",
3437
"File 'c:/root/generated/src/file2/package.json' does not exist.",
3538
"File 'c:/root/generated/src/file2/index.ts' does not exist.",
3639
"File 'c:/root/generated/src/file2/index.tsx' does not exist.",
3740
"File 'c:/root/generated/src/file2/index.d.ts' does not exist.",
41+
"File 'c:/root/generated/src/file2/index.json' does not exist.",
3842
"Trying other entries in 'rootDirs'",
3943
"Loading 'file2' from the root dir 'c:/root/src', candidate location 'c:/root/src/file2'",
4044
"Loading module as file / folder, candidate module location 'c:/root/src/file2'.",
4145
"File 'c:/root/src/file2.ts' does not exist.",
4246
"File 'c:/root/src/file2.tsx' does not exist.",
4347
"File 'c:/root/src/file2.d.ts' does not exist.",
48+
"File 'c:/root/src/file2.json' does not exist.",
4449
"File 'c:/root/src/file2/package.json' does not exist.",
4550
"File 'c:/root/src/file2/index.ts' does not exist.",
4651
"File 'c:/root/src/file2/index.tsx' does not exist.",

tests/baselines/reference/pathMappingBasedModuleResolution7_node.trace.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
"File 'c:/root/src/project/file2.ts' does not exist.",
1111
"File 'c:/root/src/project/file2.tsx' does not exist.",
1212
"File 'c:/root/src/project/file2.d.ts' does not exist.",
13+
"File 'c:/root/src/project/file2.json' does not exist.",
1314
"File 'c:/root/src/project/file2/package.json' does not exist.",
1415
"File 'c:/root/src/project/file2/index.ts' does not exist.",
1516
"File 'c:/root/src/project/file2/index.tsx' does not exist.",
1617
"File 'c:/root/src/project/file2/index.d.ts' does not exist.",
18+
"File 'c:/root/src/project/file2/index.json' does not exist.",
1719
"Trying other entries in 'rootDirs'",
1820
"Loading 'project/file2' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file2'",
1921
"Loading module as file / folder, candidate module location 'c:/root/generated/src/project/file2'.",
@@ -30,19 +32,23 @@
3032
"File 'c:/root/module3.ts' does not exist.",
3133
"File 'c:/root/module3.tsx' does not exist.",
3234
"File 'c:/root/module3.d.ts' does not exist.",
35+
"File 'c:/root/module3.json' does not exist.",
3336
"File 'c:/root/module3/package.json' does not exist.",
3437
"File 'c:/root/module3/index.ts' does not exist.",
3538
"File 'c:/root/module3/index.tsx' does not exist.",
3639
"File 'c:/root/module3/index.d.ts' does not exist.",
40+
"File 'c:/root/module3/index.json' does not exist.",
3741
"Trying substitution 'c:/shared/*', candidate module location: 'c:/shared/module3'.",
3842
"Loading module as file / folder, candidate module location 'c:/shared/module3'.",
3943
"File 'c:/shared/module3.ts' does not exist.",
4044
"File 'c:/shared/module3.tsx' does not exist.",
4145
"File 'c:/shared/module3.d.ts' does not exist.",
46+
"File 'c:/shared/module3.json' does not exist.",
4247
"File 'c:/shared/module3/package.json' does not exist.",
4348
"File 'c:/shared/module3/index.ts' does not exist.",
4449
"File 'c:/shared/module3/index.tsx' does not exist.",
4550
"File 'c:/shared/module3/index.d.ts' does not exist.",
51+
"File 'c:/shared/module3/index.json' does not exist.",
4652
"Loading module 'module3' from 'node_modules' folder.",
4753
"File 'c:/root/src/node_modules/module3.ts' does not exist.",
4854
"File 'c:/root/src/node_modules/module3.tsx' does not exist.",
@@ -87,15 +93,18 @@
8793
"File 'c:/root/module1.ts' does not exist.",
8894
"File 'c:/root/module1.tsx' does not exist.",
8995
"File 'c:/root/module1.d.ts' does not exist.",
96+
"File 'c:/root/module1.json' does not exist.",
9097
"File 'c:/root/module1/package.json' does not exist.",
9198
"File 'c:/root/module1/index.ts' does not exist.",
9299
"File 'c:/root/module1/index.tsx' does not exist.",
93100
"File 'c:/root/module1/index.d.ts' does not exist.",
101+
"File 'c:/root/module1/index.json' does not exist.",
94102
"Trying substitution 'c:/shared/*', candidate module location: 'c:/shared/module1'.",
95103
"Loading module as file / folder, candidate module location 'c:/shared/module1'.",
96104
"File 'c:/shared/module1.ts' does not exist.",
97105
"File 'c:/shared/module1.tsx' does not exist.",
98106
"File 'c:/shared/module1.d.ts' does not exist.",
107+
"File 'c:/shared/module1.json' does not exist.",
99108
"File 'c:/shared/module1/package.json' does not exist.",
100109
"File 'c:/shared/module1/index.ts' does not exist.",
101110
"File 'c:/shared/module1/index.tsx' does not exist.",
@@ -123,16 +132,19 @@
123132
"File 'c:/root/generated/src/file3.ts' does not exist.",
124133
"File 'c:/root/generated/src/file3.tsx' does not exist.",
125134
"File 'c:/root/generated/src/file3.d.ts' does not exist.",
135+
"File 'c:/root/generated/src/file3.json' does not exist.",
126136
"File 'c:/root/generated/src/file3/package.json' does not exist.",
127137
"File 'c:/root/generated/src/file3/index.ts' does not exist.",
128138
"File 'c:/root/generated/src/file3/index.tsx' does not exist.",
129139
"File 'c:/root/generated/src/file3/index.d.ts' does not exist.",
140+
"File 'c:/root/generated/src/file3/index.json' does not exist.",
130141
"Trying other entries in 'rootDirs'",
131142
"Loading 'file3' from the root dir 'c:/root/src', candidate location 'c:/root/src/file3'",
132143
"Loading module as file / folder, candidate module location 'c:/root/src/file3'.",
133144
"File 'c:/root/src/file3.ts' does not exist.",
134145
"File 'c:/root/src/file3.tsx' does not exist.",
135146
"File 'c:/root/src/file3.d.ts' does not exist.",
147+
"File 'c:/root/src/file3.json' does not exist.",
136148
"File 'c:/root/src/file3/package.json' does not exist.",
137149
"File 'c:/root/src/file3/index.ts' does not exist.",
138150
"File 'c:/root/src/file3/index.tsx' does not exist.",
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
// @Module: commonjs
4+
// @ModuleResolution: classic
5+
6+
// @Filename: json1.json
7+
////{
8+
//// "foo": "foo",
9+
//// "bar": "bar"
10+
////}
11+
12+
// @Filename: test.ts
13+
////var json1 = require("./json1");
14+
////json1./*1*/
15+
16+
goTo.marker("1");
17+
// ModuleResolution is "classic" so no completion
18+
verify.completionListIsEmpty();
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
// @Module: amd
4+
// @ModuleResolution: node
5+
6+
// @Filename: json1.json
7+
////{
8+
//// "foo": "foo",
9+
//// "bar": "bar"
10+
////}
11+
12+
// @Filename: test.ts
13+
////var json1 = require("./json1");
14+
////json1./*1*/
15+
16+
goTo.marker("1");
17+
// Module is "amd" so no completion
18+
verify.completionListIsEmpty();

0 commit comments

Comments
 (0)