mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-17 01:49:41 -05:00
Merge pull request #24192 from Kingwl/quick-fix-for-import-type
add quick fix for import type missing typeof
This commit is contained in:
@@ -4257,5 +4257,9 @@
|
||||
"Remove all unreachable code": {
|
||||
"category": "Message",
|
||||
"code": 95051
|
||||
},
|
||||
"Add missing typeof": {
|
||||
"category": "Message",
|
||||
"code": 95052
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,6 +116,7 @@
|
||||
"../services/codefixes/moduleSpecifiers.ts",
|
||||
"../services/codefixes/requireInTs.ts",
|
||||
"../services/codefixes/useDefaultImport.ts",
|
||||
"../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts",
|
||||
"../services/refactors/extractSymbol.ts",
|
||||
"../services/refactors/generateGetAccessorAndSetAccessor.ts",
|
||||
"../services/refactors/moveToNewFile.ts",
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
"../services/codefixes/moduleSpecifiers.ts",
|
||||
"../services/codefixes/requireInTs.ts",
|
||||
"../services/codefixes/useDefaultImport.ts",
|
||||
"../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts",
|
||||
"../services/refactors/extractSymbol.ts",
|
||||
"../services/refactors/generateGetAccessorAndSetAccessor.ts",
|
||||
"../services/refactors/moveToNewFile.ts",
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
"../services/codefixes/moduleSpecifiers.ts",
|
||||
"../services/codefixes/requireInTs.ts",
|
||||
"../services/codefixes/useDefaultImport.ts",
|
||||
"../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts",
|
||||
"../services/refactors/extractSymbol.ts",
|
||||
"../services/refactors/generateGetAccessorAndSetAccessor.ts",
|
||||
"../services/refactors/moveToNewFile.ts",
|
||||
|
||||
32
src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts
Normal file
32
src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
/* @internal */
|
||||
namespace ts.codefix {
|
||||
const fixIdAddMissingTypeof = "fixAddModuleReferTypeMissingTypeof";
|
||||
const fixId = fixIdAddMissingTypeof;
|
||||
const errorCodes = [Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here.code];
|
||||
registerCodeFix({
|
||||
errorCodes,
|
||||
getCodeActions: context => {
|
||||
const { sourceFile, span } = context;
|
||||
const typeContainer = getImportTypeNode(sourceFile, span.start);
|
||||
if (!typeContainer) return undefined;
|
||||
|
||||
const changes = textChanges.ChangeTracker.with(context, t => doChange(t, sourceFile, typeContainer));
|
||||
return [createCodeFixAction(fixId, changes, Diagnostics.Add_missing_typeof, fixId, Diagnostics.Add_missing_typeof)];
|
||||
},
|
||||
fixIds: [fixId],
|
||||
getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) =>
|
||||
doChange(changes, context.sourceFile, getImportTypeNode(diag.file, diag.start!))),
|
||||
});
|
||||
|
||||
function getImportTypeNode(sourceFile: SourceFile, pos: number): ImportTypeNode | undefined {
|
||||
const token = getTokenAtPosition(sourceFile, pos, /*includeJsDocComment*/ false);
|
||||
Debug.assert(token.kind === SyntaxKind.ImportKeyword);
|
||||
Debug.assert(token.parent.kind === SyntaxKind.ImportType);
|
||||
return <ImportTypeNode>token.parent;
|
||||
}
|
||||
|
||||
function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, typeContainer: ImportTypeNode) {
|
||||
const newTypeNode = updateImportTypeNode(typeContainer, typeContainer.argument, typeContainer.qualifier, typeContainer.typeArguments, /* isTypeOf */ true);
|
||||
changes.replaceNode(sourceFile, typeContainer, newTypeNode);
|
||||
}
|
||||
}
|
||||
@@ -109,6 +109,7 @@
|
||||
"codefixes/moduleSpecifiers.ts",
|
||||
"codefixes/requireInTs.ts",
|
||||
"codefixes/useDefaultImport.ts",
|
||||
"codefixes/fixAddModuleReferTypeMissingTypeof.ts",
|
||||
"refactors/extractSymbol.ts",
|
||||
"refactors/generateGetAccessorAndSetAccessor.ts",
|
||||
"refactors/moveToNewFile.ts",
|
||||
|
||||
16
tests/cases/fourslash/codeFixAddMissingTypeof1.ts
Normal file
16
tests/cases/fourslash/codeFixAddMissingTypeof1.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
/// <reference path='fourslash.ts' />
|
||||
|
||||
//// declare module "foo" {
|
||||
//// const a = "foo"
|
||||
//// export = a
|
||||
//// }
|
||||
//// const x: import("foo") = import("foo");
|
||||
|
||||
verify.codeFix({
|
||||
description: "Add missing typeof",
|
||||
newFileContent: `declare module "foo" {
|
||||
const a = "foo"
|
||||
export = a
|
||||
}
|
||||
const x: typeof import("foo") = import("foo");`
|
||||
});
|
||||
13
tests/cases/fourslash/codeFixAddMissingTypeof2.ts
Normal file
13
tests/cases/fourslash/codeFixAddMissingTypeof2.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
/// <reference path='fourslash.ts' />
|
||||
|
||||
// @Filename: a.ts
|
||||
//// export = 1;
|
||||
|
||||
// @Filename: b.ts
|
||||
//// const a: import("./a") = import("./a")
|
||||
|
||||
goTo.file("b.ts")
|
||||
verify.codeFix({
|
||||
description: "Add missing typeof",
|
||||
newFileContent: `const a: typeof import("./a") = import("./a")`
|
||||
});
|
||||
Reference in New Issue
Block a user