mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 20:14:01 -06:00
Add code fix to remove unused label (#24037)
* Add code fix to remove unused label * Test with trivia and fix indentation with dedented label
This commit is contained in:
parent
1df7997014
commit
3eb66da155
@ -4261,5 +4261,13 @@
|
||||
"Add missing typeof": {
|
||||
"category": "Message",
|
||||
"code": 95052
|
||||
},
|
||||
"Remove unused label": {
|
||||
"category": "Message",
|
||||
"code": 95053
|
||||
},
|
||||
"Remove all unused labels": {
|
||||
"category": "Message",
|
||||
"code": 95054
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,6 +106,7 @@
|
||||
"../services/codefixes/fixForgottenThisPropertyAccess.ts",
|
||||
"../services/codefixes/fixUnusedIdentifier.ts",
|
||||
"../services/codefixes/fixUnreachableCode.ts",
|
||||
"../services/codefixes/fixUnusedLabel.ts",
|
||||
"../services/codefixes/fixJSDocTypes.ts",
|
||||
"../services/codefixes/fixAwaitInSyncFunction.ts",
|
||||
"../services/codefixes/disableJsDiagnostics.ts",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"../services/codefixes/fixForgottenThisPropertyAccess.ts",
|
||||
"../services/codefixes/fixUnusedIdentifier.ts",
|
||||
"../services/codefixes/fixUnreachableCode.ts",
|
||||
"../services/codefixes/fixUnusedLabel.ts",
|
||||
"../services/codefixes/fixJSDocTypes.ts",
|
||||
"../services/codefixes/fixAwaitInSyncFunction.ts",
|
||||
"../services/codefixes/disableJsDiagnostics.ts",
|
||||
|
||||
@ -108,6 +108,7 @@
|
||||
"../services/codefixes/fixForgottenThisPropertyAccess.ts",
|
||||
"../services/codefixes/fixUnusedIdentifier.ts",
|
||||
"../services/codefixes/fixUnreachableCode.ts",
|
||||
"../services/codefixes/fixUnusedLabel.ts",
|
||||
"../services/codefixes/fixJSDocTypes.ts",
|
||||
"../services/codefixes/fixAwaitInSyncFunction.ts",
|
||||
"../services/codefixes/disableJsDiagnostics.ts",
|
||||
|
||||
25
src/services/codefixes/fixUnusedLabel.ts
Normal file
25
src/services/codefixes/fixUnusedLabel.ts
Normal file
@ -0,0 +1,25 @@
|
||||
/* @internal */
|
||||
namespace ts.codefix {
|
||||
const fixId = "fixUnusedLabel";
|
||||
const errorCodes = [Diagnostics.Unused_label.code];
|
||||
registerCodeFix({
|
||||
errorCodes,
|
||||
getCodeActions(context) {
|
||||
const changes = textChanges.ChangeTracker.with(context, t => doChange(t, context.sourceFile, context.span.start));
|
||||
return [createCodeFixAction(fixId, changes, Diagnostics.Remove_unused_label, fixId, Diagnostics.Remove_all_unused_labels)];
|
||||
},
|
||||
fixIds: [fixId],
|
||||
getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) => doChange(changes, diag.file, diag.start)),
|
||||
});
|
||||
|
||||
function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, start: number): void {
|
||||
const token = getTokenAtPosition(sourceFile, start, /*includeJsDocComment*/ false);
|
||||
const labeledStatement = cast(token.parent, isLabeledStatement);
|
||||
const pos = token.getStart(sourceFile);
|
||||
const statementPos = labeledStatement.statement.getStart(sourceFile);
|
||||
// If label is on a separate line, just delete the rest of that line, but not the indentation of the labeled statement.
|
||||
const end = positionsAreOnSameLine(pos, statementPos, sourceFile) ? statementPos
|
||||
: skipTrivia(sourceFile.text, findChildOfKind(labeledStatement, SyntaxKind.ColonToken, sourceFile)!.end, /*stopAfterLineBreak*/ true);
|
||||
changes.deleteRange(sourceFile, { pos, end });
|
||||
}
|
||||
}
|
||||
@ -99,6 +99,7 @@
|
||||
"codefixes/fixForgottenThisPropertyAccess.ts",
|
||||
"codefixes/fixUnusedIdentifier.ts",
|
||||
"codefixes/fixUnreachableCode.ts",
|
||||
"codefixes/fixUnusedLabel.ts",
|
||||
"codefixes/fixJSDocTypes.ts",
|
||||
"codefixes/fixAwaitInSyncFunction.ts",
|
||||
"codefixes/disableJsDiagnostics.ts",
|
||||
|
||||
11
tests/cases/fourslash/codeFixUnusedLabel.ts
Normal file
11
tests/cases/fourslash/codeFixUnusedLabel.ts
Normal file
@ -0,0 +1,11 @@
|
||||
/// <reference path='fourslash.ts' />
|
||||
|
||||
// @noUnusedLocals: true
|
||||
|
||||
/////* a */label/* b */:/* c */while (1) {}
|
||||
|
||||
verify.codeFix({
|
||||
description: "Remove unused label",
|
||||
newFileContent:
|
||||
`/* a */while (1) {}`,
|
||||
});
|
||||
21
tests/cases/fourslash/codeFixUnusedLabel_all.ts
Normal file
21
tests/cases/fourslash/codeFixUnusedLabel_all.ts
Normal file
@ -0,0 +1,21 @@
|
||||
/// <reference path='fourslash.ts' />
|
||||
|
||||
// @noUnusedLocals: true
|
||||
|
||||
////label1: while (1) {}
|
||||
////
|
||||
////function f() {
|
||||
////label2:
|
||||
//// while (1) {}
|
||||
////}
|
||||
|
||||
verify.codeFixAll({
|
||||
fixId: "fixUnusedLabel",
|
||||
fixAllDescription: "Remove all unused labels",
|
||||
newFileContent:
|
||||
`while (1) {}
|
||||
|
||||
function f() {
|
||||
while (1) {}
|
||||
}`,
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user