From 23b3eb685fa358e3ae7e4cdf94349b570d6d8e08 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Mon, 30 Nov 2020 23:58:47 +0200 Subject: [PATCH] fix(41621): fixUnusedIdentifier - allow deleting prefix/postfix unary operators (#41624) --- src/services/codefixes/fixUnusedIdentifier.ts | 7 ++++++- .../codeFixUnusedIdentifier_postfix_operator1.ts | 14 ++++++++++++++ .../codeFixUnusedIdentifier_postfix_operator2.ts | 14 ++++++++++++++ .../codeFixUnusedIdentifier_prefix_operator1.ts | 14 ++++++++++++++ .../codeFixUnusedIdentifier_prefix_operator2.ts | 14 ++++++++++++++ 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts create mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts create mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts create mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts diff --git a/src/services/codefixes/fixUnusedIdentifier.ts b/src/services/codefixes/fixUnusedIdentifier.ts index 19956a097d9..db7e0550e9a 100644 --- a/src/services/codefixes/fixUnusedIdentifier.ts +++ b/src/services/codefixes/fixUnusedIdentifier.ts @@ -225,7 +225,7 @@ namespace ts.codefix { if (isIdentifier(token)) { FindAllReferences.Core.eachSymbolReferenceInFile(token, checker, sourceFile, (ref: Node) => { if (isPropertyAccessExpression(ref.parent) && ref.parent.name === ref) ref = ref.parent; - if (!isFixAll && isBinaryExpression(ref.parent) && isExpressionStatement(ref.parent.parent) && ref.parent.left === ref) { + if (!isFixAll && mayDeleteExpression(ref)) { changes.delete(sourceFile, ref.parent.parent); } }); @@ -332,4 +332,9 @@ namespace ts.codefix { parameters.slice(index + 1).every(p => isIdentifier(p.name) && !p.symbol.isReferenced) : index === parameters.length - 1; } + + function mayDeleteExpression(node: Node) { + return ((isBinaryExpression(node.parent) && node.parent.left === node) || + ((isPostfixUnaryExpression(node.parent) || isPrefixUnaryExpression(node.parent)) && node.parent.operand === node)) && isExpressionStatement(node.parent.parent); + } } diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts new file mode 100644 index 00000000000..5d6526a627a --- /dev/null +++ b/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts @@ -0,0 +1,14 @@ +/// + +// @noUnusedLocals: true +////function fn() { +//// let x = 1; +//// x++; +////} + +verify.codeFix({ + description: "Remove unused declaration for: 'x'", + newFileContent: +`function fn() { +}` +}); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts new file mode 100644 index 00000000000..5390baceeac --- /dev/null +++ b/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts @@ -0,0 +1,14 @@ +/// + +// @noUnusedLocals: true +////function fn() { +//// let x = 1; +//// x--; +////} + +verify.codeFix({ + description: "Remove unused declaration for: 'x'", + newFileContent: +`function fn() { +}` +}); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts new file mode 100644 index 00000000000..b79d64686cd --- /dev/null +++ b/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts @@ -0,0 +1,14 @@ +/// + +// @noUnusedLocals: true +////function fn() { +//// let x = 1; +//// ++x; +////} + +verify.codeFix({ + description: "Remove unused declaration for: 'x'", + newFileContent: +`function fn() { +}` +}); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts new file mode 100644 index 00000000000..fa5e437bccd --- /dev/null +++ b/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts @@ -0,0 +1,14 @@ +/// + +// @noUnusedLocals: true +////function fn() { +//// let x = 1; +//// --x; +////} + +verify.codeFix({ + description: "Remove unused declaration for: 'x'", + newFileContent: +`function fn() { +}` +});