From e821d613a18fe4801a45cccfe7f0432f6cdf205f Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 8 Jun 2018 15:20:33 -0700 Subject: [PATCH] fixUnusedIdentifier: Remove unused writes (#24805) --- src/services/codefixes/fixUnusedIdentifier.ts | 10 ++++++++ .../codeFixUnusedIdentifier_deleteWrite.ts | 24 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_deleteWrite.ts diff --git a/src/services/codefixes/fixUnusedIdentifier.ts b/src/services/codefixes/fixUnusedIdentifier.ts index ebe65197c7f..719e3a316f7 100644 --- a/src/services/codefixes/fixUnusedIdentifier.ts +++ b/src/services/codefixes/fixUnusedIdentifier.ts @@ -152,6 +152,7 @@ namespace ts.codefix { switch (token.kind) { case SyntaxKind.Identifier: tryDeleteIdentifier(changes, sourceFile, token, deletedAncestors, checker, isFixAll); + deleteAssignments(changes, sourceFile, token as Identifier, checker); break; case SyntaxKind.PropertyDeclaration: case SyntaxKind.NamespaceImport: @@ -163,6 +164,15 @@ namespace ts.codefix { } } + function deleteAssignments(changes: textChanges.ChangeTracker, sourceFile: SourceFile, token: Identifier, checker: TypeChecker) { + FindAllReferences.Core.eachSymbolReferenceInFile(token, checker, sourceFile, (ref: Node) => { + if (ref.parent.kind === SyntaxKind.PropertyAccessExpression) ref = ref.parent; + if (ref.parent.kind === SyntaxKind.BinaryExpression && ref.parent.parent.kind === SyntaxKind.ExpressionStatement) { + changes.deleteNode(sourceFile, ref.parent.parent); + } + }); + } + function tryDeleteDefault(changes: textChanges.ChangeTracker, sourceFile: SourceFile, token: Node, deletedAncestors: NodeSet | undefined): void { if (isDeclarationName(token)) { if (deletedAncestors) deletedAncestors.add(token.parent); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_deleteWrite.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_deleteWrite.ts new file mode 100644 index 00000000000..61ff1211c7c --- /dev/null +++ b/tests/cases/fourslash/codeFixUnusedIdentifier_deleteWrite.ts @@ -0,0 +1,24 @@ +/// + +// @noLib: true +// @noUnusedLocals: true + +////let x = 0; +////x = 1; +//// +////export class C { +//// private p: number; +//// +//// m() { this.p = 0; } +////} + +verify.codeFixAll({ + fixId: "unusedIdentifier_delete", + fixAllDescription: "Delete all unused declarations", + newFileContent: +` +export class C { + + m() { } +}`, +});