diff --git a/lib/rules/space-unary-ops.js b/lib/rules/space-unary-ops.js index 5b156fac2292..d9998370bdc5 100644 --- a/lib/rules/space-unary-ops.js +++ b/lib/rules/space-unary-ops.js @@ -288,9 +288,11 @@ module.exports = { * @returns {void} */ function checkForSpaces(node) { - const tokens = sourceCode.getFirstTokens(node, 2), - firstToken = tokens[0], - secondToken = tokens[1]; + const tokens = node.type === "UpdateExpression" && !node.prefix + ? sourceCode.getLastTokens(node, 2) + : sourceCode.getFirstTokens(node, 2); + const firstToken = tokens[0]; + const secondToken = tokens[1]; if ((node.type === "NewExpression" || node.prefix) && firstToken.type === "Keyword") { checkUnaryWordOperatorForSpaces(node, firstToken, secondToken); diff --git a/tests/lib/rules/space-unary-ops.js b/tests/lib/rules/space-unary-ops.js index 0da1177b6e8d..d5466bff596f 100644 --- a/tests/lib/rules/space-unary-ops.js +++ b/tests/lib/rules/space-unary-ops.js @@ -36,6 +36,13 @@ ruleTester.run("space-unary-ops", rule, { code: "this.a--", options: [{ words: true }] }, + { + code: "foo .bar++" + }, + { + code: "foo.bar --", + options: [{ nonwords: true }] + }, { code: "delete foo.bar", options: [{ words: true }] @@ -417,6 +424,21 @@ ruleTester.run("space-unary-ops", rule, { message: "Unary operator '++' must be followed by whitespace." }] }, + { + code: "foo .bar++", + output: "foo .bar ++", + options: [{ nonwords: true }], + errors: [{ + message: "Space is required before unary expressions '++'." + }] + }, + { + code: "foo.bar --", + output: "foo.bar--", + errors: [{ + message: "Unexpected space before unary operator '--'." + }] + }, { code: "+ +foo", output: null,