diff --git a/docs/rules/require-description.md b/docs/rules/require-description.md index 68ca472..257ddb4 100644 --- a/docs/rules/require-description.md +++ b/docs/rules/require-description.md @@ -33,6 +33,9 @@ Examples of :+1: **correct** code for this rule: /* eslint-env browser -- This script works in browser. */ // eslint-disable-next-line -- Temporarily avoids the lint error problem. See issue XXX. /* global $ -- This script using jQuery. */ + +// Temporarily avoids the lint error problem. See issue XXX. +// eslint-disable-next-line " /> ## Options diff --git a/lib/internal/utils.js b/lib/internal/utils.js index 849bb04..c095114 100644 --- a/lib/internal/utils.js +++ b/lib/internal/utils.js @@ -135,6 +135,18 @@ module.exports = { description, } }, + + /** + * Creates an object hashmap + * @param {Object[]} values + * @param {Function} getKey + */ + keyBy(values, getKey) { + return values.reduce((accumulator, value) => { + accumulator[getKey(value)] = value + return accumulator + }, {}) + }, } /** diff --git a/lib/rules/require-description.js b/lib/rules/require-description.js index 3a03c6e..179fbc8 100644 --- a/lib/rules/require-description.js +++ b/lib/rules/require-description.js @@ -52,9 +52,19 @@ module.exports = { (context.options[0] && context.options[0].ignore) || [] ) + const comments = sourceCode.getAllComments() + const commentMapByLine = utils.keyBy( + comments, + comment => comment.loc.end.line + ) + + function previousLineHasComment(comment) { + return Boolean(commentMapByLine[comment.loc.start.line - 1]) + } + return { Program() { - for (const comment of sourceCode.getAllComments()) { + for (const comment of comments) { const directiveComment = utils.parseDirectiveComment( comment ) @@ -64,7 +74,10 @@ module.exports = { if (ignores.has(directiveComment.kind)) { continue } - if (!directiveComment.description) { + if ( + !directiveComment.description && + !previousLineHasComment(comment) + ) { context.report({ loc: utils.toForceLocation(comment.loc), message: diff --git a/tests/lib/rules/require-description.js b/tests/lib/rules/require-description.js index 5813dc9..3bbbac7 100644 --- a/tests/lib/rules/require-description.js +++ b/tests/lib/rules/require-description.js @@ -31,6 +31,8 @@ tester.run("require-description", rule, { "/* eslint-disable-next-line -- description */", "// eslint-disable-line eqeqeq -- description", "// eslint-disable-next-line eqeqeq -- description", + `// some comment above +// eslint-disable-next-line eqeqeq`, { code: "/* eslint */", options: [{ ignore: ["eslint"] }],