From 79062f3a48fcd161bbbc9f3a5395d6a39f908174 Mon Sep 17 00:00:00 2001 From: Teddy Katz Date: Fri, 18 Aug 2017 17:50:25 -0700 Subject: [PATCH] Update: fix indentation of multiline `new.target` expressions (#9116) --- lib/rules/indent.js | 11 +++++----- tests/lib/rules/indent.js | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/lib/rules/indent.js b/lib/rules/indent.js index 429567ee560..29eba5453ee 100644 --- a/lib/rules/indent.js +++ b/lib/rules/indent.js @@ -1178,14 +1178,15 @@ module.exports = { } }, - "MemberExpression, JSXMemberExpression"(node) { - const firstNonObjectToken = sourceCode.getFirstTokenBetween(node.object, node.property, astUtils.isNotClosingParenToken); + "MemberExpression, JSXMemberExpression, MetaProperty"(node) { + const object = node.type === "MetaProperty" ? node.meta : node.object; + const firstNonObjectToken = sourceCode.getFirstTokenBetween(object, node.property, astUtils.isNotClosingParenToken); const secondNonObjectToken = sourceCode.getTokenAfter(firstNonObjectToken); - const objectParenCount = sourceCode.getTokensBetween(node.object, node.property, { filter: astUtils.isClosingParenToken }).length; + const objectParenCount = sourceCode.getTokensBetween(object, node.property, { filter: astUtils.isClosingParenToken }).length; const firstObjectToken = objectParenCount - ? sourceCode.getTokenBefore(node.object, { skip: objectParenCount - 1 }) - : sourceCode.getFirstToken(node.object); + ? sourceCode.getTokenBefore(object, { skip: objectParenCount - 1 }) + : sourceCode.getFirstToken(object); const lastObjectToken = sourceCode.getTokenBefore(firstNonObjectToken); const firstPropertyToken = node.computed ? firstNonObjectToken : secondNonObjectToken; diff --git a/tests/lib/rules/indent.js b/tests/lib/rules/indent.js index 63aa710b059..fab723f4f74 100644 --- a/tests/lib/rules/indent.js +++ b/tests/lib/rules/indent.js @@ -1843,6 +1843,18 @@ ruleTester.run("indent", rule, { `, options: [4, { MemberExpression: 1 }] }, + unIndent` + function foo() { + new + .target + } + `, + unIndent` + function foo() { + new. + target + } + `, { code: unIndent` if (foo) { @@ -6127,6 +6139,36 @@ ruleTester.run("indent", rule, { options: [2, { MemberExpression: 2 }], errors: expectedErrors([[2, 4, 2, "Punctuator"], [3, 4, 2, "Punctuator"]]) }, + { + code: unIndent` + function foo() { + new + .target + } + `, + output: unIndent` + function foo() { + new + .target + } + `, + errors: expectedErrors([3, 8, 4, "Punctuator"]) + }, + { + code: unIndent` + function foo() { + new. + target + } + `, + output: unIndent` + function foo() { + new. + target + } + `, + errors: expectedErrors([3, 8, 4, "Identifier"]) + }, { // Indentation with multiple else statements: https://github.com/eslint/eslint/issues/6956