From 13999d292080f814fa4fb266e011d61c184197c4 Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Sat, 13 Jun 2020 02:06:53 +0200 Subject: [PATCH] Update: curly should check consequent `if` statements (#12947) --- lib/rules/curly.js | 9 +++++++- tests/lib/rules/curly.js | 48 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/lib/rules/curly.js b/lib/rules/curly.js index 29f00c0ad0b..92d31a6476e 100644 --- a/lib/rules/curly.js +++ b/lib/rules/curly.js @@ -457,11 +457,18 @@ module.exports = { return { IfStatement(node) { - if (node.parent.type !== "IfStatement") { + const parent = node.parent; + const isElseIf = parent.type === "IfStatement" && parent.alternate === node; + + if (!isElseIf) { + + // This is a top `if`, check the whole `if-else-if` chain prepareIfChecks(node).forEach(preparedCheck => { preparedCheck.check(); }); } + + // Skip `else if`, it's already checked (when the top `if` was visited) }, WhileStatement(node) { diff --git a/tests/lib/rules/curly.js b/tests/lib/rules/curly.js index 1d5ee8c6e4f..155eec994da 100644 --- a/tests/lib/rules/curly.js +++ b/tests/lib/rules/curly.js @@ -535,6 +535,30 @@ ruleTester.run("curly", rule, { } ] }, + { + code: "if (foo) if (bar) { baz() }", + output: "if (foo) if (bar) baz() ", + options: ["multi"], + errors: [ + { + messageId: "unexpectedCurlyAfterCondition", + data: { name: "if" }, + type: "IfStatement" + } + ] + }, + { + code: "if (foo) if (bar) baz(); else if (quux) { quuux(); }", + output: "if (foo) if (bar) baz(); else if (quux) quuux(); ", + options: ["multi"], + errors: [ + { + messageId: "unexpectedCurlyAfterCondition", + data: { name: "if" }, + type: "IfStatement" + } + ] + }, { code: "while (foo) { bar() }", output: "while (foo) bar() ", @@ -559,6 +583,18 @@ ruleTester.run("curly", rule, { } ] }, + { + code: "if (foo) if (bar); else { baz() }", + output: "if (foo) if (bar); else baz() ", + options: ["multi"], + errors: [ + { + messageId: "unexpectedCurlyAfter", + data: { name: "else" }, + type: "IfStatement" + } + ] + }, { code: "if (true) { if (false) console.log(1) }", output: "if (true) if (false) console.log(1) ", @@ -981,6 +1017,18 @@ ruleTester.run("curly", rule, { } ] }, + { + code: "if (true) if (true) foo(); else { bar(); baz(); }", + output: "if (true) if (true) {foo();} else { bar(); baz(); }", + options: ["multi", "consistent"], + errors: [ + { + messageId: "missingCurlyAfterCondition", + data: { name: "if" }, + type: "IfStatement" + } + ] + }, { code: "do{foo();} while (bar)", output: "do foo(); while (bar)",