Skip to content

Commit 23abcc0

Browse files
committed
Use compilerOptionsIndicateEs6Modules over program contains es6 modules for determining auto import offering. Also dont depend on uncheck js file for this.
Fixes microsoft#28696
1 parent 36dc04b commit 23abcc0

File tree

3 files changed

+53
-25
lines changed

3 files changed

+53
-25
lines changed

src/services/completions.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,12 +1050,10 @@ namespace ts.Completions {
10501050
if (sourceFile.externalModuleIndicator) return true;
10511051
// If already using commonjs, don't introduce ES6.
10521052
if (sourceFile.commonJsModuleIndicator) return false;
1053-
// For JS, stay on the safe side.
1054-
if (isUncheckedFile) return false;
1055-
// If some file is using ES6 modules, assume that it's OK to add more.
1056-
if (programContainsEs6Modules(program)) return true;
10571053
// If module transpilation is enabled or we're targeting es6 or above, or not emitting, OK.
1058-
return compilerOptionsIndicateEs6Modules(program.getCompilerOptions());
1054+
if (compilerOptionsIndicateEs6Modules(program.getCompilerOptions())) return true;
1055+
// If some file is using ES6 modules, assume that it's OK to add more.
1056+
return programContainsEs6Modules(program);
10591057
}
10601058

10611059
function isSnippetScope(scopeNode: Node): boolean {

tests/cases/fourslash/completionsImport_compilerOptionsModule.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,31 @@
1111
////fo/*b*/
1212

1313
// @Filename: /c.js
14-
////const x = 0;/*c*/ // Off for JS files (unless a non-declaration external module exists in the project)
14+
////const x = 0;/*c*/
15+
16+
// @Filename: /c1.js
17+
////// @ts-check
18+
////const x = 0;/*ccheck*/
1519

1620
// @Filename: /c2.ts
17-
////const x = 0;/*c2*/
21+
////const x = 0;/*cts*/
1822

1923
// @Filename: /d.js
2024
////const a = import("./a"); // Does not make this an external module
2125
////fo/*d*/
2226

27+
// @Filename: /d1.js
28+
////// @ts-check
29+
////const a = import("./a"); // Does not make this an external module
30+
////fo/*dcheck*/
31+
2332
// @Filename: /d2.ts
2433
////const a = import("./a"); // Does not make this an external module
25-
////fo/*d2*/
34+
////fo/*dts*/
2635

27-
verify.completions({ marker: ["b", "c", "d"], excludes: "foo", preferences: { includeCompletionsForModuleExports: true } });
36+
verify.completions({ marker: ["b"], excludes: "foo", preferences: { includeCompletionsForModuleExports: true } });
2837
verify.completions({
29-
marker: ["c2", "d2"],
38+
marker: ["c", "ccheck", "cts", "d", "dcheck", "dts"],
3039
includes: [{ name: "foo", source: "/node_modules/a/index", text: "const foo: 0", kind: "const", kindModifiers: "export,declare", hasAction: true, sourceDisplay: "a" }],
3140
preferences: { includeCompletionsForModuleExports: true },
3241
});

tests/cases/fourslash/noImportCompletionsInOtherJavaScriptFile.ts

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,40 @@
1212
////
1313

1414
// @Filename: /b.js
15-
//// /**/
15+
//// /*1*/
1616

17-
verify.completions({ marker: "", excludes: "fail", preferences: { includeCompletionsForModuleExports: true } });
18-
edit.insert("export const k = 10;\r\nf");
19-
verify.completions({
20-
includes: {
21-
name: "fail",
22-
source: "/node_modules/foo/index",
23-
sourceDisplay: "./node_modules/foo/index",
24-
text: "const fail: number",
25-
kind: "const",
26-
kindModifiers: "export,declare",
27-
hasAction: true,
28-
},
29-
preferences: { includeCompletionsForModuleExports: true },
30-
});
17+
// @Filename: /b2.js
18+
//////@ts-check
19+
/////*2*/
20+
21+
// @Filename: /b3.ts
22+
/////*3*/
23+
24+
// In esnext js files are assumed to be modules
25+
goTo.eachMarker(() => {
26+
verify.completions({
27+
includes: {
28+
name: "fail",
29+
source: "/node_modules/foo/index",
30+
sourceDisplay: "./node_modules/foo/index",
31+
text: "const fail: number",
32+
kind: "const",
33+
kindModifiers: "export,declare",
34+
hasAction: true,
35+
},
36+
preferences: { includeCompletionsForModuleExports: true },
37+
});
38+
edit.insert("export const k = 10;\r\nf");
39+
verify.completions({
40+
includes: {
41+
name: "fail",
42+
source: "/node_modules/foo/index",
43+
sourceDisplay: "./node_modules/foo/index",
44+
text: "const fail: number",
45+
kind: "const",
46+
kindModifiers: "export,declare",
47+
hasAction: true,
48+
},
49+
preferences: { includeCompletionsForModuleExports: true },
50+
});
51+
});

0 commit comments

Comments
 (0)