UNPKG

eslint-plugin-jsdoc

Version:
1 lines 6.01 kB
{"version":3,"file":"noBadBlocks.cjs","names":["iterateJsdoc","commentParser"],"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":[]}