From 6348a6d65011491306989046715a192fa3fa4b3c Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Wed, 28 Jun 2023 15:47:41 +0200 Subject: [PATCH 1/2] feat: fix indent rule for else-if Fixes #17316 --- lib/rules/indent.js | 2 +- tests/lib/rules/indent.js | 176 +++++++++++++++++++++++++++++++++++++- 2 files changed, 176 insertions(+), 2 deletions(-) diff --git a/lib/rules/indent.js b/lib/rules/indent.js index 9068006d4972..7ea4b3f86c33 100644 --- a/lib/rules/indent.js +++ b/lib/rules/indent.js @@ -1250,7 +1250,7 @@ module.exports = { IfStatement(node) { addBlocklessNodeIndent(node.consequent); - if (node.alternate && node.alternate.type !== "IfStatement") { + if (node.alternate) { addBlocklessNodeIndent(node.alternate); } }, diff --git a/tests/lib/rules/indent.js b/tests/lib/rules/indent.js index 0785083d0aca..540919669d30 100644 --- a/tests/lib/rules/indent.js +++ b/tests/lib/rules/indent.js @@ -6361,7 +6361,156 @@ ruleTester.run("indent", rule, { ;[1, 2, 3].forEach(x=>console.log(x)) `, options: [4] - } + }, + + // https://github.com/eslint/eslint/issues/17316 + { + code: unIndent` + if (foo) + \tif (bar) doSomething(); + \telse doSomething(); + else + \tif (bar) doSomething(); + \telse doSomething(); + `, + options: ["tab"] + }, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) + doSomething(); + else doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else + doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) + doSomething(); + else + doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) doSomething(); + else doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) + doSomething(); + else doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) doSomething(); + else + doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) + doSomething(); + else + doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else doSomething(); + + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + if (bar) doSomething(); + else + if (bar) doSomething(); + else doSomething(); + else doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) doSomething(); + else doSomething(); + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) { + doSomething(); + } + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) + { + doSomething(); + } + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) { + doSomething(); + } + `, + unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + { + doSomething(); + } + ` ], invalid: [ @@ -13381,6 +13530,31 @@ ruleTester.run("indent", rule, { `, options: [4], errors: expectedErrors([4, 0, 4, "Punctuator"]) + }, + + // https://github.com/eslint/eslint/issues/17316 + { + code: unIndent` + if (foo) + \tif (bar) doSomething(); + \telse doSomething(); + else + if (bar) doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + \tif (bar) doSomething(); + \telse doSomething(); + else + \tif (bar) doSomething(); + \telse doSomething(); + `, + options: ["tab"], + errors: expectedErrors("tab", [ + [5, 1, 0, "Keyword"], + [6, 1, 0, "Keyword"] + ]) } ] }); From 9142eb29d9111455aeb6ff0a0fdb1d953648ae8b Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Sat, 1 Jul 2023 18:37:39 +0200 Subject: [PATCH 2/2] add more test cases --- tests/lib/rules/indent.js | 401 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 401 insertions(+) diff --git a/tests/lib/rules/indent.js b/tests/lib/rules/indent.js index 540919669d30..4880fa5ec029 100644 --- a/tests/lib/rules/indent.js +++ b/tests/lib/rules/indent.js @@ -13555,6 +13555,407 @@ ruleTester.run("indent", rule, { [5, 1, 0, "Keyword"], [6, 1, 0, "Keyword"] ]) + }, + { + code: unIndent` + if (foo) + \tif (bar) doSomething(); + \telse doSomething(); + else + \t\tif (bar) doSomething(); + \t\telse doSomething(); + `, + output: unIndent` + if (foo) + \tif (bar) doSomething(); + \telse doSomething(); + else + \tif (bar) doSomething(); + \telse doSomething(); + `, + options: ["tab"], + errors: expectedErrors("tab", [ + [5, 1, 2, "Keyword"], + [6, 1, 2, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else doSomething(); + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 4, 0, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) + doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) + doSomething(); + else doSomething(); + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 8, 0, "Identifier"], + [7, 4, 0, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else + doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else + doSomething(); + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 4, 0, "Keyword"], + [7, 8, 0, "Identifier"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) + doSomething(); + else + doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) + doSomething(); + else + doSomething(); + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 8, 4, "Identifier"], + [7, 4, 0, "Keyword"], + [8, 8, 0, "Identifier"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) doSomething(); + else doSomething(); + `, + errors: expectedErrors([ + [5, 0, 4, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) + doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) + doSomething(); + else doSomething(); + `, + errors: expectedErrors([ + [4, 0, 4, "Keyword"], + [5, 4, 8, "Identifier"], + [6, 0, 4, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) doSomething(); + else + doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) doSomething(); + else + doSomething(); + `, + errors: expectedErrors([ + [5, 0, 5, "Keyword"], + [6, 4, 9, "Identifier"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) + doSomething(); + else + doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (bar) + doSomething(); + else + doSomething(); + `, + errors: expectedErrors([ + [5, 4, 0, "Identifier"], + [7, 4, 0, "Identifier"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else doSomething(); + + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (bar) doSomething(); + else doSomething(); + + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 8, 4, "Keyword"], + [7, 8, 4, "Keyword"], + [8, 4, 0, "Keyword"], + [9, 8, 4, "Keyword"], + [10, 8, 4, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + if (bar) doSomething(); + else + if (bar) doSomething(); + else doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + if (bar) doSomething(); + else + if (bar) doSomething(); + else doSomething(); + else doSomething(); + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 8, 0, "Keyword"], + [7, 8, 0, "Keyword"], + [8, 12, 0, "Keyword"], + [9, 12, 0, "Keyword"], + [10, 4, 0, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) doSomething(); + else doSomething(); + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) doSomething(); + else doSomething(); + `, + errors: expectedErrors([ + [2, 4, 0, "Keyword"], + [3, 4, 0, "Keyword"], + [5, 0, 4, "Keyword"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) { + doSomething(); + } + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) { + doSomething(); + } + `, + errors: expectedErrors([ + [5, 4, 0, "Identifier"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) + { + doSomething(); + } + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else if (foo) + { + doSomething(); + } + `, + errors: expectedErrors([ + [5, 0, 4, "Punctuator"], + [6, 4, 8, "Identifier"], + [7, 0, 4, "Punctuator"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) { + doSomething(); + } + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) { + doSomething(); + } + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 8, 4, "Identifier"], + [7, 4, 0, "Punctuator"] + ]) + }, + { + code: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + { + doSomething(); + } + `, + output: unIndent` + if (foo) + if (bar) doSomething(); + else doSomething(); + else + if (foo) + { + doSomething(); + } + `, + errors: expectedErrors([ + [5, 4, 0, "Keyword"], + [6, 4, 0, "Punctuator"], + [7, 8, 4, "Identifier"], + [8, 4, 0, "Punctuator"] + ]) } ] });