Skip to content

Commit 25555c3

Browse files
committed
add other supported extension types
1 parent 76509c3 commit 25555c3

8 files changed

+55
-12
lines changed

src/compiler/moduleSpecifiers.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -687,13 +687,17 @@ namespace ts.moduleSpecifiers {
687687
case Ending.Index:
688688
return noExtension;
689689
case Ending.JsExtension:
690-
return noExtension + getJSExtensionForFile(fileName, options);
690+
return noExtension + getJSExtensionForFileIfApplicable(fileName, options);
691691
default:
692692
return Debug.assertNever(ending);
693693
}
694694
}
695695

696-
function getJSExtensionForFile(fileName: string, options: CompilerOptions): Extension {
696+
function getJSExtensionForFileIfApplicable(fileName: string, options: CompilerOptions): Extension {
697+
return getJSExtensionForFile(fileName, options) ?? Debug.fail(`Extension ${extensionFromPath(fileName)} is unsupported:: FileName:: ${fileName}`);
698+
}
699+
700+
export function getJSExtensionForFile(fileName: string, options: CompilerOptions): Extension | undefined {
697701
const ext = extensionFromPath(fileName);
698702
switch (ext) {
699703
case Extension.Ts:
@@ -705,10 +709,8 @@ namespace ts.moduleSpecifiers {
705709
case Extension.Jsx:
706710
case Extension.Json:
707711
return ext;
708-
case Extension.TsBuildInfo:
709-
return Debug.fail(`Extension ${Extension.TsBuildInfo} is unsupported:: FileName:: ${fileName}`);
710712
default:
711-
return Debug.assertNever(ext);
713+
return undefined;
712714
}
713715
}
714716

src/services/stringCompletions.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -425,13 +425,14 @@ namespace ts.Completions.StringCompletions {
425425
}
426426

427427
let foundFileName: string;
428+
const outputExtension = moduleSpecifiers.getJSExtensionForFile(filePath, host.getCompilationSettings());
428429
if (includeExtensionsOption === IncludeExtensionsOption.Exclude && !fileExtensionIs(filePath, Extension.Json)) {
429430
foundFileName = removeFileExtension(getBaseFileName(filePath));
430431
foundFiles.set(foundFileName, tryGetExtensionFromPath(filePath));
431432
}
432-
else if (includeExtensionsOption === IncludeExtensionsOption.ModuleSpecifierCompletion && fileExtensionIs(filePath, Extension.Ts)) {
433-
foundFileName = changeExtension(getBaseFileName(filePath), Extension.Js);
434-
foundFiles.set(foundFileName, Extension.Js);
433+
else if (includeExtensionsOption === IncludeExtensionsOption.ModuleSpecifierCompletion && outputExtension) {
434+
foundFileName = changeExtension(getBaseFileName(filePath), outputExtension);
435+
foundFiles.set(foundFileName, outputExtension);
435436
}
436437
else {
437438
foundFileName = getBaseFileName(filePath);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/// <reference path='fourslash.ts'/>
2+
//@Filename:test.d.ts
3+
//// export declare class Test {}
4+
5+
//@Filename:module.ts
6+
////import { Test } from ".//**/"
7+
8+
verify.completions({ marker: "", includes:{name:"test.js"}, preferences: {importModuleSpecifierEnding: "js" }, isNewIdentifierLocation: true});
9+
verify.completions({ marker: "", includes:{name:"test"}, preferences: {importModuleSpecifierEnding: "index" }, isNewIdentifierLocation: true});

tests/cases/fourslash/completionImportModuleSpecifierEndingJs.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
//@Filename:module.js
99
////import { f } from ".//**/"
1010

11-
12-
verify.completions({ marker: "", includes:{name:"test.js"}, preferences: {importModuleSpecifierEnding: "js" }, isNewIdentifierLocation: true})
11+
verify.completions({ marker: "", includes:{name:"test.js"}, preferences: {importModuleSpecifierEnding: "js" }, isNewIdentifierLocation: true});
12+
verify.completions({ marker: "", includes:{name:"test"}, preferences: {importModuleSpecifierEnding: "index" }, isNewIdentifierLocation: true});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/// <reference path='fourslash.ts'/>
2+
//@allowJs: true
3+
//@jsx:preserve
4+
//@Filename:test.jsx
5+
//// export class Test { }
6+
7+
//@Filename:module.jsx
8+
////import { Test } from ".//**/"
9+
10+
verify.completions({ marker: "", includes:{name:"test.jsx"}, preferences: {importModuleSpecifierEnding: "js"}, isNewIdentifierLocation: true});
11+
verify.completions({ marker: "", includes:{name:"test"}, preferences: {importModuleSpecifierEnding: "index" }, isNewIdentifierLocation: true});

tests/cases/fourslash/completionImportModuleSpecifierEndingTs.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
//@Filename:module.ts
88
////import { f } from ".//**/"
99

10-
11-
verify.completions({ marker: "", includes:{name:"test.js"}, preferences: {importModuleSpecifierEnding: "js" }, isNewIdentifierLocation: true})
10+
verify.completions({ marker: "", includes:{name:"test.js"}, preferences: {importModuleSpecifierEnding: "js" }, isNewIdentifierLocation: true});
11+
verify.completions({ marker: "", includes:{name:"test"}, preferences: {importModuleSpecifierEnding: "index" }, isNewIdentifierLocation: true});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path='fourslash.ts'/>
2+
//@jsx:preserve
3+
//@Filename:test.tsx
4+
//// export class Test { }
5+
6+
//@Filename:module.tsx
7+
////import { Test } from ".//**/"
8+
9+
verify.completions({ marker: "", includes:{name:"test.jsx"}, preferences: {importModuleSpecifierEnding: "js"}, isNewIdentifierLocation: true});
10+
verify.completions({ marker: "", includes:{name:"test"}, preferences: {importModuleSpecifierEnding: "index" }, isNewIdentifierLocation: true});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path='fourslash.ts'/>
2+
//@jsx:react
3+
//@Filename:test.tsx
4+
//// export class Test { }
5+
6+
//@Filename:module.tsx
7+
////import { Test } from ".//**/"
8+
9+
verify.completions({ marker: "", includes:{name:"test.js"}, preferences: {importModuleSpecifierEnding: "js"}, isNewIdentifierLocation: true});
10+
verify.completions({ marker: "", includes:{name:"test"}, preferences: {importModuleSpecifierEnding: "index" }, isNewIdentifierLocation: true});

0 commit comments

Comments
 (0)