eslint-plugin-jsdoc 60.7.1 → 60.8.0
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/cjs/iterateJsdoc.d.ts +6 -6
- package/dist/cjs/jsdocUtils.d.ts +2 -2
- package/dist/getDefaultTagStructureForMode.cjs +5 -9
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/iterateJsdoc.cjs +8 -8
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/iterateJsdoc.d.ts +6 -6
- package/dist/jsdocUtils.cjs +10 -9
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/jsdocUtils.d.ts +2 -2
- package/dist/rules/checkLineAlignment.cjs +1 -1
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +2 -2
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/preferImportTag.cjs +2 -2
- package/dist/rules/preferImportTag.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +11 -9
- package/dist/rules/validTypes.cjs.map +1 -1
- package/package.json +7 -7
- package/src/getDefaultTagStructureForMode.js +7 -8
- package/src/iterateJsdoc.js +9 -9
- package/src/jsdocUtils.js +13 -8
- package/src/rules/checkLineAlignment.js +1 -1
- package/src/rules/noUndefinedTypes.js +2 -2
- package/src/rules/preferImportTag.js +2 -2
- package/src/rules/validTypes.js +13 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkLineAlignment.cjs","names":["_alignTransform","_interopRequireDefault","require","_iterateJsdoc","_commentParser","e","__esModule","default","flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","postHyphenSpacing","postHyphen","exactHyphenSpacing","RegExp","hasNoHyphen","test","description","hasExactHyphenSpacing","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","hyphenSpacing","replace","setTag","reportJSDoc","checkAlignment","disableWrapIndent","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","wrapIndent","transform","alignTransform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","_default","exports","iterateJsdoc","context","applicableTags","options","includes","foundTags","getPresentTags","type","name","postDelimiter","line","number","charAt","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","postName","postTag","postType","items","module"],"sources":["../../src/rules/checkLineAlignment.js"],"sourcesContent":["import alignTransform from '../alignTransform.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\nimport {\n transforms,\n} from 'comment-parser';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\n/**\n * @typedef {{\n * postDelimiter: import('../iterateJsdoc.js').Integer,\n * postHyphen: import('../iterateJsdoc.js').Integer,\n * postName: import('../iterateJsdoc.js').Integer,\n * postTag: import('../iterateJsdoc.js').Integer,\n * postType: import('../iterateJsdoc.js').Integer,\n * }} CustomSpacings\n */\n\n/**\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {CustomSpacings} customSpacings\n */\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n\n /**\n * @typedef {\"tag\"|\"type\"|\"name\"|\"description\"} ContentProp\n */\n\n /** @type {(\"postDelimiter\"|\"postTag\"|\"postType\"|\"postName\")[]} */\n let spacerProps;\n /** @type {ContentProp[]} */\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n /**\n * @param {import('../iterateJsdoc.js').Integer} idx\n * @param {(notRet: boolean, contentProp: ContentProp) => void} [callbck]\n */\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const exactHyphenSpacing = new RegExp(`^\\\\s*-\\\\s{${postHyphenSpacing},${postHyphenSpacing}}(?!\\\\s)`, 'v');\n const hasNoHyphen = !(/^\\s*-(?!$)(?=\\s)/v).test(tokens.description);\n const hasExactHyphenSpacing = exactHyphenSpacing.test(\n tokens.description,\n );\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n }) && (hasNoHyphen || hasExactHyphenSpacing);\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n if (!hasExactHyphenSpacing) {\n const hyphenSpacing = /^\\s*-\\s+/v;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\n/**\n * @param {object} cfg\n * @param {CustomSpacings} cfg.customSpacings\n * @param {string} cfg.indent\n * @param {import('comment-parser').Block} cfg.jsdoc\n * @param {import('eslint').Rule.Node & {\n * range: [number, number]\n * }} cfg.jsdocNode\n * @param {boolean} cfg.preserveMainDescriptionPostDelimiter\n * @param {import('../iterateJsdoc.js').Report} cfg.report\n * @param {string[]} cfg.tags\n * @param {import('../iterateJsdoc.js').Utils} cfg.utils\n * @param {string} cfg.wrapIndent\n * @param {boolean} cfg.disableWrapIndent\n * @returns {void}\n */\nconst checkAlignment = ({\n customSpacings,\n disableWrapIndent,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n wrapIndent,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n disableWrapIndent,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n wrapIndent,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' +\n /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number], value: string\n * }}\n */ (jsdocNode).value + '*/';\n\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n customSpacings,\n disableWrapIndent = false,\n preserveMainDescriptionPostDelimiter,\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template',\n ],\n wrapIndent = '',\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!(\n /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number], value: string\n * }}\n */\n (jsdocNode).value.includes('\\n')\n )) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n disableWrapIndent,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n wrapIndent,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n if (context.options[0] !== 'any') {\n for (const tag of foundTags) {\n checkNotAlignedPerTag(\n utils,\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */\n (tag),\n customSpacings,\n );\n }\n }\n\n for (const tag of foundTags) {\n if (tag.source.length > 1) {\n let idx = 0;\n for (const {\n tokens,\n // Avoid the tag line\n } of tag.source.slice(1)) {\n idx++;\n\n if (\n !tokens.description ||\n // Avoid first lines after multiline type\n tokens.type ||\n tokens.name\n ) {\n continue;\n }\n\n // Don't include a single separating space/tab\n if (!disableWrapIndent && tokens.postDelimiter.slice(1) !== wrapIndent) {\n utils.reportJSDoc('Expected wrap indent', {\n line: tag.source[0].number + idx,\n }, () => {\n tokens.postDelimiter = tokens.postDelimiter.charAt(0) + wrapIndent;\n });\n return;\n }\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-line-alignment.md#repos-sticky-header',\n },\n fixable: 'whitespace',\n schema: [\n {\n description: `If the string value is\n\\`\"always\"\\` then a problem is raised when the lines are not aligned.\nIf it is \\`\"never\"\\` then a problem should be raised when there is more than\none space between each line's parts. If it is \\`\"any\"\\`, no alignment is made.\nDefaults to \\`\"never\"\\`.\n\nNote that in addition to alignment, the \"never\" and \"always\" options will both\nensure that at least one space is present after the asterisk delimiter.`,\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n description: `An object with any of the following spacing keys set to an integer.\nIf a spacing is not defined, it defaults to one.`,\n properties: {\n postDelimiter: {\n description: 'Affects spacing after the asterisk (e.g., `* @param`)',\n type: 'integer',\n },\n postHyphen: {\n description: 'Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`)',\n type: 'integer',\n },\n postName: {\n description: 'Affects spacing after the name (e.g., `* @param {someType} name `)',\n type: 'integer',\n },\n postTag: {\n description: 'Affects spacing after the tag (e.g., `* @param `)',\n type: 'integer',\n },\n postType: {\n description: 'Affects spacing after the type (e.g., `* @param {someType} `)',\n type: 'integer',\n },\n },\n type: 'object',\n },\n disableWrapIndent: {\n description: 'Disables `wrapIndent`; existing wrap indentation is preserved without changes.',\n type: 'boolean',\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n description: `A boolean to determine whether to preserve the post-delimiter spacing of the\nmain description. If \\`false\\` or unset, will be set to a single space.`,\n type: 'boolean',\n },\n tags: {\n description: `Use this to change the tags which are sought for alignment changes. Defaults to an array of\n\\`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']\\`.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n wrapIndent: {\n description: `The indent that will be applied for tag text after the first line.\nDefault to the empty string (no indent).`,\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"checkLineAlignment.cjs","names":["_alignTransform","_interopRequireDefault","require","_iterateJsdoc","_commentParser","e","__esModule","default","flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNameOrNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","postHyphenSpacing","postHyphen","exactHyphenSpacing","RegExp","hasNoHyphen","test","description","hasExactHyphenSpacing","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","hyphenSpacing","replace","setTag","reportJSDoc","checkAlignment","disableWrapIndent","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","wrapIndent","transform","alignTransform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","_default","exports","iterateJsdoc","context","applicableTags","options","includes","foundTags","getPresentTags","type","name","postDelimiter","line","number","charAt","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","postName","postTag","postType","items","module"],"sources":["../../src/rules/checkLineAlignment.js"],"sourcesContent":["import alignTransform from '../alignTransform.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\nimport {\n transforms,\n} from 'comment-parser';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\n/**\n * @typedef {{\n * postDelimiter: import('../iterateJsdoc.js').Integer,\n * postHyphen: import('../iterateJsdoc.js').Integer,\n * postName: import('../iterateJsdoc.js').Integer,\n * postTag: import('../iterateJsdoc.js').Integer,\n * postType: import('../iterateJsdoc.js').Integer,\n * }} CustomSpacings\n */\n\n/**\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {CustomSpacings} customSpacings\n */\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n\n /**\n * @typedef {\"tag\"|\"type\"|\"name\"|\"description\"} ContentProp\n */\n\n /** @type {(\"postDelimiter\"|\"postTag\"|\"postType\"|\"postName\")[]} */\n let spacerProps;\n /** @type {ContentProp[]} */\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNameOrNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n /**\n * @param {import('../iterateJsdoc.js').Integer} idx\n * @param {(notRet: boolean, contentProp: ContentProp) => void} [callbck]\n */\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const exactHyphenSpacing = new RegExp(`^\\\\s*-\\\\s{${postHyphenSpacing},${postHyphenSpacing}}(?!\\\\s)`, 'v');\n const hasNoHyphen = !(/^\\s*-(?!$)(?=\\s)/v).test(tokens.description);\n const hasExactHyphenSpacing = exactHyphenSpacing.test(\n tokens.description,\n );\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n }) && (hasNoHyphen || hasExactHyphenSpacing);\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n if (!hasExactHyphenSpacing) {\n const hyphenSpacing = /^\\s*-\\s+/v;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\n/**\n * @param {object} cfg\n * @param {CustomSpacings} cfg.customSpacings\n * @param {string} cfg.indent\n * @param {import('comment-parser').Block} cfg.jsdoc\n * @param {import('eslint').Rule.Node & {\n * range: [number, number]\n * }} cfg.jsdocNode\n * @param {boolean} cfg.preserveMainDescriptionPostDelimiter\n * @param {import('../iterateJsdoc.js').Report} cfg.report\n * @param {string[]} cfg.tags\n * @param {import('../iterateJsdoc.js').Utils} cfg.utils\n * @param {string} cfg.wrapIndent\n * @param {boolean} cfg.disableWrapIndent\n * @returns {void}\n */\nconst checkAlignment = ({\n customSpacings,\n disableWrapIndent,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n wrapIndent,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n disableWrapIndent,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n wrapIndent,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' +\n /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number], value: string\n * }}\n */ (jsdocNode).value + '*/';\n\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n customSpacings,\n disableWrapIndent = false,\n preserveMainDescriptionPostDelimiter,\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template',\n ],\n wrapIndent = '',\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!(\n /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number], value: string\n * }}\n */\n (jsdocNode).value.includes('\\n')\n )) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n disableWrapIndent,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n wrapIndent,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n if (context.options[0] !== 'any') {\n for (const tag of foundTags) {\n checkNotAlignedPerTag(\n utils,\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */\n (tag),\n customSpacings,\n );\n }\n }\n\n for (const tag of foundTags) {\n if (tag.source.length > 1) {\n let idx = 0;\n for (const {\n tokens,\n // Avoid the tag line\n } of tag.source.slice(1)) {\n idx++;\n\n if (\n !tokens.description ||\n // Avoid first lines after multiline type\n tokens.type ||\n tokens.name\n ) {\n continue;\n }\n\n // Don't include a single separating space/tab\n if (!disableWrapIndent && tokens.postDelimiter.slice(1) !== wrapIndent) {\n utils.reportJSDoc('Expected wrap indent', {\n line: tag.source[0].number + idx,\n }, () => {\n tokens.postDelimiter = tokens.postDelimiter.charAt(0) + wrapIndent;\n });\n return;\n }\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-line-alignment.md#repos-sticky-header',\n },\n fixable: 'whitespace',\n schema: [\n {\n description: `If the string value is\n\\`\"always\"\\` then a problem is raised when the lines are not aligned.\nIf it is \\`\"never\"\\` then a problem should be raised when there is more than\none space between each line's parts. If it is \\`\"any\"\\`, no alignment is made.\nDefaults to \\`\"never\"\\`.\n\nNote that in addition to alignment, the \"never\" and \"always\" options will both\nensure that at least one space is present after the asterisk delimiter.`,\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n description: `An object with any of the following spacing keys set to an integer.\nIf a spacing is not defined, it defaults to one.`,\n properties: {\n postDelimiter: {\n description: 'Affects spacing after the asterisk (e.g., `* @param`)',\n type: 'integer',\n },\n postHyphen: {\n description: 'Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`)',\n type: 'integer',\n },\n postName: {\n description: 'Affects spacing after the name (e.g., `* @param {someType} name `)',\n type: 'integer',\n },\n postTag: {\n description: 'Affects spacing after the tag (e.g., `* @param `)',\n type: 'integer',\n },\n postType: {\n description: 'Affects spacing after the type (e.g., `* @param {someType} `)',\n type: 'integer',\n },\n },\n type: 'object',\n },\n disableWrapIndent: {\n description: 'Disables `wrapIndent`; existing wrap indentation is preserved without changes.',\n type: 'boolean',\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n description: `A boolean to determine whether to preserve the post-delimiter spacing of the\nmain description. If \\`false\\` or unset, will be set to a single space.`,\n type: 'boolean',\n },\n tags: {\n description: `Use this to change the tags which are sought for alignment changes. Defaults to an array of\n\\`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']\\`.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n wrapIndent: {\n description: `The indent that will be applied for tag text after the first line.\nDefault to the empty string (no indent).`,\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -91,7 +91,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
91
91
|
return doc.tags.filter(({
|
|
92
92
|
tag
|
|
93
93
|
}) => {
|
|
94
|
-
return utils.
|
|
94
|
+
return utils.isNameOrNamepathDefiningTag(tag) && !['arg', 'argument', 'param', 'prop', 'property'].includes(tag);
|
|
95
95
|
});
|
|
96
96
|
});
|
|
97
97
|
const typedefDeclarations = typedefs.map(tag => {
|
|
@@ -407,7 +407,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
407
407
|
const tags = doc.tags.filter(({
|
|
408
408
|
tag
|
|
409
409
|
}) => {
|
|
410
|
-
return utils.
|
|
410
|
+
return utils.isNameOrNamepathDefiningTag(tag);
|
|
411
411
|
});
|
|
412
412
|
if (!tags.length) {
|
|
413
413
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","init","callee","id","methodOrProp","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","Array","isArray","markVariableAsUsed","exit","loc","typedef","message","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\n\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((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 const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdc = parseComment(commentNode, '');\n\n return jsdc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\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":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNameOrNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","init","callee","id","methodOrProp","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","Array","isArray","markVariableAsUsed","exit","loc","typedef","message","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\n\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((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 const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdc = parseComment(commentNode, '');\n\n return jsdc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -34,7 +34,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
34
34
|
return doc.tags.filter(({
|
|
35
35
|
tag
|
|
36
36
|
}) => {
|
|
37
|
-
return utils.
|
|
37
|
+
return utils.isNameOrNamepathDefiningTag(tag);
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
40
|
const imports = comments.flatMap(doc => {
|
|
@@ -291,7 +291,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
291
291
|
for (const tag of jsdoc.tags) {
|
|
292
292
|
const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);
|
|
293
293
|
const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);
|
|
294
|
-
if (hasTypePosition && (!exemptTypedefs || !utils.
|
|
294
|
+
if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) {
|
|
295
295
|
iterateInlineImports(tag);
|
|
296
296
|
}
|
|
297
297
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferImportTag.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","sourceCode","utils","mode","enableFixer","exemptTypedefs","outputType","options","allComments","getAllComments","comments","filter","comment","test","value","map","commentNode","commentParserToESTree","parseComment","typedefs","flatMap","doc","tags","tag","isNamepathDefiningTag","imports","delimiter","iterateInlineImports","potentialType","type","parsedType","tryParseType","parseType","traverse","nde","parentNode","element","currentNode","pathSegments","nodes","extraPathSegments","quotes","propertyOrBrackets","unshift","right","stringify","pathType","undefined","meta","quote","getFixer","matchingName","extrPathSegments","node","at","keys","key","length","newNode","shift","left","nameNode","src","source","tokens","unusedPathSegments","findMatchingTypedef","pthSegments","find","typedef","typedefNode","namepathMatch","pathSegment","push","matchingTypedef","reportJSDoc","name","slice","findMatchingImport","imprt","parsedImport","parseImportsExports","estreeToString","replace","trim","namedImportsModuleSpecifier","namedImports","values","namedImportNames","names","namespaceImports","namespaceImportsDefault","namespaceImportsNamespace","namespace","namespaceImportsModuleSpecifier","lastPathSegment","includes","matchingImport","lastPthSegment","fixer","programNode","ast","commentNodes","getCommentsBefore","insertTextBefore","lstPathSegment","mightHaveTypePosition","tagMightHaveTypePosition","hasTypePosition","Boolean","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/preferImportTag.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n commentParserToESTree,\n estreeToString,\n // getJSDocComment,\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const {\n enableFixer = true,\n exemptTypedefs = true,\n outputType = 'namespaced-import',\n } = context.options[0] || {};\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return commentParserToESTree(\n parseComment(commentNode, ''), mode === 'permissive' ? 'typescript' : mode,\n );\n });\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n });\n\n const imports = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).map((tag) => {\n // Causes problems with stringification otherwise\n tag.delimiter = '';\n return tag;\n });\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const iterateInlineImports = (tag) => {\n const potentialType = tag.type;\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, parentNode) => {\n // @ts-expect-error Adding our own property for use below\n nde.parentNode = parentNode;\n });\n\n traverse(parsedType, (nde) => {\n const {\n element,\n type,\n } = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */ (nde);\n if (type !== 'JsdocTypeImport') {\n return;\n }\n\n let currentNode = nde;\n\n /** @type {string[]} */\n const pathSegments = [];\n\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */\n const nodes = [];\n\n /** @type {string[]} */\n const extraPathSegments = [];\n\n /** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */\n const quotes = [];\n\n const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */ ([]);\n\n // @ts-expect-error Referencing our own property added above\n while (currentNode && currentNode.parentNode) {\n // @ts-expect-error Referencing our own property added above\n currentNode = currentNode.parentNode;\n /* c8 ignore next 3 -- Guard */\n if (currentNode.type !== 'JsdocTypeNamePath') {\n break;\n }\n\n pathSegments.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n stringify(currentNode.right.right) :\n currentNode.right.value,\n );\n nodes.unshift(currentNode);\n propertyOrBrackets.unshift(currentNode.pathType);\n quotes.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n undefined :\n currentNode.right.meta.quote,\n );\n }\n\n /**\n * @param {string} matchingName\n * @param {string[]} extrPathSegments\n */\n const getFixer = (matchingName, extrPathSegments) => {\n return () => {\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */\n let node = nodes.at(0);\n if (!node) {\n // Not really a NamePathResult, but will be converted later anyways\n node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (nde)\n );\n }\n\n const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */ (\n Object.keys(node)\n );\n\n for (const key of keys) {\n delete node[key];\n }\n\n if (extrPathSegments.length) {\n let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (node)\n );\n while (extrPathSegments.length && newNode) {\n newNode.type = 'JsdocTypeNamePath';\n newNode.right = {\n meta: {\n quote: quotes.shift(),\n },\n type: 'JsdocTypeProperty',\n value: /** @type {string} */ (extrPathSegments.shift()),\n };\n\n newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */ (\n propertyOrBrackets.shift()\n );\n // @ts-expect-error Temporary\n newNode.left = {};\n newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n newNode.left\n );\n }\n\n const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (newNode)\n );\n nameNode.type = 'JsdocTypeName';\n nameNode.value = matchingName;\n } else {\n const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (node)\n );\n newNode.type = 'JsdocTypeName';\n newNode.value = matchingName;\n }\n\n for (const src of tag.source) {\n if (src.tokens.type) {\n src.tokens.type = `{${stringify(parsedType)}}`;\n break;\n }\n }\n };\n };\n\n /** @type {string[]} */\n let unusedPathSegments = [];\n\n const findMatchingTypedef = () => {\n // Don't want typedefs to find themselves\n if (!exemptTypedefs) {\n return undefined;\n }\n\n const pthSegments = [\n ...pathSegments,\n ];\n return typedefs.find((typedef) => {\n let typedefNode = typedef.parsedType;\n let namepathMatch;\n while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') {\n const pathSegment = pthSegments.shift();\n if (!pathSegment) {\n namepathMatch = false;\n break;\n }\n\n if (\n (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' &&\n stringify(typedefNode.right.right) !== pathSegment) ||\n (typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' &&\n typedefNode.right.value !== pathSegment)\n ) {\n if (namepathMatch === true) {\n // It stopped matching, so stop\n break;\n }\n\n extraPathSegments.push(pathSegment);\n namepathMatch = false;\n continue;\n }\n\n namepathMatch = true;\n\n unusedPathSegments = pthSegments;\n\n typedefNode = typedefNode.left;\n }\n\n return namepathMatch &&\n // `import('eslint')` matches\n typedefNode &&\n typedefNode.type === 'JsdocTypeImport' &&\n typedefNode.element.value === element.value;\n });\n };\n\n // Check @typedef's first as should be longest match, allowing\n // for shorter abbreviations\n const matchingTypedef = findMatchingTypedef();\n if (matchingTypedef) {\n utils.reportJSDoc(\n 'Inline `import()` found; using `@typedef`',\n tag,\n enableFixer ? getFixer(matchingTypedef.name, [\n ...extraPathSegments,\n ...unusedPathSegments.slice(-1),\n ...unusedPathSegments.slice(0, -1),\n ]) : null,\n );\n return;\n }\n\n const findMatchingImport = () => {\n for (const imprt of imports) {\n const parsedImport = parseImportsExports(\n estreeToString(imprt).replace(/^\\s*@/v, '').trim(),\n );\n\n const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0];\n\n const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0];\n const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? [];\n\n const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0];\n\n const namespaceImportsDefault = namespaceImports && namespaceImports.default;\n const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace;\n const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0];\n\n const lastPathSegment = pathSegments.at(-1);\n\n if (\n (namespaceImportsDefault &&\n namespaceImportsModuleSpecifier === element.value) ||\n (element.value === namedImportsModuleSpecifier && (\n (lastPathSegment && namedImportNames.includes(lastPathSegment)) ||\n lastPathSegment === 'default'\n )) ||\n (namespaceImportsNamespace &&\n namespaceImportsModuleSpecifier === element.value)\n ) {\n return {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImports,\n namespaceImportsDefault,\n namespaceImportsModuleSpecifier,\n namespaceImportsNamespace,\n };\n }\n }\n\n return undefined;\n };\n\n const matchingImport = findMatchingImport();\n if (matchingImport) {\n const {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImportsNamespace,\n } = matchingImport;\n if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namedImports.default, []) : null,\n );\n return;\n }\n\n const lastPthSegment = pathSegments.at(-1);\n if (lastPthSegment && namedImportNames.includes(lastPthSegment)) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null,\n );\n return;\n }\n\n if (namespaceImportsNamespace) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namespaceImportsNamespace, [\n ...pathSegments,\n ]) : null,\n );\n return;\n }\n }\n\n if (!pathSegments.length) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n return fixer.insertTextBefore(\n // @ts-expect-error Ok\n commentNodes[0] ?? programNode,\n `/** @import * as ${element.value} from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }`,\n );\n } : null,\n );\n return;\n }\n\n const lstPathSegment = pathSegments.at(-1);\n if (lstPathSegment && lstPathSegment === 'default') {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n\n return fixer.insertTextBefore(\n // @ts-expect-error Ok\n commentNodes[0] ?? programNode,\n `/** @import ${element.value} from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }`,\n );\n } : null,\n );\n return;\n }\n\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n if (outputType === 'namespaced-import') {\n getFixer(element.value, [\n ...pathSegments,\n ])();\n } else {\n getFixer(\n /** @type {string} */ (pathSegments.at(-1)),\n pathSegments.slice(0, -1),\n )();\n }\n\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n return fixer.insertTextBefore(\n // @ts-expect-error Ok\n commentNodes[0] ?? programNode,\n outputType === 'namespaced-import' ?\n `/** @import * as ${element.value} from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }` :\n `/** @import { ${pathSegments.at(-1)} } from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }`,\n );\n } : null,\n );\n });\n };\n\n for (const tag of jsdoc.tags) {\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition && (!exemptTypedefs || !utils.isNamepathDefiningTag(tag.tag))) {\n iterateInlineImports(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefer `@import` tags to inline `import()` statements.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether or not to enable the fixer to add `@import` tags.',\n type: 'boolean',\n },\n exemptTypedefs: {\n description: 'Whether to allow `import()` statements within `@typedef`',\n type: 'boolean',\n },\n\n // We might add `typedef` and `typedef-local-only`, but also raises\n // question of how deep the generated typedef should be\n outputType: {\n description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found',\n enum: [\n 'named-import',\n 'namespaced-import',\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":"preferImportTag.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","sourceCode","utils","mode","enableFixer","exemptTypedefs","outputType","options","allComments","getAllComments","comments","filter","comment","test","value","map","commentNode","commentParserToESTree","parseComment","typedefs","flatMap","doc","tags","tag","isNameOrNamepathDefiningTag","imports","delimiter","iterateInlineImports","potentialType","type","parsedType","tryParseType","parseType","traverse","nde","parentNode","element","currentNode","pathSegments","nodes","extraPathSegments","quotes","propertyOrBrackets","unshift","right","stringify","pathType","undefined","meta","quote","getFixer","matchingName","extrPathSegments","node","at","keys","key","length","newNode","shift","left","nameNode","src","source","tokens","unusedPathSegments","findMatchingTypedef","pthSegments","find","typedef","typedefNode","namepathMatch","pathSegment","push","matchingTypedef","reportJSDoc","name","slice","findMatchingImport","imprt","parsedImport","parseImportsExports","estreeToString","replace","trim","namedImportsModuleSpecifier","namedImports","values","namedImportNames","names","namespaceImports","namespaceImportsDefault","namespaceImportsNamespace","namespace","namespaceImportsModuleSpecifier","lastPathSegment","includes","matchingImport","lastPthSegment","fixer","programNode","ast","commentNodes","getCommentsBefore","insertTextBefore","lstPathSegment","mightHaveTypePosition","tagMightHaveTypePosition","hasTypePosition","Boolean","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/preferImportTag.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n commentParserToESTree,\n estreeToString,\n // getJSDocComment,\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const {\n enableFixer = true,\n exemptTypedefs = true,\n outputType = 'namespaced-import',\n } = context.options[0] || {};\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return commentParserToESTree(\n parseComment(commentNode, ''), mode === 'permissive' ? 'typescript' : mode,\n );\n });\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n });\n\n const imports = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).map((tag) => {\n // Causes problems with stringification otherwise\n tag.delimiter = '';\n return tag;\n });\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const iterateInlineImports = (tag) => {\n const potentialType = tag.type;\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, parentNode) => {\n // @ts-expect-error Adding our own property for use below\n nde.parentNode = parentNode;\n });\n\n traverse(parsedType, (nde) => {\n const {\n element,\n type,\n } = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */ (nde);\n if (type !== 'JsdocTypeImport') {\n return;\n }\n\n let currentNode = nde;\n\n /** @type {string[]} */\n const pathSegments = [];\n\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */\n const nodes = [];\n\n /** @type {string[]} */\n const extraPathSegments = [];\n\n /** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */\n const quotes = [];\n\n const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */ ([]);\n\n // @ts-expect-error Referencing our own property added above\n while (currentNode && currentNode.parentNode) {\n // @ts-expect-error Referencing our own property added above\n currentNode = currentNode.parentNode;\n /* c8 ignore next 3 -- Guard */\n if (currentNode.type !== 'JsdocTypeNamePath') {\n break;\n }\n\n pathSegments.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n stringify(currentNode.right.right) :\n currentNode.right.value,\n );\n nodes.unshift(currentNode);\n propertyOrBrackets.unshift(currentNode.pathType);\n quotes.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n undefined :\n currentNode.right.meta.quote,\n );\n }\n\n /**\n * @param {string} matchingName\n * @param {string[]} extrPathSegments\n */\n const getFixer = (matchingName, extrPathSegments) => {\n return () => {\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */\n let node = nodes.at(0);\n if (!node) {\n // Not really a NamePathResult, but will be converted later anyways\n node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (nde)\n );\n }\n\n const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */ (\n Object.keys(node)\n );\n\n for (const key of keys) {\n delete node[key];\n }\n\n if (extrPathSegments.length) {\n let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (node)\n );\n while (extrPathSegments.length && newNode) {\n newNode.type = 'JsdocTypeNamePath';\n newNode.right = {\n meta: {\n quote: quotes.shift(),\n },\n type: 'JsdocTypeProperty',\n value: /** @type {string} */ (extrPathSegments.shift()),\n };\n\n newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */ (\n propertyOrBrackets.shift()\n );\n // @ts-expect-error Temporary\n newNode.left = {};\n newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n newNode.left\n );\n }\n\n const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (newNode)\n );\n nameNode.type = 'JsdocTypeName';\n nameNode.value = matchingName;\n } else {\n const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (node)\n );\n newNode.type = 'JsdocTypeName';\n newNode.value = matchingName;\n }\n\n for (const src of tag.source) {\n if (src.tokens.type) {\n src.tokens.type = `{${stringify(parsedType)}}`;\n break;\n }\n }\n };\n };\n\n /** @type {string[]} */\n let unusedPathSegments = [];\n\n const findMatchingTypedef = () => {\n // Don't want typedefs to find themselves\n if (!exemptTypedefs) {\n return undefined;\n }\n\n const pthSegments = [\n ...pathSegments,\n ];\n return typedefs.find((typedef) => {\n let typedefNode = typedef.parsedType;\n let namepathMatch;\n while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') {\n const pathSegment = pthSegments.shift();\n if (!pathSegment) {\n namepathMatch = false;\n break;\n }\n\n if (\n (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' &&\n stringify(typedefNode.right.right) !== pathSegment) ||\n (typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' &&\n typedefNode.right.value !== pathSegment)\n ) {\n if (namepathMatch === true) {\n // It stopped matching, so stop\n break;\n }\n\n extraPathSegments.push(pathSegment);\n namepathMatch = false;\n continue;\n }\n\n namepathMatch = true;\n\n unusedPathSegments = pthSegments;\n\n typedefNode = typedefNode.left;\n }\n\n return namepathMatch &&\n // `import('eslint')` matches\n typedefNode &&\n typedefNode.type === 'JsdocTypeImport' &&\n typedefNode.element.value === element.value;\n });\n };\n\n // Check @typedef's first as should be longest match, allowing\n // for shorter abbreviations\n const matchingTypedef = findMatchingTypedef();\n if (matchingTypedef) {\n utils.reportJSDoc(\n 'Inline `import()` found; using `@typedef`',\n tag,\n enableFixer ? getFixer(matchingTypedef.name, [\n ...extraPathSegments,\n ...unusedPathSegments.slice(-1),\n ...unusedPathSegments.slice(0, -1),\n ]) : null,\n );\n return;\n }\n\n const findMatchingImport = () => {\n for (const imprt of imports) {\n const parsedImport = parseImportsExports(\n estreeToString(imprt).replace(/^\\s*@/v, '').trim(),\n );\n\n const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0];\n\n const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0];\n const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? [];\n\n const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0];\n\n const namespaceImportsDefault = namespaceImports && namespaceImports.default;\n const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace;\n const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0];\n\n const lastPathSegment = pathSegments.at(-1);\n\n if (\n (namespaceImportsDefault &&\n namespaceImportsModuleSpecifier === element.value) ||\n (element.value === namedImportsModuleSpecifier && (\n (lastPathSegment && namedImportNames.includes(lastPathSegment)) ||\n lastPathSegment === 'default'\n )) ||\n (namespaceImportsNamespace &&\n namespaceImportsModuleSpecifier === element.value)\n ) {\n return {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImports,\n namespaceImportsDefault,\n namespaceImportsModuleSpecifier,\n namespaceImportsNamespace,\n };\n }\n }\n\n return undefined;\n };\n\n const matchingImport = findMatchingImport();\n if (matchingImport) {\n const {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImportsNamespace,\n } = matchingImport;\n if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namedImports.default, []) : null,\n );\n return;\n }\n\n const lastPthSegment = pathSegments.at(-1);\n if (lastPthSegment && namedImportNames.includes(lastPthSegment)) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null,\n );\n return;\n }\n\n if (namespaceImportsNamespace) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namespaceImportsNamespace, [\n ...pathSegments,\n ]) : null,\n );\n return;\n }\n }\n\n if (!pathSegments.length) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n return fixer.insertTextBefore(\n // @ts-expect-error Ok\n commentNodes[0] ?? programNode,\n `/** @import * as ${element.value} from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }`,\n );\n } : null,\n );\n return;\n }\n\n const lstPathSegment = pathSegments.at(-1);\n if (lstPathSegment && lstPathSegment === 'default') {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n\n return fixer.insertTextBefore(\n // @ts-expect-error Ok\n commentNodes[0] ?? programNode,\n `/** @import ${element.value} from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }`,\n );\n } : null,\n );\n return;\n }\n\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n if (outputType === 'namespaced-import') {\n getFixer(element.value, [\n ...pathSegments,\n ])();\n } else {\n getFixer(\n /** @type {string} */ (pathSegments.at(-1)),\n pathSegments.slice(0, -1),\n )();\n }\n\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n return fixer.insertTextBefore(\n // @ts-expect-error Ok\n commentNodes[0] ?? programNode,\n outputType === 'namespaced-import' ?\n `/** @import * as ${element.value} from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }` :\n `/** @import { ${pathSegments.at(-1)} } from '${element.value}'; */${\n commentNodes[0] ? '\\n' + indent : ''\n }`,\n );\n } : null,\n );\n });\n };\n\n for (const tag of jsdoc.tags) {\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) {\n iterateInlineImports(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefer `@import` tags to inline `import()` statements.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether or not to enable the fixer to add `@import` tags.',\n type: 'boolean',\n },\n exemptTypedefs: {\n description: 'Whether to allow `import()` statements within `@typedef`',\n type: 'boolean',\n },\n\n // We might add `typedef` and `typedef-local-only`, but also raises\n // question of how deep the generated typedef should be\n outputType: {\n description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found',\n enum: [\n 'named-import',\n 'namespaced-import',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,7 +8,6 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
|
8
8
|
var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
9
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
const inlineTags = new Set(['link', 'linkcode', 'linkplain', 'tutorial']);
|
|
11
|
-
const jsdocTypePrattKeywords = new Set(['extends', 'import', 'is', 'readonly', 'typeof']);
|
|
12
11
|
const asExpression = /as\s+/v;
|
|
13
12
|
const suppressTypes = new Set([
|
|
14
13
|
// https://github.com/google/closure-compiler/wiki/@suppress-annotations
|
|
@@ -21,11 +20,14 @@ const suppressTypes = new Set([
|
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* @param {string} path
|
|
23
|
+
* @param {import('jsdoc-type-pratt-parser').ParseMode|"permissive"} mode
|
|
24
24
|
* @returns {boolean}
|
|
25
25
|
*/
|
|
26
|
-
const tryParsePathIgnoreError = path => {
|
|
26
|
+
const tryParsePathIgnoreError = (path, mode) => {
|
|
27
27
|
try {
|
|
28
|
-
(0, _jsdoccomment.
|
|
28
|
+
(0, _jsdoccomment.parseNamePath)(path, mode === 'permissive' ? 'jsdoc' : mode, {
|
|
29
|
+
includeSpecial: true
|
|
30
|
+
});
|
|
29
31
|
return true;
|
|
30
32
|
} catch {
|
|
31
33
|
// Keep the original error for including the whole type
|
|
@@ -54,7 +56,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
54
56
|
* @returns {boolean}
|
|
55
57
|
*/
|
|
56
58
|
const validNamepathParsing = function (namepath, tagName) {
|
|
57
|
-
if (tryParsePathIgnoreError(namepath
|
|
59
|
+
if (tryParsePathIgnoreError(namepath, mode)) {
|
|
58
60
|
return true;
|
|
59
61
|
}
|
|
60
62
|
let handled = false;
|
|
@@ -65,7 +67,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
65
67
|
{
|
|
66
68
|
const endChar = namepath.slice(-1);
|
|
67
69
|
if (['#', '.', '~'].includes(endChar)) {
|
|
68
|
-
handled = tryParsePathIgnoreError(namepath.slice(0, -1));
|
|
70
|
+
handled = tryParsePathIgnoreError(namepath.slice(0, -1), mode);
|
|
69
71
|
}
|
|
70
72
|
break;
|
|
71
73
|
}
|
|
@@ -73,7 +75,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
73
75
|
case 'requires':
|
|
74
76
|
{
|
|
75
77
|
if (!namepath.startsWith('module:')) {
|
|
76
|
-
handled = tryParsePathIgnoreError(`module:${namepath}
|
|
78
|
+
handled = tryParsePathIgnoreError(`module:${namepath}`, mode);
|
|
77
79
|
}
|
|
78
80
|
break;
|
|
79
81
|
}
|
|
@@ -81,7 +83,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
81
83
|
{
|
|
82
84
|
const startChar = namepath.charAt(0);
|
|
83
85
|
if (['#', '.', '~'].includes(startChar)) {
|
|
84
|
-
handled = tryParsePathIgnoreError(namepath.slice(1));
|
|
86
|
+
handled = tryParsePathIgnoreError(namepath.slice(1), mode);
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -230,14 +232,14 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
// VALID NAME/NAMEPATH
|
|
233
|
-
const hasNameOrNamepathPosition = (tagMustHaveNamePosition !== false || utils.
|
|
235
|
+
const hasNameOrNamepathPosition = (tagMustHaveNamePosition !== false || utils.tagMightHaveNameOrNamepath(tag.tag)) && Boolean(tag.name);
|
|
234
236
|
if (hasNameOrNamepathPosition) {
|
|
235
237
|
if (mode !== 'jsdoc' && tag.tag === 'template') {
|
|
236
238
|
if (!tryParsePathIgnoreError(
|
|
237
239
|
// May be an issue with the commas of
|
|
238
240
|
// `utils.parseClosureTemplateTag`, so first try a raw
|
|
239
241
|
// value; we really need a proper parser instead, however.
|
|
240
|
-
tag.name.trim().replace(/^\[?(?<name>.*?)=.*$/v, '$<name>'))) {
|
|
242
|
+
tag.name.trim().replace(/^\[?(?<name>.*?)=.*$/v, '$<name>'), mode)) {
|
|
241
243
|
for (const namepath of utils.parseClosureTemplateTag(tag)) {
|
|
242
244
|
validNamepathParsing(namepath);
|
|
243
245
|
}
|