From af7a7f3f3a81b68ec161d9e18f97038bd1d92cd0 Mon Sep 17 00:00:00 2001 From: Takafumi Sakakibara Date: Sun, 3 Dec 2017 17:28:26 +0900 Subject: [PATCH] Fix: `lines-between-class-memebers` (fixes #9665) `lines-between-class-memebers` if a comment occurs between class members --- lib/rules/lines-between-class-members.js | 18 +++++++++++++++--- tests/lib/rules/lines-between-class-members.js | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/rules/lines-between-class-members.js b/lib/rules/lines-between-class-members.js index 85e8c69358c9..508aa621cb45 100644 --- a/lib/rules/lines-between-class-members.js +++ b/lib/rules/lines-between-class-members.js @@ -55,7 +55,20 @@ module.exports = { * @returns {boolean} True if there is at least a line between the tokens */ function isPaddingBetweenTokens(first, second) { - return second.loc.start.line - first.loc.end.line >= 2; + const comments = sourceCode.getCommentsBefore(second); + + let num = 0; // the numbers of lines of comments + const len = comments.length; + + for (let i = 0; i < len; i++) { + num += comments[i].loc.end.line - comments[i].loc.start.line + 1; + } + + if (len > 0 && comments[len - 1].loc.end.line === second.loc.start.line) { + num -= 1; + } + + return (second.loc.start.line - first.loc.end.line - 1) - num >= 1; } return { @@ -65,8 +78,7 @@ module.exports = { for (let i = 0; i < body.length - 1; i++) { const curFirst = sourceCode.getFirstToken(body[i]); const curLast = sourceCode.getLastToken(body[i]); - const comments = sourceCode.getCommentsBefore(body[i + 1]); - const nextFirst = comments.length ? comments[0] : sourceCode.getFirstToken(body[i + 1]); + const nextFirst = sourceCode.getFirstToken(body[i + 1]); const isPadded = isPaddingBetweenTokens(curLast, nextFirst); const isMulti = !astUtils.isTokenOnSameLine(curFirst, curLast); const skip = !isMulti && options[1].exceptAfterSingleLine; diff --git a/tests/lib/rules/lines-between-class-members.js b/tests/lib/rules/lines-between-class-members.js index 1304d719a48d..66285e058fbe 100644 --- a/tests/lib/rules/lines-between-class-members.js +++ b/tests/lib/rules/lines-between-class-members.js @@ -36,6 +36,7 @@ ruleTester.run("lines-between-class-members", rule, { "class foo{ bar(){}\n\nbaz(){}}", "class foo{ bar(){}\n\n/*comments*/baz(){}}", "class foo{ bar(){}\n\n//comments\nbaz(){}}", + "class foo{ bar(){}\n//comments\n\nbaz(){}}", "class foo{ bar(){}\n\n;;baz(){}}", "class foo{ bar(){};\n\nbaz(){}}",