Merge pull request #33157 from fuafa/convert-const-to-let

Add convert const to let
This commit is contained in:
Orta 2019-09-17 07:49:12 -04:00 committed by GitHub
commit bf46ded8fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 0 deletions

View File

@ -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",

View 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");
}
}

View File

@ -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",

View 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;`
});