From 4f73240cd1cee198b3e5dbd6160510c1b6ddf83c Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Thu, 16 Jun 2016 01:25:36 +0900 Subject: [PATCH] Fix: `object-curly-newline` multiline with comments (fixes #6381) (#6396) --- lib/rules/object-curly-newline.js | 15 +++++++++++++-- tests/lib/rules/object-curly-newline.js | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/rules/object-curly-newline.js b/lib/rules/object-curly-newline.js index d4a3a85df11..34e267d654c 100644 --- a/lib/rules/object-curly-newline.js +++ b/lib/rules/object-curly-newline.js @@ -128,8 +128,8 @@ module.exports = { var options = normalizedOptions[node.type]; var openBrace = sourceCode.getFirstToken(node); var closeBrace = sourceCode.getLastToken(node); - var first = sourceCode.getTokenAfter(openBrace); - var last = sourceCode.getTokenBefore(closeBrace); + var first = sourceCode.getTokenOrCommentAfter(openBrace); + var last = sourceCode.getTokenOrCommentBefore(closeBrace); var needsLinebreaks = ( node.properties.length >= options.minProperties || ( @@ -139,6 +139,17 @@ module.exports = { ) ); + /* + * Use tokens or comments to check multiline or not. + * But use only tokens to check whether line breaks are needed. + * This allows: + * var obj = { // eslint-disable-line foo + * a: 1 + * } + */ + first = sourceCode.getTokenAfter(openBrace); + last = sourceCode.getTokenBefore(closeBrace); + if (needsLinebreaks) { if (astUtils.isTokenOnSameLine(openBrace, first)) { context.report({ diff --git a/tests/lib/rules/object-curly-newline.js b/tests/lib/rules/object-curly-newline.js index c72431727e8..2fae72aa361 100644 --- a/tests/lib/rules/object-curly-newline.js +++ b/tests/lib/rules/object-curly-newline.js @@ -138,6 +138,23 @@ ruleTester.run("object-curly-newline", rule, { ].join("\n"), options: [{multiline: true}] }, + { + code: [ + "var obj = {", + " // comment", + " a: 1", + "};" + ].join("\n"), + options: [{multiline: true}] + }, + { + code: [ + "var obj = { // comment", + " a: 1", + "};" + ].join("\n"), + options: [{multiline: true}] + }, // "minProperties" ---------------------------------------------------------- {