From 2fd8eccb557053c814b47ac77682ae4b29acefae Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 25 Nov 2019 22:51:56 +0800 Subject: [PATCH] fix(`newline-afer-description`): correctly treat carriage return immediately after newline as ending with a newline; fixes #437 Since `comment-parser` cuts off at newlines, we can get stuck with a carriage return at end when in a non-trimming rule; handle this. --- README.md | 13 ++++++++++++ src/rules/newlineAfterDescription.js | 2 +- .../assertions/newlineAfterDescription.js | 21 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fe38117c5..60f371c91 100644 --- a/README.md +++ b/README.md @@ -4454,6 +4454,19 @@ function quux () { } // Options: ["always"] + +/** + * Parses query string to object containing URL parameters + * + * @param queryString + * Input string + * + * @returns + * Object containing URL parameters + */ +export function parseQueryString(queryString: string): { [key: string]: string } { // <-- Line 10 that fails + +} ```` diff --git a/src/rules/newlineAfterDescription.js b/src/rules/newlineAfterDescription.js index 1a335a5e8..ba8edf14c 100644 --- a/src/rules/newlineAfterDescription.js +++ b/src/rules/newlineAfterDescription.js @@ -21,7 +21,7 @@ export default iterateJsdoc(({ always = true; } - const descriptionEndsWithANewline = jsdoc.description.endsWith('\n'); + const descriptionEndsWithANewline = (/\n\r?$/).test(jsdoc.description); if (always) { if (!descriptionEndsWithANewline) { diff --git a/test/rules/assertions/newlineAfterDescription.js b/test/rules/assertions/newlineAfterDescription.js index 709fd8292..b705d5d15 100644 --- a/test/rules/assertions/newlineAfterDescription.js +++ b/test/rules/assertions/newlineAfterDescription.js @@ -299,5 +299,26 @@ export default { 'always', ], }, + { + // https://github.com/gajus/eslint-plugin-jsdoc/issues/437 + code: ` + /**\r + * Parses query string to object containing URL parameters\r + * \r + * @param queryString\r + * Input string\r + * \r + * @returns\r + * Object containing URL parameters\r + */\r + export function parseQueryString(queryString: string): { [key: string]: string } { // <-- Line 10 that fails\r +\r + }\r + `, + parser: require.resolve('@typescript-eslint/parser'), + parserOptions: { + sourceType: 'module', + }, + }, ], };