Skip to content

Commit 79062f3

Browse files
Update: fix indentation of multiline new.target expressions (#9116)
1 parent d00e24f commit 79062f3

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

lib/rules/indent.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,14 +1178,15 @@ module.exports = {
11781178
}
11791179
},
11801180

1181-
"MemberExpression, JSXMemberExpression"(node) {
1182-
const firstNonObjectToken = sourceCode.getFirstTokenBetween(node.object, node.property, astUtils.isNotClosingParenToken);
1181+
"MemberExpression, JSXMemberExpression, MetaProperty"(node) {
1182+
const object = node.type === "MetaProperty" ? node.meta : node.object;
1183+
const firstNonObjectToken = sourceCode.getFirstTokenBetween(object, node.property, astUtils.isNotClosingParenToken);
11831184
const secondNonObjectToken = sourceCode.getTokenAfter(firstNonObjectToken);
11841185

1185-
const objectParenCount = sourceCode.getTokensBetween(node.object, node.property, { filter: astUtils.isClosingParenToken }).length;
1186+
const objectParenCount = sourceCode.getTokensBetween(object, node.property, { filter: astUtils.isClosingParenToken }).length;
11861187
const firstObjectToken = objectParenCount
1187-
? sourceCode.getTokenBefore(node.object, { skip: objectParenCount - 1 })
1188-
: sourceCode.getFirstToken(node.object);
1188+
? sourceCode.getTokenBefore(object, { skip: objectParenCount - 1 })
1189+
: sourceCode.getFirstToken(object);
11891190
const lastObjectToken = sourceCode.getTokenBefore(firstNonObjectToken);
11901191
const firstPropertyToken = node.computed ? firstNonObjectToken : secondNonObjectToken;
11911192

tests/lib/rules/indent.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1843,6 +1843,18 @@ ruleTester.run("indent", rule, {
18431843
`,
18441844
options: [4, { MemberExpression: 1 }]
18451845
},
1846+
unIndent`
1847+
function foo() {
1848+
new
1849+
.target
1850+
}
1851+
`,
1852+
unIndent`
1853+
function foo() {
1854+
new.
1855+
target
1856+
}
1857+
`,
18461858
{
18471859
code: unIndent`
18481860
if (foo) {
@@ -6127,6 +6139,36 @@ ruleTester.run("indent", rule, {
61276139
options: [2, { MemberExpression: 2 }],
61286140
errors: expectedErrors([[2, 4, 2, "Punctuator"], [3, 4, 2, "Punctuator"]])
61296141
},
6142+
{
6143+
code: unIndent`
6144+
function foo() {
6145+
new
6146+
.target
6147+
}
6148+
`,
6149+
output: unIndent`
6150+
function foo() {
6151+
new
6152+
.target
6153+
}
6154+
`,
6155+
errors: expectedErrors([3, 8, 4, "Punctuator"])
6156+
},
6157+
{
6158+
code: unIndent`
6159+
function foo() {
6160+
new.
6161+
target
6162+
}
6163+
`,
6164+
output: unIndent`
6165+
function foo() {
6166+
new.
6167+
target
6168+
}
6169+
`,
6170+
errors: expectedErrors([3, 8, 4, "Identifier"])
6171+
},
61306172
{
61316173

61326174
// Indentation with multiple else statements: https://github.com/eslint/eslint/issues/6956

0 commit comments

Comments
 (0)