UNPKG

eslint-plugin-jsdoc

Version:
126 lines (119 loc) 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const middleAsterisksBlockWS = /^([\t ]|\*(?!\*))+/v; const middleAsterisksNoBlockWS = /^\*+/v; const endAsterisksSingleLineBlockWS = /\*((?:\*|(?: |\t))*)\*$/v; const endAsterisksMultipleLineBlockWS = /((?:\*|(?: |\t))*)\*$/v; const endAsterisksSingleLineNoBlockWS = /\*(\**)\*$/v; const endAsterisksMultipleLineNoBlockWS = /(\**)\*$/v; var _default = exports.default = (0, _iterateJsdoc.default)(({ context, jsdoc, utils }) => { const { allowWhitespace = false, preventAtEnd = true, preventAtMiddleLines = true } = context.options[0] || {}; const middleAsterisks = allowWhitespace ? middleAsterisksNoBlockWS : middleAsterisksBlockWS; jsdoc.source.some(({ number, tokens }) => { const { delimiter, description, end, name, postDelimiter, tag, type } = tokens; if (preventAtMiddleLines && !end && !tag && !type && !name && (!allowWhitespace && middleAsterisks.test(description) || allowWhitespace && middleAsterisks.test(postDelimiter + description))) { // console.log('description', JSON.stringify(description)); const fix = () => { tokens.description = description.replace(middleAsterisks, ''); }; utils.reportJSDoc('Should be no multiple asterisks on middle lines.', { line: number }, fix, true); return true; } if (!preventAtEnd || !end) { return false; } const isSingleLineBlock = delimiter === '/**'; const delim = isSingleLineBlock ? '*' : delimiter; const endAsterisks = allowWhitespace ? isSingleLineBlock ? endAsterisksSingleLineNoBlockWS : endAsterisksMultipleLineNoBlockWS : isSingleLineBlock ? endAsterisksSingleLineBlockWS : endAsterisksMultipleLineBlockWS; const endingAsterisksAndSpaces = (allowWhitespace ? postDelimiter + description + delim : description + delim).match(endAsterisks); if (!endingAsterisksAndSpaces || !isSingleLineBlock && endingAsterisksAndSpaces[1] && !endingAsterisksAndSpaces[1].trim()) { return false; } const endFix = () => { if (!isSingleLineBlock) { tokens.delimiter = ''; } tokens.description = (description + delim).replace(endAsterisks, ''); }; utils.reportJSDoc('Should be no multiple asterisks on end lines.', { line: number }, endFix, true); return true; }); }, { iterateAllJsdocs: true, meta: { docs: { description: 'Prevents use of multiple asterisks at the beginning of lines.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-multi-asterisks.md#repos-sticky-header' }, fixable: 'code', schema: [{ additionalProperties: false, properties: { allowWhitespace: { description: `Set to \`true\` if you wish to allow asterisks after a space (as with Markdown): \`\`\`js /** * *bold* text */ \`\`\` Defaults to \`false\`.`, type: 'boolean' }, preventAtEnd: { description: `Prevent the likes of this: \`\`\`js /** * * **/ \`\`\` Defaults to \`true\`.`, type: 'boolean' }, preventAtMiddleLines: { description: `Prevent the likes of this: \`\`\`js /** * ** */ \`\`\` Defaults to \`true\`.`, type: 'boolean' } }, type: 'object' }], type: 'suggestion' } }); module.exports = exports.default; //# sourceMappingURL=noMultiAsterisks.cjs.map