mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-10 06:41:59 -06:00
Merge pull request #33157 from fuafa/convert-const-to-let
Add convert const to let
This commit is contained in:
commit
bf46ded8fd
@ -5140,6 +5140,10 @@
|
||||
"category": "Message",
|
||||
"code": 95092
|
||||
},
|
||||
"Convert 'const' to 'let'": {
|
||||
"category": "Message",
|
||||
"code": 95093
|
||||
},
|
||||
|
||||
"No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer.": {
|
||||
"category": "Error",
|
||||
|
||||
32
src/services/codefixes/convertConstToLet.ts
Normal file
32
src/services/codefixes/convertConstToLet.ts
Normal file
@ -0,0 +1,32 @@
|
||||
/* @internal */
|
||||
namespace ts.codefix {
|
||||
const fixId = "fixConvertConstToLet";
|
||||
const errorCodes = [Diagnostics.Cannot_assign_to_0_because_it_is_a_constant.code];
|
||||
|
||||
registerCodeFix({
|
||||
errorCodes,
|
||||
getCodeActions: context => {
|
||||
const { sourceFile, span, program } = context;
|
||||
const variableStatement = getVariableStatement(sourceFile, span.start, program);
|
||||
const changes = textChanges.ChangeTracker.with(context, t => doChange(t, sourceFile, variableStatement));
|
||||
return [createCodeFixAction(fixId, changes, Diagnostics.Convert_const_to_let, fixId, Diagnostics.Convert_const_to_let)];
|
||||
},
|
||||
fixIds: [fixId]
|
||||
});
|
||||
|
||||
function getVariableStatement(sourceFile: SourceFile, pos: number, program: Program) {
|
||||
const token = getTokenAtPosition(sourceFile, pos);
|
||||
const checker = program.getTypeChecker();
|
||||
const symbol = checker.getSymbolAtLocation(token);
|
||||
if (symbol) {
|
||||
return symbol.valueDeclaration.parent.parent as VariableStatement;
|
||||
}
|
||||
}
|
||||
function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, variableStatement?: VariableStatement) {
|
||||
if (!variableStatement) {
|
||||
return;
|
||||
}
|
||||
const start = variableStatement.getStart();
|
||||
changes.replaceRangeWithText(sourceFile, { pos: start, end: start + 5 }, "let");
|
||||
}
|
||||
}
|
||||
@ -83,6 +83,7 @@
|
||||
"codefixes/fixAddModuleReferTypeMissingTypeof.ts",
|
||||
"codefixes/convertToMappedObjectType.ts",
|
||||
"codefixes/removeUnnecessaryAwait.ts",
|
||||
"codefixes/convertConstToLet.ts",
|
||||
"refactors/convertExport.ts",
|
||||
"refactors/convertImport.ts",
|
||||
"refactors/extractSymbol.ts",
|
||||
|
||||
12
tests/cases/fourslash/codeFixConstToLet.ts
Normal file
12
tests/cases/fourslash/codeFixConstToLet.ts
Normal file
@ -0,0 +1,12 @@
|
||||
/// <reference path='fourslash.ts' />
|
||||
|
||||
//// const x = 42;
|
||||
//// x = 75;
|
||||
|
||||
verify.codeFix({
|
||||
description: "Convert 'const' to 'let'",
|
||||
index: 0,
|
||||
newFileContent:
|
||||
`let x = 42;
|
||||
x = 75;`
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user