1/* @internal */ 2namespace ts.codefix { 3 const fixId = "fixUnusedLabel"; 4 const errorCodes = [Diagnostics.Unused_label.code]; 5 registerCodeFix({ 6 errorCodes, 7 getCodeActions(context) { 8 const changes = textChanges.ChangeTracker.with(context, t => doChange(t, context.sourceFile, context.span.start)); 9 return [createCodeFixAction(fixId, changes, Diagnostics.Remove_unused_label, fixId, Diagnostics.Remove_all_unused_labels)]; 10 }, 11 fixIds: [fixId], 12 getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) => doChange(changes, diag.file, diag.start)), 13 }); 14 15 function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, start: number): void { 16 const token = getTokenAtPosition(sourceFile, start); 17 const labeledStatement = cast(token.parent, isLabeledStatement); 18 const pos = token.getStart(sourceFile); 19 const statementPos = labeledStatement.statement.getStart(sourceFile); 20 // If label is on a separate line, just delete the rest of that line, but not the indentation of the labeled statement. 21 const end = positionsAreOnSameLine(pos, statementPos, sourceFile) ? statementPos 22 : skipTrivia(sourceFile.text, findChildOfKind(labeledStatement, SyntaxKind.ColonToken, sourceFile)!.end, /*stopAfterLineBreak*/ true); 23 changes.deleteRange(sourceFile, { pos, end }); 24 } 25} 26