| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs")); |
| var _commentParser = require("comment-parser"); |
| function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } |
| // Neither a single nor 3+ asterisks are valid JSDoc per |
| // https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code |
| const commentRegexp = /^\/\*(?!\*)/v; |
| const extraAsteriskCommentRegexp = /^\/\*{3,}/v; |
| var _default = exports.default = (0, _iterateJsdoc.default)(({ |
| allComments, |
| context, |
| makeReport, |
| sourceCode |
| }) => { |
| const [{ |
| ignore = ['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck'], |
| preventAllMultiAsteriskBlocks = false |
| } = {}] = context.options; |
| let extraAsterisks = false; |
| const nonJsdocNodes = /** @type {import('estree').Node[]} */allComments.filter(comment => { |
| const commentText = sourceCode.getText(comment); |
| const initialText = commentText.replace(commentRegexp, '').trimStart(); |
| if (['eslint'].some(directive => { |
| return initialText.startsWith(directive); |
| })) { |
| return false; |
| } |
| let sliceIndex = 2; |
| if (!commentRegexp.test(commentText)) { |
| const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0]; |
| if (!multiline) { |
| return false; |
| } |
| sliceIndex = multiline.length; |
| extraAsterisks = true; |
| if (preventAllMultiAsteriskBlocks) { |
| return true; |
| } |
| } |
| const tags = ((0, _commentParser.parse)(`${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`)[0] || {}).tags ?? []; |
| return tags.length && !tags.some(({ |
| tag |
| }) => { |
| return ignore.includes(tag); |
| }); |
| }); |
| if (!nonJsdocNodes.length) { |
| return; |
| } |
| for (const node of nonJsdocNodes) { |
| const report = /** @type {import('../iterateJsdoc.js').MakeReport} */makeReport(context, node); |
| |
| // eslint-disable-next-line no-loop-func |
| const fix = /** @type {import('eslint').Rule.ReportFixer} */fixer => { |
| const text = sourceCode.getText(node); |
| return fixer.replaceText(node, extraAsterisks ? text.replace(extraAsteriskCommentRegexp, '/**') : text.replace('/*', '/**')); |
| }; |
| report('Expected JSDoc-like comment to begin with two asterisks.', fix); |
| } |
| }, { |
| checkFile: true, |
| meta: { |
| docs: { |
| description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block.', |
| url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-bad-blocks.md#repos-sticky-header' |
| }, |
| fixable: 'code', |
| schema: [{ |
| additionalProperties: false, |
| properties: { |
| ignore: { |
| description: `An array of directives that will not be reported if present at the beginning of |
| a multi-comment block and at-sign \`/* @\`. |
| |
| Defaults to \`['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']\` |
| (some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)).`, |
| items: { |
| type: 'string' |
| }, |
| type: 'array' |
| }, |
| preventAllMultiAsteriskBlocks: { |
| description: `A boolean (defaulting to \`false\`) which if \`true\` will prevent all |
| JSDoc-like blocks with more than two initial asterisks even those without |
| apparent tag content.`, |
| type: 'boolean' |
| } |
| }, |
| type: 'object' |
| }], |
| type: 'layout' |
| } |
| }); |
| module.exports = exports.default; |
| //# sourceMappingURL=noBadBlocks.cjs.map |