diff --git a/README.md b/README.md index 11d4dd1ac..a224464a5 100644 --- a/README.md +++ b/README.md @@ -8193,6 +8193,15 @@ The following patterns are considered problems: **/ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"preventAtMiddleLines":false}] // Message: Should be no multiple asterisks on end lines. + +/** Desc. **/ +// Message: Should be no multiple asterisks on end lines. + +/** @someTag name desc. **/ +// Message: Should be no multiple asterisks on end lines. + +/** abc * */ +// Message: Should be no multiple asterisks on end lines. ```` The following patterns are not considered problems: @@ -8245,6 +8254,21 @@ The following patterns are not considered problems: * @tag {SomeType} and a tag with details * */ + +/** abc */ +function foo() { + // +} + +/** foo */ +function foo(): void { + // +} + +/** @aTag abc */ +function foo() { + // +} ```` diff --git a/src/rules/noMultiAsterisks.js b/src/rules/noMultiAsterisks.js index cd5220084..c48d15761 100644 --- a/src/rules/noMultiAsterisks.js +++ b/src/rules/noMultiAsterisks.js @@ -1,7 +1,6 @@ import iterateJsdoc from '../iterateJsdoc'; const middleAsterisks = /^[* \t]+/u; -const endAsterisks = /((?:\*|(?: |\t))*)\*$/u; export default iterateJsdoc(({ context, @@ -39,20 +38,29 @@ export default iterateJsdoc(({ if (!preventAtEnd || !end) { return false; } - const endingAsterisksAndSpaces = (description + delimiter).match( + + const isSingleLineBlock = delimiter === '/**'; + const delim = isSingleLineBlock ? '*' : delimiter; + const endAsterisks = isSingleLineBlock ? + /\*((?:\*|(?: |\t))*)\*$/u : + /((?:\*|(?: |\t))*)\*$/u; + + const endingAsterisksAndSpaces = (description + delim).match( endAsterisks, ); if ( !endingAsterisksAndSpaces || - endingAsterisksAndSpaces[1] && !endingAsterisksAndSpaces[1].trim() + !isSingleLineBlock && endingAsterisksAndSpaces[1] && !endingAsterisksAndSpaces[1].trim() ) { return false; } const endFix = () => { - tokens.delimiter = ''; - tokens.description = (description + delimiter).replace(endAsterisks, ''); + if (!isSingleLineBlock) { + tokens.delimiter = ''; + } + tokens.description = (description + delim).replace(endAsterisks, ''); }; utils.reportJSDoc( diff --git a/test/rules/assertions/noMultiAsterisks.js b/test/rules/assertions/noMultiAsterisks.js index 89aabada7..278ad2d40 100644 --- a/test/rules/assertions/noMultiAsterisks.js +++ b/test/rules/assertions/noMultiAsterisks.js @@ -179,6 +179,42 @@ export default { */ `, }, + { + code: ` + /** Desc. **/ + `, + errors: [{ + line: 2, + message: 'Should be no multiple asterisks on end lines.', + }], + output: ` + /** Desc. */ + `, + }, + { + code: ` + /** @someTag name desc. **/ + `, + errors: [{ + line: 2, + message: 'Should be no multiple asterisks on end lines.', + }], + output: ` + /** @someTag name desc. */ + `, + }, + { + code: ` + /** abc * */ + `, + errors: [{ + line: 2, + message: 'Should be no multiple asterisks on end lines.', + }], + output: ` + /** abc */ + `, + }, ], valid: [ { @@ -260,5 +296,30 @@ export default { */ `, }, + { + code: ` + /** abc */ + function foo() { + // + } + `, + }, + { + code: ` + /** foo */ + function foo(): void { + // + } + `, + parser: require.resolve('@typescript-eslint/parser'), + }, + { + code: ` + /** @aTag abc */ + function foo() { + // + } + `, + }, ], };