Skip to content

Commit 1dbe063

Browse files
authored
Merge pull request #28745 from Microsoft/nonCheckJSAutoImport
Use compilerOptionsIndicateEs6Modules over program contains es6 modules for determining auto import offering. Also dont depend on uncheck js file for this.
2 parents 36dc04b + 23abcc0 commit 1dbe063

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)