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