From 6bda6b47d267982914581bfc03b4de50c9d0da07 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 23 Jan 2021 21:46:35 +0800 Subject: [PATCH] fix: bug with false positive decorator detection (evident sans semi-colons); e.g., `require-jsdoc` fixer --- README.md | 6 ++++++ src/eslint/getJSDocComment.js | 17 +++++++---------- test/rules/assertions/requireJsdoc.js | 20 ++++++++++++++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index aeec10af2..f79568911 100644 --- a/README.md +++ b/README.md @@ -9942,6 +9942,12 @@ Defaults to `true`. The following patterns are considered problems: ````js +requestAnimationFrame(draw) + +function bench() { +} +// Message: Missing JSDoc comment. + function quux (foo) { } diff --git a/src/eslint/getJSDocComment.js b/src/eslint/getJSDocComment.js index 59b89d349..ceb13135b 100644 --- a/src/eslint/getJSDocComment.js +++ b/src/eslint/getJSDocComment.js @@ -32,8 +32,7 @@ const getDecorator = (token, sourceCode) => { if (tokenBefore && tokenBefore.type === 'Punctuator') { if (tokenBefore.value === tokenClose) { nested++; - } - if (tokenBefore.value === tokenOpen) { + } else if (tokenBefore.value === tokenOpen) { if (nested) { nested--; } else { @@ -43,18 +42,16 @@ const getDecorator = (token, sourceCode) => { } } while (tokenBefore); - return tokenBefore; + return getDecorator(tokenBefore, sourceCode); } - } - - if (token.type === 'Identifier') { - const tokenBefore = sourceCode.getTokenBefore(token, {includeComments: true}); - if (tokenBefore && tokenBefore.type === 'Punctuator' && tokenBefore.value === '@') { - return tokenBefore; + if (token.value === '@') { + return token; } } - return false; + const tokenBfr = sourceCode.getTokenBefore(token, {includeComments: true}); + + return getDecorator(tokenBfr, sourceCode); }; /** diff --git a/test/rules/assertions/requireJsdoc.js b/test/rules/assertions/requireJsdoc.js index 361830fb7..d1e2bc37f 100644 --- a/test/rules/assertions/requireJsdoc.js +++ b/test/rules/assertions/requireJsdoc.js @@ -6,6 +6,26 @@ export default { invalid: [ { code: ` + requestAnimationFrame(draw) + + function bench() { + } + `, + errors: [{ + message: 'Missing JSDoc comment.', + }], + output: ` + requestAnimationFrame(draw) + + /** + * + */ + function bench() { + } + `, + }, + { + code: ` function quux (foo) { }`,