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() {
+}`
+});