eslint-plugin-jsdoc 63.0.10 → 63.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WarnSettings.cjs.map +1 -1
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/buildForbidRuleDefinition.cjs.map +1 -1
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
- package/dist/defaultTagOrder.cjs.map +1 -1
- package/dist/exportParser.cjs.map +1 -1
- package/dist/generateDocs.cjs.map +1 -1
- package/dist/generateOptions.cjs.map +1 -1
- package/dist/generateRule.cjs.map +1 -1
- package/dist/generateRuleTypes.cjs.map +1 -1
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/index-cjs.cjs.map +1 -1
- package/dist/index-esm.cjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAccess.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkSyntax.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +0 -1
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/escapeInlineTags.cjs.map +1 -1
- package/dist/rules/implementsOnClasses.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noBlankBlocks.cjs.map +1 -1
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noMissingSyntax.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/preferImportTag.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireExample.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +0 -1
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireParamDescription.cjs.map +1 -1
- package/dist/rules/requireParamName.cjs.map +1 -1
- package/dist/rules/requireParamType.cjs.map +1 -1
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requirePropertyDescription.cjs.map +1 -1
- package/dist/rules/requirePropertyName.cjs.map +1 -1
- package/dist/rules/requirePropertyType.cjs.map +1 -1
- package/dist/rules/requireRejects.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireReturnsType.cjs.map +1 -1
- package/dist/rules/requireTags.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireThrows.cjs.map +1 -1
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
- package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
- package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
- package/dist/rules/typeFormatting.cjs.map +1 -1
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/tagNames.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/package.json +21 -21
- package/src/rules/checkTemplateNames.js +0 -1
- package/src/rules/requireJsdoc.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTagNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_escapeStringRegexp","e","__esModule","default","jsxTagNames","Set","typedTagsAlwaysUnnecessary","typedTagsNeedingName","typedTagsUnnecessaryOutsideDeclare","_default","exports","iterateJsdoc","context","jsdoc","jsdocNode","node","report","settings","sourceCode","utils","definedTags","enableFixer","inlineTags","jsxTags","typed","options","definedPreferredTags","structuredTags","tagNamePreference","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","Boolean","isInAmbientContext","subNode","type","filename","getFilename","endsWith","declare","parent","tagIsRedundantWhenTyped","jsdocTag","has","tag","includes","reportWithTagRemovalFixer","message","tagIndex","additionalTagChanges","reportJSDoc","description","trim","changeTag","postType","removeTag","removeEmptyBlock","checkTagForTypedValidity","postTag","name","tags","tagName","validTags","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","inlineTag","getInlineTags","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nconst typedTagsAlwaysUnnecessary = new Set([\n 'augments',\n 'callback',\n 'class',\n 'enum',\n 'implements',\n 'private',\n 'property',\n 'protected',\n 'public',\n 'readonly',\n 'this',\n 'type',\n 'typedef',\n]);\n\nconst typedTagsNeedingName = new Set([\n 'template',\n]);\n\nconst typedTagsUnnecessaryOutsideDeclare = new Set([\n 'abstract',\n 'access',\n 'class',\n 'constant',\n 'constructs',\n 'default',\n 'enum',\n 'export',\n 'exports',\n 'function',\n 'global',\n 'inherits',\n 'instance',\n 'interface',\n 'member',\n 'memberof',\n 'memberOf',\n 'method',\n 'mixes',\n 'mixin',\n 'module',\n 'name',\n 'namespace',\n 'override',\n 'property',\n 'requires',\n 'static',\n 'this',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const\n /**\n * @type {{\n * definedTags: string[],\n * enableFixer: boolean,\n * inlineTags: string[],\n * jsxTags: boolean,\n * typed: boolean\n }} */ {\n definedTags = [],\n enableFixer = true,\n inlineTags = [\n // jsdoc\n 'link', 'linkcode', 'linkplain', 'tutorial',\n // https://tsdoc.org/pages/spec/tag_kinds/#inline-tags\n 'inheritDoc',\n 'label',\n // https://typedoc.org/documents/Tags.html#inline-tags\n 'include', 'includeCode',\n ],\n jsxTags,\n typed,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTags = [];\n const {\n structuredTags,\n tagNamePreference,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter(Boolean);\n }\n\n /**\n * @param {import('eslint').Rule.Node} subNode\n * @returns {boolean}\n */\n const isInAmbientContext = (subNode) => {\n return subNode.type === 'Program' ?\n /* c8 ignore next 2 -- Support old ESLint */\n // @ts-expect-error ESLint < 10\n (context.filename ?? context.getFilename()).endsWith('.d.ts') :\n Boolean(\n /** @type {import('@typescript-eslint/types').TSESTree.VariableDeclaration} */ (\n subNode\n ).declare,\n ) || isInAmbientContext(subNode.parent);\n };\n\n /**\n * @param {import('comment-parser').Spec} jsdocTag\n * @returns {boolean}\n */\n const tagIsRedundantWhenTyped = (jsdocTag) => {\n if (!typedTagsUnnecessaryOutsideDeclare.has(jsdocTag.tag)) {\n return false;\n }\n\n if (jsdocTag.tag === 'default') {\n return false;\n }\n\n if (node === null) {\n return false;\n }\n\n /* c8 ignore next 2 -- Support old ESLint */\n // @ts-expect-error ESLint < 10\n if ((context.filename ?? context.getFilename()).endsWith('.d.ts') && [\n null, 'Program', undefined,\n ].includes(node?.parent?.type)) {\n return false;\n }\n\n if (isInAmbientContext(/** @type {import('eslint').Rule.Node} */ (node))) {\n return false;\n }\n\n return true;\n };\n\n /**\n * @param {string} message\n * @param {import('comment-parser').Spec} jsdocTag\n * @param {import('../iterateJsdoc.js').Integer} tagIndex\n * @param {Partial<import('comment-parser').Tokens>} [additionalTagChanges]\n * @returns {void}\n */\n const reportWithTagRemovalFixer = (message, jsdocTag, tagIndex, additionalTagChanges) => {\n utils.reportJSDoc(message, jsdocTag, enableFixer ? () => {\n if (jsdocTag.description.trim()) {\n utils.changeTag(jsdocTag, {\n postType: '',\n type: '',\n ...additionalTagChanges,\n });\n } else {\n utils.removeTag(tagIndex, {\n removeEmptyBlock: true,\n });\n }\n } : null, true);\n };\n\n /**\n * @param {import('comment-parser').Spec} jsdocTag\n * @param {import('../iterateJsdoc.js').Integer} tagIndex\n * @returns {boolean}\n */\n const checkTagForTypedValidity = (jsdocTag, tagIndex) => {\n if (typedTagsAlwaysUnnecessary.has(jsdocTag.tag)) {\n reportWithTagRemovalFixer(\n `'@${jsdocTag.tag}' is redundant when using a type system.`,\n jsdocTag,\n tagIndex,\n {\n postTag: '',\n tag: '',\n },\n );\n return true;\n }\n\n if (tagIsRedundantWhenTyped(jsdocTag)) {\n reportWithTagRemovalFixer(\n `'@${jsdocTag.tag}' is redundant outside of ambient (\\`declare\\`/\\`.d.ts\\`) contexts when using a type system.`,\n jsdocTag,\n tagIndex,\n );\n return true;\n }\n\n if (typedTagsNeedingName.has(jsdocTag.tag) && !jsdocTag.name) {\n reportWithTagRemovalFixer(\n `'@${jsdocTag.tag}' without a name is redundant when using a type system.`,\n jsdocTag,\n tagIndex,\n );\n return true;\n }\n\n return false;\n };\n\n for (let tagIndex = 0; tagIndex < jsdoc.tags.length; tagIndex += 1) {\n const jsdocTag = jsdoc.tags[tagIndex];\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (typed && checkTagForTypedValidity(jsdocTag, tagIndex)) {\n continue;\n }\n\n const validTags = [\n ...definedTags,\n ...(/** @type {string[]} */ (definedPreferredTags)),\n ...definedNonPreferredTags,\n ...definedStructuredTags,\n ...typed ? typedTagsNeedingName : [],\n ];\n\n if (utils.isValidTag(tagName, validTags)) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = /** @type {{message: string; replacement?: string | undefined;}} */ (\n preferredTagName\n ));\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'v'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n\n for (const inlineTag of utils.getInlineTags()) {\n if (!inlineTags.includes(inlineTag.tag)) {\n report(`Invalid JSDoc inline tag name \"${inlineTag.tag}\"`, null, inlineTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-tag-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n description: `Use an array of \\`definedTags\\` strings to configure additional, allowed tags.\nThe format is as follows:\n\n\\`\\`\\`json\n{\n \"definedTags\": [\"note\", \"record\"]\n}\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed).',\n type: 'boolean',\n },\n inlineTags: {\n description: `List of tags to allow inline.\n\nDefaults to array of \\`'link', 'linkcode', 'linkplain', 'tutorial', 'inheritDoc', 'label', 'include', and 'includeCode'\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n description: `If this is set to \\`true\\`, all of the following tags used to control JSX output are allowed:\n\n\\`\\`\\`\njsx\njsxFrag\njsxImportSource\njsxRuntime\n\\`\\`\\`\n\nFor more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx).`,\n type: 'boolean',\n },\n typed: {\n description: `If this is set to \\`true\\`, additionally checks for tag names that are redundant when using a type checker such as TypeScript.\n\nThese tags are always unnecessary when using TypeScript or similar:\n\n\\`\\`\\`\naugments\ncallback\nclass\nenum\nimplements\nprivate\nproperty\nprotected\npublic\nreadonly\nthis\ntype\ntypedef\n\\`\\`\\`\n\nThese tags are unnecessary except when inside a TypeScript \\`declare\\` context:\n\n\\`\\`\\`\nabstract\naccess\nclass\nconstant\nconstructs\ndefault\nenum\nexport\nexports\nfunction\nglobal\ninherits\ninstance\ninterface\nmember\nmemberof\nmemberOf\nmethod\nmixes\nmixin\nmodule\nname\nnamespace\noverride\nproperty\nrequires\nstatic\nthis\n\\`\\`\\``,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"checkTagNames.cjs","names":["iterateJsdoc","escapeStringRegexp"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nconst typedTagsAlwaysUnnecessary = new Set([\n 'augments',\n 'callback',\n 'class',\n 'enum',\n 'implements',\n 'private',\n 'property',\n 'protected',\n 'public',\n 'readonly',\n 'this',\n 'type',\n 'typedef',\n]);\n\nconst typedTagsNeedingName = new Set([\n 'template',\n]);\n\nconst typedTagsUnnecessaryOutsideDeclare = new Set([\n 'abstract',\n 'access',\n 'class',\n 'constant',\n 'constructs',\n 'default',\n 'enum',\n 'export',\n 'exports',\n 'function',\n 'global',\n 'inherits',\n 'instance',\n 'interface',\n 'member',\n 'memberof',\n 'memberOf',\n 'method',\n 'mixes',\n 'mixin',\n 'module',\n 'name',\n 'namespace',\n 'override',\n 'property',\n 'requires',\n 'static',\n 'this',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const\n /**\n * @type {{\n * definedTags: string[],\n * enableFixer: boolean,\n * inlineTags: string[],\n * jsxTags: boolean,\n * typed: boolean\n }} */ {\n definedTags = [],\n enableFixer = true,\n inlineTags = [\n // jsdoc\n 'link', 'linkcode', 'linkplain', 'tutorial',\n // https://tsdoc.org/pages/spec/tag_kinds/#inline-tags\n 'inheritDoc',\n 'label',\n // https://typedoc.org/documents/Tags.html#inline-tags\n 'include', 'includeCode',\n ],\n jsxTags,\n typed,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTags = [];\n const {\n structuredTags,\n tagNamePreference,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter(Boolean);\n }\n\n /**\n * @param {import('eslint').Rule.Node} subNode\n * @returns {boolean}\n */\n const isInAmbientContext = (subNode) => {\n return subNode.type === 'Program' ?\n /* c8 ignore next 2 -- Support old ESLint */\n // @ts-expect-error ESLint < 10\n (context.filename ?? context.getFilename()).endsWith('.d.ts') :\n Boolean(\n /** @type {import('@typescript-eslint/types').TSESTree.VariableDeclaration} */ (\n subNode\n ).declare,\n ) || isInAmbientContext(subNode.parent);\n };\n\n /**\n * @param {import('comment-parser').Spec} jsdocTag\n * @returns {boolean}\n */\n const tagIsRedundantWhenTyped = (jsdocTag) => {\n if (!typedTagsUnnecessaryOutsideDeclare.has(jsdocTag.tag)) {\n return false;\n }\n\n if (jsdocTag.tag === 'default') {\n return false;\n }\n\n if (node === null) {\n return false;\n }\n\n /* c8 ignore next 2 -- Support old ESLint */\n // @ts-expect-error ESLint < 10\n if ((context.filename ?? context.getFilename()).endsWith('.d.ts') && [\n null, 'Program', undefined,\n ].includes(node?.parent?.type)) {\n return false;\n }\n\n if (isInAmbientContext(/** @type {import('eslint').Rule.Node} */ (node))) {\n return false;\n }\n\n return true;\n };\n\n /**\n * @param {string} message\n * @param {import('comment-parser').Spec} jsdocTag\n * @param {import('../iterateJsdoc.js').Integer} tagIndex\n * @param {Partial<import('comment-parser').Tokens>} [additionalTagChanges]\n * @returns {void}\n */\n const reportWithTagRemovalFixer = (message, jsdocTag, tagIndex, additionalTagChanges) => {\n utils.reportJSDoc(message, jsdocTag, enableFixer ? () => {\n if (jsdocTag.description.trim()) {\n utils.changeTag(jsdocTag, {\n postType: '',\n type: '',\n ...additionalTagChanges,\n });\n } else {\n utils.removeTag(tagIndex, {\n removeEmptyBlock: true,\n });\n }\n } : null, true);\n };\n\n /**\n * @param {import('comment-parser').Spec} jsdocTag\n * @param {import('../iterateJsdoc.js').Integer} tagIndex\n * @returns {boolean}\n */\n const checkTagForTypedValidity = (jsdocTag, tagIndex) => {\n if (typedTagsAlwaysUnnecessary.has(jsdocTag.tag)) {\n reportWithTagRemovalFixer(\n `'@${jsdocTag.tag}' is redundant when using a type system.`,\n jsdocTag,\n tagIndex,\n {\n postTag: '',\n tag: '',\n },\n );\n return true;\n }\n\n if (tagIsRedundantWhenTyped(jsdocTag)) {\n reportWithTagRemovalFixer(\n `'@${jsdocTag.tag}' is redundant outside of ambient (\\`declare\\`/\\`.d.ts\\`) contexts when using a type system.`,\n jsdocTag,\n tagIndex,\n );\n return true;\n }\n\n if (typedTagsNeedingName.has(jsdocTag.tag) && !jsdocTag.name) {\n reportWithTagRemovalFixer(\n `'@${jsdocTag.tag}' without a name is redundant when using a type system.`,\n jsdocTag,\n tagIndex,\n );\n return true;\n }\n\n return false;\n };\n\n for (let tagIndex = 0; tagIndex < jsdoc.tags.length; tagIndex += 1) {\n const jsdocTag = jsdoc.tags[tagIndex];\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (typed && checkTagForTypedValidity(jsdocTag, tagIndex)) {\n continue;\n }\n\n const validTags = [\n ...definedTags,\n ...(/** @type {string[]} */ (definedPreferredTags)),\n ...definedNonPreferredTags,\n ...definedStructuredTags,\n ...typed ? typedTagsNeedingName : [],\n ];\n\n if (utils.isValidTag(tagName, validTags)) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = /** @type {{message: string; replacement?: string | undefined;}} */ (\n preferredTagName\n ));\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'v'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n\n for (const inlineTag of utils.getInlineTags()) {\n if (!inlineTags.includes(inlineTag.tag)) {\n report(`Invalid JSDoc inline tag name \"${inlineTag.tag}\"`, null, inlineTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-tag-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n description: `Use an array of \\`definedTags\\` strings to configure additional, allowed tags.\nThe format is as follows:\n\n\\`\\`\\`json\n{\n \"definedTags\": [\"note\", \"record\"]\n}\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed).',\n type: 'boolean',\n },\n inlineTags: {\n description: `List of tags to allow inline.\n\nDefaults to array of \\`'link', 'linkcode', 'linkplain', 'tutorial', 'inheritDoc', 'label', 'include', and 'includeCode'\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n description: `If this is set to \\`true\\`, all of the following tags used to control JSX output are allowed:\n\n\\`\\`\\`\njsx\njsxFrag\njsxImportSource\njsxRuntime\n\\`\\`\\`\n\nFor more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx).`,\n type: 'boolean',\n },\n typed: {\n description: `If this is set to \\`true\\`, additionally checks for tag names that are redundant when using a type checker such as TypeScript.\n\nThese tags are always unnecessary when using TypeScript or similar:\n\n\\`\\`\\`\naugments\ncallback\nclass\nenum\nimplements\nprivate\nproperty\nprotected\npublic\nreadonly\nthis\ntype\ntypedef\n\\`\\`\\`\n\nThese tags are unnecessary except when inside a TypeScript \\`declare\\` context:\n\n\\`\\`\\`\nabstract\naccess\nclass\nconstant\nconstructs\ndefault\nenum\nexport\nexports\nfunction\nglobal\ninherits\ninstance\ninterface\nmember\nmemberof\nmemberOf\nmethod\nmixes\nmixin\nmodule\nname\nnamespace\noverride\nproperty\nrequires\nstatic\nthis\n\\`\\`\\``,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;IAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;MACvC,MAAM,CAAC,kCAAkC,SAAS,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IAC7E;EACF;AACF,CAAC,EAAE;EACD,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,kCAAkC;MAC/C,GAAG,EAAE;IACP,CAAC;IACD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,WAAW,EAAE;UACX,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,WAAW,EAAE;UACX,WAAW,EAAE,uGAAuG;UACpH,IAAI,EAAE;QACR,CAAC;QACD,UAAU,EAAE;UACV,WAAW,EAAE;AACzB;AACA,0HAA0H;UAC9G,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,OAAO,EAAE;UACP,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH;UACtG,IAAI,EAAE;QACR,CAAC;QACD,KAAK,EAAE;UACL,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}
|
|
@@ -100,7 +100,6 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
100
100
|
} else if (aliasDeclaration.type === 'ClassDeclaration') {
|
|
101
101
|
/* c8 ignore next -- TS */
|
|
102
102
|
for (const nde of aliasDeclaration?.body?.body ?? []) {
|
|
103
|
-
// @ts-expect-error Should be ok
|
|
104
103
|
const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, nde, settings);
|
|
105
104
|
if (!commentNode) {
|
|
106
105
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTemplateNames.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdocUtils","_jsdoccomment","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","jsdoc","node","report","settings","sourceCode","utils","mode","tgName","getPreferredTagName","tagName","templateTags","getTags","usedNames","Set","checkForUsedTypes","potentialType","parsedType","tryParseType","parseType","traverse","nde","type","value","add","checkParamsAndReturnsTags","jsdc","paramName","paramTags","paramTag","returnsName","returnsTags","returnsTag","checkTemplateTags","tag","names","parseClosureTemplateTag","nme","checkParameters","aliasDeclaration","checkParamsAndReturns","params","typeParameters","name","body","commentNode","getJSDocComment","innerJsdoc","parseComment","typeName","typeTags","typeTag","heritageTagName","heritageTag","handleTypeAliases","declaration","callbackTags","functionTags","length","typedefTags","potentialTypedefType","propertyName","propertyTags","propertyTag","iterateAllJsdocs","meta","docs","description","url","schema","module"],"sources":["../../src/rules/checkTemplateNames.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getTags,\n} from '../jsdocUtils.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n jsdoc,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const tgName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'template',\n }));\n if (!tgName) {\n return;\n }\n\n const templateTags = utils.getTags(tgName);\n\n const usedNames = new Set();\n /**\n * @param {string} potentialType\n */\n const checkForUsedTypes = (potentialType) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName') {\n usedNames.add(value);\n }\n });\n };\n\n const checkParamsAndReturnsTags = (jsdc = jsdoc) => {\n const paramName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const paramTags = getTags(jsdc, paramName);\n for (const paramTag of paramTags) {\n checkForUsedTypes(paramTag.type);\n }\n\n const returnsName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n const returnsTags = getTags(jsdc, returnsName);\n for (const returnsTag of returnsTags) {\n checkForUsedTypes(returnsTag.type);\n }\n };\n\n const checkTemplateTags = () => {\n for (const tag of templateTags) {\n const names = utils.parseClosureTemplateTag(tag);\n for (const nme of names) {\n if (!usedNames.has(nme)) {\n report(`@${tgName} ${nme} not in use`, null, tag);\n }\n }\n }\n };\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n * @param {boolean} [checkParamsAndReturns]\n */\n const checkParameters = (aliasDeclaration, checkParamsAndReturns) => {\n /* c8 ignore next -- Guard */\n const {\n params,\n } = aliasDeclaration.typeParameters ?? {\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n if (checkParamsAndReturns) {\n checkParamsAndReturnsTags();\n } else if (aliasDeclaration.type === 'ClassDeclaration') {\n /* c8 ignore next -- TS */\n for (const nde of aliasDeclaration?.body?.body ?? []) {\n // @ts-expect-error Should be ok\n const commentNode = getJSDocComment(sourceCode, nde, settings);\n if (!commentNode) {\n continue;\n }\n\n const innerJsdoc = parseComment(commentNode, '');\n checkParamsAndReturnsTags(innerJsdoc);\n\n const typeName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'type',\n }));\n const typeTags = getTags(innerJsdoc, typeName);\n for (const typeTag of typeTags) {\n checkForUsedTypes(typeTag.type);\n }\n }\n }\n\n // Template names may be used only within the heritage clause types of a\n // class/interface, e.g. `@template T` used in `@augments {Base<T>}`.\n for (const heritageTagName of [\n 'augments', 'extends', 'implements',\n ]) {\n for (const heritageTag of getTags(jsdoc, heritageTagName)) {\n checkForUsedTypes(heritageTag.type);\n }\n }\n\n checkTemplateTags();\n };\n\n const handleTypeAliases = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde);\n break;\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde.declaration);\n break;\n case 'FunctionDeclaration':\n checkParameters(nde.declaration, true);\n break;\n }\n\n break;\n case 'FunctionDeclaration':\n checkParameters(nde, true);\n break;\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkParamsAndReturnsTags();\n checkTemplateTags();\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypeAliases();\n return;\n }\n\n const potentialTypedefType = typedefTags[0].type;\n checkForUsedTypes(potentialTypedefType);\n\n const propertyName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'property',\n }));\n const propertyTags = utils.getTags(propertyName);\n for (const propertyTag of propertyTags) {\n checkForUsedTypes(propertyTag.type);\n }\n\n checkTemplateTags();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that any `@template` names are actually used in the connected `@typedef` or type alias.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-template-names.md#repos-sticky-header',\n },\n schema: [],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"checkTemplateNames.cjs","names":["iterateJsdoc","tryParseType","parseType","traverse","getTags","getJSDocComment","parseComment"],"sources":["../../src/rules/checkTemplateNames.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getTags,\n} from '../jsdocUtils.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n jsdoc,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const tgName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'template',\n }));\n if (!tgName) {\n return;\n }\n\n const templateTags = utils.getTags(tgName);\n\n const usedNames = new Set();\n /**\n * @param {string} potentialType\n */\n const checkForUsedTypes = (potentialType) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName') {\n usedNames.add(value);\n }\n });\n };\n\n const checkParamsAndReturnsTags = (jsdc = jsdoc) => {\n const paramName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const paramTags = getTags(jsdc, paramName);\n for (const paramTag of paramTags) {\n checkForUsedTypes(paramTag.type);\n }\n\n const returnsName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n const returnsTags = getTags(jsdc, returnsName);\n for (const returnsTag of returnsTags) {\n checkForUsedTypes(returnsTag.type);\n }\n };\n\n const checkTemplateTags = () => {\n for (const tag of templateTags) {\n const names = utils.parseClosureTemplateTag(tag);\n for (const nme of names) {\n if (!usedNames.has(nme)) {\n report(`@${tgName} ${nme} not in use`, null, tag);\n }\n }\n }\n };\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n * @param {boolean} [checkParamsAndReturns]\n */\n const checkParameters = (aliasDeclaration, checkParamsAndReturns) => {\n /* c8 ignore next -- Guard */\n const {\n params,\n } = aliasDeclaration.typeParameters ?? {\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n if (checkParamsAndReturns) {\n checkParamsAndReturnsTags();\n } else if (aliasDeclaration.type === 'ClassDeclaration') {\n /* c8 ignore next -- TS */\n for (const nde of aliasDeclaration?.body?.body ?? []) {\n const commentNode = getJSDocComment(sourceCode, nde, settings);\n if (!commentNode) {\n continue;\n }\n\n const innerJsdoc = parseComment(commentNode, '');\n checkParamsAndReturnsTags(innerJsdoc);\n\n const typeName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'type',\n }));\n const typeTags = getTags(innerJsdoc, typeName);\n for (const typeTag of typeTags) {\n checkForUsedTypes(typeTag.type);\n }\n }\n }\n\n // Template names may be used only within the heritage clause types of a\n // class/interface, e.g. `@template T` used in `@augments {Base<T>}`.\n for (const heritageTagName of [\n 'augments', 'extends', 'implements',\n ]) {\n for (const heritageTag of getTags(jsdoc, heritageTagName)) {\n checkForUsedTypes(heritageTag.type);\n }\n }\n\n checkTemplateTags();\n };\n\n const handleTypeAliases = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde);\n break;\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde.declaration);\n break;\n case 'FunctionDeclaration':\n checkParameters(nde.declaration, true);\n break;\n }\n\n break;\n case 'FunctionDeclaration':\n checkParameters(nde, true);\n break;\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkParamsAndReturnsTags();\n checkTemplateTags();\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypeAliases();\n return;\n }\n\n const potentialTypedefType = typedefTags[0].type;\n checkForUsedTypes(potentialTypedefType);\n\n const propertyName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'property',\n }));\n const propertyTags = utils.getTags(propertyName);\n for (const propertyTag of propertyTags) {\n checkForUsedTypes(propertyTag.type);\n }\n\n checkTemplateTags();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that any `@template` names are actually used in the connected `@typedef` or type alias.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-template-names.md#repos-sticky-header',\n },\n schema: [],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTypes.cjs","names":["
|
|
1
|
+
{"version":3,"file":"checkTypes.cjs","names":["strictNativeTypes","buildRejectOrPreferRuleDefinition"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n buildRejectOrPreferRuleDefinition,\n} from '../buildRejectOrPreferRuleDefinition.js';\nimport {\n strictNativeTypes,\n} from '../jsdocUtils.js';\n\n/**\n * @callback CheckNativeTypes\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n * @param {import('../iterateJsdoc.js').PreferredTypes} preferredTypes\n * @param {string} typeNodeName\n * @param {string|undefined} preferred\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {string|undefined} The `preferred` type string, optionally changed\n */\n\n/** @type {CheckNativeTypes} */\nconst checkNativeTypes = (preferredTypes, typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.elements?.length && (\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.left?.type === 'JsdocTypeName' &&\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (parentNode)?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n};\n\nexport default buildRejectOrPreferRuleDefinition({\n checkNativeTypes,\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n description: 'Avoids reporting when a bad type is found on a specified tag.',\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n description: 'Set a key `tag` to the tag to exempt',\n type: 'string',\n },\n types: {\n description: `Set to \\`true\\` to indicate that any types on that tag will be allowed,\nor to an array of strings which will only allow specific bad types.\nIf an array of strings is given, these must match the type exactly,\ne.g., if you only allow \\`\"object\"\\`, it will not allow\n\\`\"object<string, string>\"\\`. Note that this is different from the\nbehavior of \\`settings.jsdoc.preferredTypes\\`. This option is useful\nfor normally restricting generic types like \\`object\\` with\n\\`preferredTypes\\`, but allowing \\`typedef\\` to indicate that its base\ntype is \\`object\\`.`,\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n description: `Insists that only the supplied option type\nmap is to be used, and that the default preferences (such as \"string\"\nover \"String\") will not be enforced. The option's default is \\`false\\`.`,\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n description: `@deprecated Use the \\`preferredTypes[preferredType]\\` setting of the same name instead.\nIf this option is \\`true\\`, will currently override \\`unifyParentAndChildTypeChecks\\` on the \\`preferredTypes\\` setting.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n});\n"],"mappings":";;;;;;AAAA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,KAAK;EAC9F,IAAI,gBAAgB,GAAG,SAAS;EAChC,KAAK,MAAM,gBAAgB,IAAIA,YAAA,iBAAiB,EAAE;IAChD,IACE,gBAAgB,KAAK,QAAQ;IAE3B;IACA;IACA,CAAC,cAAc,GAAG,YAAY,CAAC;IAC/B;IACA;IACA;IACA;IACA;AACR;AACA;IAEU,UAAU,EACT,QAAQ,EAAE,MAAM;IACnB;AACR;AACA;IAEY,UAAU,EACT,IAAI,EAAE,IAAI,KAAK,eAAe;IACjC;AACV;AACA;IACW,UAAU,EAAG,IAAI,EAAE,KAAK,KAAK,QAAQ,CACvC,CACF,EACD;MACA;IACF;IAEA,IAAI,gBAAgB,KAAK,YAAY,IACnC,gBAAgB,CAAC,WAAW,CAAC,CAAC,KAAK,YAAY,CAAC,WAAW,CAAC,CAAC;IAE7D;IACC,CAAC,cAAc,IAAI,cAAc,GAAG,gBAAgB,CAAC,KAAK,SAAS,CAAC,EACrE;MACA,gBAAgB,GAAG,gBAAgB;MACnC,YAAY,CAAC,IAAI,CAAC,CAChB,YAAY,EAAE,gBAAgB,CAC/B,CAAC;MACF;IACF;EACF;EAEA,OAAO,gBAAgB;AACzB,CAAC;AAAC,iCAEa,IAAAC,mCAAA,iCAAiC,EAAC;EAC/C,gBAAgB;EAChB,MAAM,EAAE,CACN;IACE,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;MACV,iBAAiB,EAAE;QACjB,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE;UACL,oBAAoB,EAAE,KAAK;UAC3B,UAAU,EAAE;YACV,GAAG,EAAE;cACH,WAAW,EAAE,sCAAsC;cACnD,IAAI,EAAE;YACR,CAAC;YACD,KAAK,EAAE;cACL,WAAW,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;cACJ,KAAK,EAAE,CACL;gBACE,IAAI,EAAE;cACR,CAAC,EACD;gBACE,KAAK,EAAE;kBACL,IAAI,EAAE;gBACR,CAAC;gBACD,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,IAAI,EAAE;MACR,CAAC;MACD,UAAU,EAAE;QACV,WAAW,EAAE;AACvB;AACA,wEAAwE;QAC9D,IAAI,EAAE;MACR,CAAC;MACD,6BAA6B,EAAE;QAC7B,WAAW,EAAE;AACvB,yHAAyH;QAC/G,IAAI,EAAE;MACR;IACF,CAAC;IACD,IAAI,EAAE;EACR,CAAC;AAEL,CAAC,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkValues.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_parseImportsExports","_semver","_spdxExpressionParse","e","__esModule","default","allowedKinds","Set","_default","exports","iterateJsdoc","context","report","settings","utils","options","allowedAuthors","allowedLicenses","licensePattern","numericOnlyVariation","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","kind","has","join","variation","Number","isInteger","licenseRegex","getRegexFromString","matches","matchAll","positiveMatch","match","license","includes","spdxExpressionParse","mode","tag","description","name","type","typePart","imprt","importsExports","parseImportsExports","errors","author","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","anyOf","module"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedAuthors = null,\n allowedLicenses = null,\n licensePattern = '/([^\\n\\r]*)/gv',\n numericOnlyVariation = false,\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n if (settings.mode === 'typescript') {\n utils.forEachPreferredTag('import', (tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n if (importsExports.errors) {\n report(\n 'Bad @import tag',\n null,\n tag,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n description: `An array of allowable author values. If absent, only non-whitespace will\nbe checked for.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n description: `An array of allowable license values or \\`true\\` to allow any license text.\nIf present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).`,\n },\n licensePattern: {\n description: `A string to be converted into a \\`RegExp\\` (with \\`v\\` flag) and whose first\nparenthetical grouping, if present, will match the portion of the license\ndescription to check (if no grouping is present, then the whole portion\nmatched will be used). Defaults to \\`/([^\\\\n\\\\r]*)/gv\\`, i.e., the SPDX expression\nis expected before any line breaks.\n\nNote that the \\`/\\` delimiters are optional, but necessary to add flags.\n\nDefaults to using the \\`v\\` flag, so to add your own flags, encapsulate\nyour expression as a string, but like a literal, e.g., \\`/^mit$/vi\\`.`,\n type: 'string',\n },\n numericOnlyVariation: {\n description: `Whether to enable validation that \\`@variation\\` must be a number. Defaults to\n\\`false\\`.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"checkValues.cjs","names":["iterateJsdoc","semver","spdxExpressionParse","parseImportsExports"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedAuthors = null,\n allowedLicenses = null,\n licensePattern = '/([^\\n\\r]*)/gv',\n numericOnlyVariation = false,\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n if (settings.mode === 'typescript') {\n utils.forEachPreferredTag('import', (tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n if (importsExports.errors) {\n report(\n 'Bad @import tag',\n null,\n tag,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n description: `An array of allowable author values. If absent, only non-whitespace will\nbe checked for.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n description: `An array of allowable license values or \\`true\\` to allow any license text.\nIf present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).`,\n },\n licensePattern: {\n description: `A string to be converted into a \\`RegExp\\` (with \\`v\\` flag) and whose first\nparenthetical grouping, if present, will match the portion of the license\ndescription to check (if no grouping is present, then the whole portion\nmatched will be used). Defaults to \\`/([^\\\\n\\\\r]*)/gv\\`, i.e., the SPDX expression\nis expected before any line breaks.\n\nNote that the \\`/\\` delimiters are optional, but necessary to add flags.\n\nDefaults to using the \\`v\\` flag, so to add your own flags, encapsulate\nyour expression as a string, but like a literal, e.g., \\`/^mit$/vi\\`.`,\n type: 'string',\n },\n numericOnlyVariation: {\n description: `Whether to enable validation that \\`@variation\\` must be a number. Defaults to\n\\`false\\`.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToJsdocComments.cjs","names":["_iterateJsdoc","require","_jsdocUtils","_jsdoccomment","_default","exports","default","create","context","sourceCode","getSourceCode","settings","getSettings","allowedPrefixes","contexts","contextsAfter","contextsBeforeAndAfter","enableFixer","enforceJsdocLineStyle","lineOrBlockStyle","options","reportingNonJsdoc","report","messageId","comment","node","fixer","loc","end","column","line","start","fix","getFixer","addComment","ctxts","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","getText","inlineCommentBlock","find","contxt","ctxt","type","reportings","checkNonJsdoc","_info","_handler","getNonJsdocComment","some","prefix","value","trimStart","startsWith","commentToAdd","insertion","trim","trimEnd","repeat","replaceText","checkNonJsdocAfter","getFollowingComment","slice","remove","insertTextBefore","parent","getContextObject","enforcedContexts","meta","docs","description","url","fixable","messages","blockCommentsJsdocStyle","lineCommentsJsdocStyle","schema","additionalProperties","properties","items","anyOf","enum","module"],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n getContextObject,\n getIndent,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getFollowingComment,\n getNonJsdocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /**\n * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} Token\n */\n\n /**\n * @callback AddComment\n * @param {boolean|undefined} inlineCommentBlock\n * @param {Token} comment\n * @param {string} indent\n * @param {number} lines\n * @param {import('eslint').Rule.RuleFixer} fixer\n */\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const {\n allowedPrefixes = [\n '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n ],\n contexts = settings.contexts || [],\n contextsAfter = /** @type {string[]} */ ([]),\n contextsBeforeAndAfter = [\n 'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n ],\n enableFixer = true,\n enforceJsdocLineStyle = 'multi',\n lineOrBlockStyle = 'both',\n } = context.options[0] ?? {};\n\n let reportingNonJsdoc = false;\n\n /**\n * @param {string} messageId\n * @param {import('estree').Comment|Token} comment\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').Rule.ReportFixer} fixer\n */\n const report = (messageId, comment, node, fixer) => {\n const loc = {\n end: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n start: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n };\n\n context.report({\n fix: enableFixer ? fixer : null,\n loc,\n messageId,\n node,\n });\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const getFixer = (node, comment, addComment, ctxts) => {\n return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n */ (\n getReducedASTNode(node, sourceCode)\n );\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n decorator\n );\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }[]}\n */ (ctxts).find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n }) || {};\n\n return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n };\n };\n\n /**\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {import('eslint').Rule.Node} node\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const reportings = (comment, node, addComment, ctxts) => {\n const fixer = getFixer(node, comment, addComment, ctxts);\n\n if (comment.type === 'Block') {\n if (lineOrBlockStyle === 'line') {\n return;\n }\n\n report('blockCommentsJsdocStyle', comment, node, fixer);\n return;\n }\n\n if (comment.type === 'Line') {\n if (lineOrBlockStyle === 'block') {\n return;\n }\n\n report('lineCommentsJsdocStyle', comment, node, fixer);\n }\n };\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkNonJsdoc = (_info, _handler, node) => {\n const comment = getNonJsdocComment(sourceCode, node, settings);\n\n if (\n !comment ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n reportingNonJsdoc = true;\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n return fixer.replaceText(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n insertion,\n );\n };\n\n reportings(comment, node, addComment, contexts);\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const checkNonJsdocAfter = (node, ctxts) => {\n const comment = getFollowingComment(sourceCode, node);\n\n if (\n !comment ||\n comment.value.startsWith('*') ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n return [\n fixer.remove(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n ), fixer.insertTextBefore(\n node.type === 'VariableDeclarator' ? node.parent : node,\n insertion,\n ),\n ];\n };\n\n reportings(comment, node, addComment, ctxts);\n };\n\n // Todo: add contexts to check after (and handle if want both before and after)\n return {\n ...getContextObject(\n enforcedContexts(context, true, settings),\n checkNonJsdoc,\n ),\n ...getContextObject(\n contextsAfter,\n (_info, _handler, node) => {\n checkNonJsdocAfter(node, contextsAfter);\n },\n ),\n ...getContextObject(\n contextsBeforeAndAfter,\n (_info, _handler, node) => {\n checkNonJsdoc({}, null, node);\n if (!reportingNonJsdoc) {\n checkNonJsdocAfter(node, contextsBeforeAndAfter);\n }\n },\n ),\n };\n },\n meta: {\n docs: {\n description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedPrefixes: {\n description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n contexts: {\n description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsAfter: {\n description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsBeforeAndAfter: {\n description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable fixing.',\n type: 'boolean',\n },\n enforceJsdocLineStyle: {\n description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.`,\n enum: [\n 'multi', 'single',\n ],\n type: 'string',\n },\n lineOrBlockStyle: {\n description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n enum: [\n 'block', 'line', 'both',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"convertToJsdocComments.cjs","names":["getSettings","getReducedASTNode","getDecorator","getIndent","getNonJsdocComment","getFollowingComment","getContextObject","enforcedContexts"],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n getContextObject,\n getIndent,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getFollowingComment,\n getNonJsdocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /**\n * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} Token\n */\n\n /**\n * @callback AddComment\n * @param {boolean|undefined} inlineCommentBlock\n * @param {Token} comment\n * @param {string} indent\n * @param {number} lines\n * @param {import('eslint').Rule.RuleFixer} fixer\n */\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const {\n allowedPrefixes = [\n '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n ],\n contexts = settings.contexts || [],\n contextsAfter = /** @type {string[]} */ ([]),\n contextsBeforeAndAfter = [\n 'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n ],\n enableFixer = true,\n enforceJsdocLineStyle = 'multi',\n lineOrBlockStyle = 'both',\n } = context.options[0] ?? {};\n\n let reportingNonJsdoc = false;\n\n /**\n * @param {string} messageId\n * @param {import('estree').Comment|Token} comment\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').Rule.ReportFixer} fixer\n */\n const report = (messageId, comment, node, fixer) => {\n const loc = {\n end: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n start: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n };\n\n context.report({\n fix: enableFixer ? fixer : null,\n loc,\n messageId,\n node,\n });\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const getFixer = (node, comment, addComment, ctxts) => {\n return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n */ (\n getReducedASTNode(node, sourceCode)\n );\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n decorator\n );\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }[]}\n */ (ctxts).find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n }) || {};\n\n return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n };\n };\n\n /**\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {import('eslint').Rule.Node} node\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const reportings = (comment, node, addComment, ctxts) => {\n const fixer = getFixer(node, comment, addComment, ctxts);\n\n if (comment.type === 'Block') {\n if (lineOrBlockStyle === 'line') {\n return;\n }\n\n report('blockCommentsJsdocStyle', comment, node, fixer);\n return;\n }\n\n if (comment.type === 'Line') {\n if (lineOrBlockStyle === 'block') {\n return;\n }\n\n report('lineCommentsJsdocStyle', comment, node, fixer);\n }\n };\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkNonJsdoc = (_info, _handler, node) => {\n const comment = getNonJsdocComment(sourceCode, node, settings);\n\n if (\n !comment ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n reportingNonJsdoc = true;\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n return fixer.replaceText(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n insertion,\n );\n };\n\n reportings(comment, node, addComment, contexts);\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const checkNonJsdocAfter = (node, ctxts) => {\n const comment = getFollowingComment(sourceCode, node);\n\n if (\n !comment ||\n comment.value.startsWith('*') ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n return [\n fixer.remove(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n ), fixer.insertTextBefore(\n node.type === 'VariableDeclarator' ? node.parent : node,\n insertion,\n ),\n ];\n };\n\n reportings(comment, node, addComment, ctxts);\n };\n\n // Todo: add contexts to check after (and handle if want both before and after)\n return {\n ...getContextObject(\n enforcedContexts(context, true, settings),\n checkNonJsdoc,\n ),\n ...getContextObject(\n contextsAfter,\n (_info, _handler, node) => {\n checkNonJsdocAfter(node, contextsAfter);\n },\n ),\n ...getContextObject(\n contextsBeforeAndAfter,\n (_info, _handler, node) => {\n checkNonJsdoc({}, null, node);\n if (!reportingNonJsdoc) {\n checkNonJsdocAfter(node, contextsBeforeAndAfter);\n }\n },\n ),\n };\n },\n meta: {\n docs: {\n description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedPrefixes: {\n description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n contexts: {\n description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsAfter: {\n description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsBeforeAndAfter: {\n description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable fixing.',\n type: 'boolean',\n },\n enforceJsdocLineStyle: {\n description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.`,\n enum: [\n 'multi', 'single',\n ],\n type: 'string',\n },\n lineOrBlockStyle: {\n description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n enum: [\n 'block', 'line', 'both',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emptyTags.cjs","names":["
|
|
1
|
+
{"version":3,"file":"emptyTags.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/emptyTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'ignore',\n\n // jsdoc doesn't use but allow for TypeScript\n 'inheritDoc', 'inner', 'instance',\n 'internal',\n\n 'overload',\n\n 'override',\n 'readonly',\n]);\n\nconst emptyIfNotClosure = new Set([\n // Closure doesn't allow with this casing\n 'inheritdoc', 'package', 'private', 'protected', 'public',\n\n 'static',\n]);\n\nconst emptyIfClosure = new Set([\n 'interface',\n]);\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode === 'closure' && emptyIfClosure.has(tagName) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n\n for (const [\n key,\n tag,\n ] of emptyTags.entries()) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim() && (\n // Allow for JSDoc-block final asterisks\n key !== emptyTags.length - 1 || !(/^\\s*\\*+$/v).test(content)\n )) {\n const {\n tokens: {\n delimiter,\n end,\n postName,\n start,\n },\n } = tag.source[0];\n const fix = () => {\n // By time of call in fixer, `tag` will have `line` added\n utils.setTag(\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */ (tag),\n {\n delimiter,\n end,\n postName: end ? postName : '',\n start,\n },\n );\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/empty-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n 'jsdoc/empty-tags': ['error', {tags: ['event']}]\n}\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA8C;AAE9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAC/B,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB;AAE7D;AACA;AACA,QAAQ;AAER;AACA,YAAY,EAAE,OAAO,EAAE,UAAU,EACjC,UAAU,EAEV,UAAU,EAEV,UAAU,EACV,UAAU,CACX,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;AAChC;AACA,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAEzD,QAAQ,CACT,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAC7B,WAAW,CACZ,CAAC;AAAC,iCAEY,IAAAA,qBAAY,EAAC,CAAC;EAC3B,KAAK;EACL,QAAQ;EACR;AACF,CAAC,KAAK;EACJ,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,GAAG,EAAE;EACP,CAAC,KAAK;IACJ,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAClC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAC9C;IACF,CAAC,KAAK;MACJ,OAAO,GAAG,KAAK,OAAO;IACxB,CAAC,CAAC,IACF,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAC1D,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;EACjE,CAAC,CAAC;EAEF,KAAK,MAAM,CACT,GAAG,EACH,GAAG,CACJ,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI;IACvD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB;IACA,GAAG,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAE,WAAW,CAAE,IAAI,CAAC,OAAO,CAAC,CAC7D,EAAE;MACD,MAAM;QACJ,MAAM,EAAE;UACN,SAAS;UACT,GAAG;UACH,QAAQ;UACR;QACF;MACF,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;MACjB,MAAM,GAAG,GAAG,MAAM;QAChB;QACA,KAAK,CAAC,MAAM;QACV;AACV;AACA;AACA;AACA;QAAe,GAAG,EACR;UACE,SAAS;UACT,GAAG;UACH,QAAQ,EAAE,GAAG,GAAG,QAAQ,GAAG,EAAE;UAC7B;QACF,CACF,CAAC;MACH,CAAC;MAED,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;IACnE;EACF;AACF,CAAC,EAAE;EACD,aAAa,EAAE,IAAI;EACnB,YAAY,EAAE,IAAI;EAClB,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,2GAA2G;MACxH,GAAG,EAAE;IACP,CAAC;IACD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,IAAI,EAAE;UACJ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escapeInlineTags.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","settings","utils","mode","allowedInlineTags","enableFixer","fixType","options","description","getDescription","tagNames","indexes","unescapedInlineTagRegex","scopedPackageNameRegex","declarationReferenceInlineTags","Set","getInlineTagName","desc","atSignIndex","inlineTagStart","lastIndexOf","inlineTagEnd","indexOf","slice","match","shouldIgnoreMatch","offset","inlineTagName","has","test","escapeInlineTags","tagName","regex","RegExp","replaceAll","prefix","getUnescapedInlineTagName","lastIndex","exec","fullMatch","includes","index","normalizedDescription","startsWith","nextLineStartOffset","idx","descLine","split","entries","lineStartOffset","length","push","reportJSDoc","line","escapeInlineTag","setBlockDescription","info","seedTokens","descLines","map","newDesc","number","source","tokens","postDelimiter","trim","tag","tags","getTagDescription","some","setTagDescription","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","enum","module"],"sources":["../../src/rules/escapeInlineTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n if (mode !== 'typescript') {\n return;\n }\n\n const {\n allowedInlineTags = [],\n enableFixer = false,\n fixType = 'backslash',\n } = context.options[0] || {};\n\n const {\n description,\n } = utils.getDescription();\n\n /** @type {string[]} */\n const tagNames = [];\n\n /** @type {number[]} */\n const indexes = [];\n\n const unescapedInlineTagRegex = /(?:^|\\s)@(\\w+)/gv;\n\n const scopedPackageNameRegex = /^@[\\w.\\-]+\\/[\\w.\\-]+/v;\n\n const declarationReferenceInlineTags = new Set([\n 'inheritDoc',\n 'link',\n 'linkcode',\n 'linkplain',\n ]);\n\n /**\n * @param {string} desc\n * @param {number} atSignIndex\n * @returns {string}\n */\n const getInlineTagName = (desc, atSignIndex) => {\n const inlineTagStart = desc.lastIndexOf('{@', atSignIndex);\n\n if (inlineTagStart === -1) {\n return '';\n }\n\n const inlineTagEnd = desc.indexOf('}', inlineTagStart);\n\n if (inlineTagEnd === -1 || inlineTagEnd <= atSignIndex) {\n return '';\n }\n\n return desc.slice(inlineTagStart + 2).match(/^\\w+/v)?.[0] || '';\n };\n\n /**\n * @param {string} desc\n * @param {string} match\n * @param {number} offset\n * @returns {boolean}\n */\n const shouldIgnoreMatch = (desc, match, offset) => {\n const atSignIndex = offset + match.lastIndexOf('@');\n const inlineTagName = getInlineTagName(desc, atSignIndex);\n\n return declarationReferenceInlineTags.has(inlineTagName) &&\n scopedPackageNameRegex.test(desc.slice(atSignIndex));\n };\n\n /**\n * @param {string} tagName\n * @returns {[\n * RegExp,\n * (description: string) => string\n * ]}\n */\n const escapeInlineTags = (tagName) => {\n const regex = new RegExp(`(^|\\\\s)@${\n // No need to escape, as contains only safe characters\n tagName\n }`, 'gv');\n\n return [\n regex,\n /**\n * @param {string} desc\n */\n (desc) => {\n return desc.replaceAll(\n regex,\n (match, prefix, offset) => {\n if (shouldIgnoreMatch(desc, match, offset)) {\n return match;\n }\n\n return fixType === 'backticks' ?\n prefix + '`@' + tagName + '`' :\n prefix + '\\\\@' + tagName;\n },\n );\n },\n ];\n };\n\n /**\n * @param {string} desc\n * @returns {string}\n */\n const getUnescapedInlineTagName = (desc) => {\n unescapedInlineTagRegex.lastIndex = 0;\n\n let match;\n while ((match = unescapedInlineTagRegex.exec(desc)) !== null) {\n const [\n fullMatch,\n tagName,\n ] = match;\n\n if (\n allowedInlineTags.includes(tagName) ||\n shouldIgnoreMatch(desc, fullMatch, match.index)\n ) {\n continue;\n }\n\n return tagName;\n }\n\n return '';\n };\n\n const normalizedDescription = description.startsWith('\\n') ?\n description.slice(1) :\n description;\n\n let nextLineStartOffset = 0;\n for (const [\n idx,\n descLine,\n ] of normalizedDescription.split('\\n').entries()\n ) {\n const lineStartOffset = nextLineStartOffset;\n\n // +1 for the `\\n` removed by split.\n nextLineStartOffset += descLine.length + 1;\n\n descLine.replaceAll(unescapedInlineTagRegex, (match, tagName, offset) => {\n if (\n allowedInlineTags.includes(tagName) ||\n // Run ignore-detection against the full description text so that\n // multi-line inline tags (e.g. `{@link` on one line and\n // `@scope/pkg#Member}` on the next) are recognized as being inside an\n // inline tag rather than scanned per-line.\n shouldIgnoreMatch(\n normalizedDescription,\n match,\n lineStartOffset + offset,\n )\n ) {\n return match;\n }\n\n tagNames.push(tagName);\n indexes.push(idx);\n\n return match;\n });\n }\n\n for (const [\n idx,\n tagName,\n ] of tagNames.entries()) {\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line: indexes[idx] + 1,\n },\n enableFixer ?\n () => {\n // `tagName` and `fixType` are constant here, so compute the escaper\n // once rather than rebuilding the RegExp + closure for every line.\n const [\n ,\n escapeInlineTag,\n ] = escapeInlineTags(tagName);\n\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.map((desc) => {\n const newDesc = escapeInlineTag(desc);\n\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: newDesc,\n postDelimiter: newDesc.trim() ? ' ' : '',\n }),\n };\n });\n });\n } :\n null,\n );\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n /** @type {string} */\n let tagName = '';\n while (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n // eslint-disable-next-line no-loop-func -- Safe\n ).some((desc) => {\n tagName = getUnescapedInlineTagName(desc);\n\n return tagName;\n })) {\n const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) +\n tag.source[0].number;\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line,\n },\n enableFixer ? () => {} : null,\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports use of JSDoc tags in non-tag positions (in the default \"typescript\" mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedInlineTags: {\n description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `false`.',\n type: 'boolean',\n },\n fixType: {\n description: `How to escape the inline tag.\n\nMay be \"backticks\" to enclose tags in backticks (treating as code segments), or\n\"backslash\" to escape tags with a backslash, i.e., \\`\\\\@\\`\n\nDefaults to \"backslash\".`,\n enum: [\n 'backticks',\n 'backslash',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"escapeInlineTags.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/escapeInlineTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n if (mode !== 'typescript') {\n return;\n }\n\n const {\n allowedInlineTags = [],\n enableFixer = false,\n fixType = 'backslash',\n } = context.options[0] || {};\n\n const {\n description,\n } = utils.getDescription();\n\n /** @type {string[]} */\n const tagNames = [];\n\n /** @type {number[]} */\n const indexes = [];\n\n const unescapedInlineTagRegex = /(?:^|\\s)@(\\w+)/gv;\n\n const scopedPackageNameRegex = /^@[\\w.\\-]+\\/[\\w.\\-]+/v;\n\n const declarationReferenceInlineTags = new Set([\n 'inheritDoc',\n 'link',\n 'linkcode',\n 'linkplain',\n ]);\n\n /**\n * @param {string} desc\n * @param {number} atSignIndex\n * @returns {string}\n */\n const getInlineTagName = (desc, atSignIndex) => {\n const inlineTagStart = desc.lastIndexOf('{@', atSignIndex);\n\n if (inlineTagStart === -1) {\n return '';\n }\n\n const inlineTagEnd = desc.indexOf('}', inlineTagStart);\n\n if (inlineTagEnd === -1 || inlineTagEnd <= atSignIndex) {\n return '';\n }\n\n return desc.slice(inlineTagStart + 2).match(/^\\w+/v)?.[0] || '';\n };\n\n /**\n * @param {string} desc\n * @param {string} match\n * @param {number} offset\n * @returns {boolean}\n */\n const shouldIgnoreMatch = (desc, match, offset) => {\n const atSignIndex = offset + match.lastIndexOf('@');\n const inlineTagName = getInlineTagName(desc, atSignIndex);\n\n return declarationReferenceInlineTags.has(inlineTagName) &&\n scopedPackageNameRegex.test(desc.slice(atSignIndex));\n };\n\n /**\n * @param {string} tagName\n * @returns {[\n * RegExp,\n * (description: string) => string\n * ]}\n */\n const escapeInlineTags = (tagName) => {\n const regex = new RegExp(`(^|\\\\s)@${\n // No need to escape, as contains only safe characters\n tagName\n }`, 'gv');\n\n return [\n regex,\n /**\n * @param {string} desc\n */\n (desc) => {\n return desc.replaceAll(\n regex,\n (match, prefix, offset) => {\n if (shouldIgnoreMatch(desc, match, offset)) {\n return match;\n }\n\n return fixType === 'backticks' ?\n prefix + '`@' + tagName + '`' :\n prefix + '\\\\@' + tagName;\n },\n );\n },\n ];\n };\n\n /**\n * @param {string} desc\n * @returns {string}\n */\n const getUnescapedInlineTagName = (desc) => {\n unescapedInlineTagRegex.lastIndex = 0;\n\n let match;\n while ((match = unescapedInlineTagRegex.exec(desc)) !== null) {\n const [\n fullMatch,\n tagName,\n ] = match;\n\n if (\n allowedInlineTags.includes(tagName) ||\n shouldIgnoreMatch(desc, fullMatch, match.index)\n ) {\n continue;\n }\n\n return tagName;\n }\n\n return '';\n };\n\n const normalizedDescription = description.startsWith('\\n') ?\n description.slice(1) :\n description;\n\n let nextLineStartOffset = 0;\n for (const [\n idx,\n descLine,\n ] of normalizedDescription.split('\\n').entries()\n ) {\n const lineStartOffset = nextLineStartOffset;\n\n // +1 for the `\\n` removed by split.\n nextLineStartOffset += descLine.length + 1;\n\n descLine.replaceAll(unescapedInlineTagRegex, (match, tagName, offset) => {\n if (\n allowedInlineTags.includes(tagName) ||\n // Run ignore-detection against the full description text so that\n // multi-line inline tags (e.g. `{@link` on one line and\n // `@scope/pkg#Member}` on the next) are recognized as being inside an\n // inline tag rather than scanned per-line.\n shouldIgnoreMatch(\n normalizedDescription,\n match,\n lineStartOffset + offset,\n )\n ) {\n return match;\n }\n\n tagNames.push(tagName);\n indexes.push(idx);\n\n return match;\n });\n }\n\n for (const [\n idx,\n tagName,\n ] of tagNames.entries()) {\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line: indexes[idx] + 1,\n },\n enableFixer ?\n () => {\n // `tagName` and `fixType` are constant here, so compute the escaper\n // once rather than rebuilding the RegExp + closure for every line.\n const [\n ,\n escapeInlineTag,\n ] = escapeInlineTags(tagName);\n\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.map((desc) => {\n const newDesc = escapeInlineTag(desc);\n\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: newDesc,\n postDelimiter: newDesc.trim() ? ' ' : '',\n }),\n };\n });\n });\n } :\n null,\n );\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n /** @type {string} */\n let tagName = '';\n while (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n // eslint-disable-next-line no-loop-func -- Safe\n ).some((desc) => {\n tagName = getUnescapedInlineTagName(desc);\n\n return tagName;\n })) {\n const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) +\n tag.source[0].number;\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line,\n },\n enableFixer ? () => {} : null,\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports use of JSDoc tags in non-tag positions (in the default \"typescript\" mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedInlineTags: {\n description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `false`.',\n type: 'boolean',\n },\n fixType: {\n description: `How to escape the inline tag.\n\nMay be \"backticks\" to enclose tags in backticks (treating as code segments), or\n\"backslash\" to escape tags with a backslash, i.e., \\`\\\\@\\`\n\nDefaults to \"backslash\".`,\n enum: [\n 'backticks',\n 'backslash',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementsOnClasses.cjs","names":["
|
|
1
|
+
{"version":3,"file":"implementsOnClasses.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/implementsOnClasses.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n const iteratingFunction = utils.isIteratingFunctionOrVariable();\n\n if (iteratingFunction) {\n if (utils.hasATag([\n 'class',\n 'constructor',\n ]) ||\n utils.isConstructor()\n ) {\n return;\n }\n } else if (!utils.isVirtualFunction()) {\n return;\n }\n\n utils.forEachPreferredTag('implements', (tag) => {\n report('@implements used on a non-constructor function', null, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/implements-on-classes.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n description: `Set this to an array of strings representing the AST context (or an object with\n\\`context\\` and \\`comment\\` properties) where you wish the rule to be applied.\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want\nthe rule to apply to any JSDoc block throughout your files (as is necessary\nfor finding function blocks not attached to a function declaration or\nexpression, i.e., \\`@callback\\` or \\`@function\\` (or its aliases \\`@func\\` or\n\\`@method\\`) (including those associated with an \\`@interface\\`).\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA8C;AAAA,iCAE/B,IAAAA,qBAAY,EAAC,CAAC;EAC3B,MAAM;EACN;AACF,CAAC,KAAK;EACJ,MAAM,iBAAiB,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;EAE/D,IAAI,iBAAiB,EAAE;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,CAChB,OAAO,EACP,aAAa,CACd,CAAC,IACA,KAAK,CAAC,aAAa,CAAC,CAAC,EACrB;MACA;IACF;EACF,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE;IACrC;EACF;EAEA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAG,GAAG,IAAK;IAC/C,MAAM,CAAC,gDAAgD,EAAE,IAAI,EAAE,GAAG,CAAC;EACrE,CAAC,CAAC;AACJ,CAAC,EAAE;EACD,eAAe,EAAE,IAAI;EACrB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,2HAA2H;MACxI,GAAG,EAAE;IACP,CAAC;IACD,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,QAAQ,EAAE;UACR,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;UAClD,KAAK,EAAE;YACL,KAAK,EAAE,CACL;cACE,IAAI,EAAE;YACR,CAAC,EACD;cACE,oBAAoB,EAAE,KAAK;cAC3B,UAAU,EAAE;gBACV,OAAO,EAAE;kBACP,IAAI,EAAE;gBACR,CAAC;gBACD,OAAO,EAAE;kBACP,IAAI,EAAE;gBACR;cACF,CAAC;cACD,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importsAsDependencies.cjs","names":["
|
|
1
|
+
{"version":3,"file":"importsAsDependencies.cjs","names":["readFileSync","join","iterateJsdoc","tryParse","parse","traverse","isBuiltinModule"],"sources":["../../src/rules/importsAsDependencies.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport * as resolve from '@es-joy/resolve.exports';\nimport {\n readFileSync,\n} from 'node:fs';\nimport {\n isBuiltin as isBuiltinModule,\n} from 'node:module';\nimport {\n join,\n} from 'node:path';\n\n/**\n * @type {Set<string>|null}\n */\nlet deps;\n\nconst setDeps = function () {\n try {\n const pkg = JSON.parse(\n readFileSync(join(process.cwd(), './package.json'), 'utf8'),\n );\n deps = new Set([\n ...(pkg.dependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.dependencies) :\n []),\n ...(pkg.devDependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.devDependencies) :\n []),\n ]);\n /* c8 ignore next -- our package.json exists */\n } catch (error) {\n /* c8 ignore next -- our package.json exists */\n deps = null;\n /* c8 ignore next 4 -- our package.json exists */\n /* eslint-disable no-console -- Inform user */\n console.log(error);\n /* eslint-enable no-console -- Inform user */\n }\n};\n\nconst moduleCheck = new Map();\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n if (deps === undefined) {\n setDeps();\n }\n\n /* c8 ignore next 3 -- our package.json exists */\n if (deps === null) {\n return;\n }\n\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n let typeAst;\n try {\n typeAst = mode === 'permissive' ? tryParse(tag.type) : parse(tag.type, mode);\n } catch {\n continue;\n }\n\n // eslint-disable-next-line no-loop-func -- Safe\n traverse(typeAst, (nde) => {\n /* c8 ignore next 3 -- TS guard */\n if (deps === null) {\n return;\n }\n\n if (nde.type === 'JsdocTypeImport') {\n let mod = nde.element.value.replace(\n /^(@[^\\/]+\\/[^\\/]+|[^\\/]+).*$/v, '$1',\n );\n\n if ((/^[.\\/]/v).test(mod)) {\n return;\n }\n\n if (isBuiltinModule(mod)) {\n // mod = '@types/node';\n // moduleCheck.set(mod, !deps.has(mod));\n return;\n } else if (!moduleCheck.has(mod)) {\n let pkg;\n try {\n pkg = JSON.parse(\n readFileSync(join(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'),\n );\n } catch {\n // Ignore\n }\n\n if (!pkg || (!pkg.types && !pkg.typings && !resolve.types(pkg))) {\n mod = `@types/${mod}`;\n }\n\n moduleCheck.set(mod, !deps.has(mod));\n }\n\n if (moduleCheck.get(mod)) {\n utils.reportJSDoc(\n 'import points to package which is not found in dependencies',\n tag,\n );\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies`',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/imports-as-dependencies.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|