eslint-plugin-jsdoc 51.3.0 → 51.3.2
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/rules/multilineBlocks.cjs +9 -9
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +27 -4
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/package.json +1 -1
- package/src/rules/multilineBlocks.js +9 -9
- package/src/rules/noUndefinedTypes.js +43 -13
|
@@ -16,8 +16,8 @@ const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => {
|
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
let lastLineWithTag = 0;
|
|
19
|
-
let
|
|
20
|
-
let
|
|
19
|
+
let isUnderCountLimit = false;
|
|
20
|
+
let hasMultiDescOrType = false;
|
|
21
21
|
const tagLines = jsdoc.source.reduce((acc, {
|
|
22
22
|
tokens: {
|
|
23
23
|
delimiter,
|
|
@@ -35,17 +35,17 @@ const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => {
|
|
|
35
35
|
if (tag.length) {
|
|
36
36
|
lastLineWithTag = idx;
|
|
37
37
|
if (start.length + delimiter.length + postDelimiter.length + type.length + postType.length + name.length + postName.length + tag.length + postTag.length + desc.length < requireSingleLineUnderCount) {
|
|
38
|
-
|
|
38
|
+
isUnderCountLimit = true;
|
|
39
39
|
}
|
|
40
40
|
return acc + 1;
|
|
41
|
-
} else if (desc.length) {
|
|
42
|
-
|
|
41
|
+
} else if (desc.length || type.length) {
|
|
42
|
+
hasMultiDescOrType = true;
|
|
43
43
|
return acc;
|
|
44
44
|
}
|
|
45
45
|
return acc;
|
|
46
46
|
}, 0);
|
|
47
47
|
// Could be tagLines > 1
|
|
48
|
-
if (!
|
|
48
|
+
if (!hasMultiDescOrType && isUnderCountLimit && tagLines === 1) {
|
|
49
49
|
const fixer = () => {
|
|
50
50
|
const tokens = jsdoc.source[lastLineWithTag].tokens;
|
|
51
51
|
jsdoc.source = [{
|
|
@@ -82,7 +82,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) =>
|
|
|
82
82
|
return false;
|
|
83
83
|
}
|
|
84
84
|
let lastLineWithDesc = 0;
|
|
85
|
-
let
|
|
85
|
+
let isUnderCountLimit = false;
|
|
86
86
|
const descLines = jsdoc.source.reduce((acc, {
|
|
87
87
|
tokens: {
|
|
88
88
|
delimiter,
|
|
@@ -94,14 +94,14 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) =>
|
|
|
94
94
|
if (desc.length) {
|
|
95
95
|
lastLineWithDesc = idx;
|
|
96
96
|
if (start.length + delimiter.length + postDelimiter.length + desc.length < requireSingleLineUnderCount) {
|
|
97
|
-
|
|
97
|
+
isUnderCountLimit = true;
|
|
98
98
|
}
|
|
99
99
|
return acc + 1;
|
|
100
100
|
}
|
|
101
101
|
return acc;
|
|
102
102
|
}, 0);
|
|
103
103
|
// Could be descLines > 1
|
|
104
|
-
if (
|
|
104
|
+
if (isUnderCountLimit && descLines === 1) {
|
|
105
105
|
const fixer = () => {
|
|
106
106
|
const desc = jsdoc.source[lastLineWithDesc].tokens.description;
|
|
107
107
|
jsdoc.source = [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multilineBlocks.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","checkForShortTags","jsdoc","utils","requireSingleLineUnderCount","tags","length","lastLineWithTag","exceedsLength","hasDesc","tagLines","source","reduce","acc","tokens","delimiter","description","desc","name","postDelimiter","postName","postTag","postType","start","tag","type","idx","fixer","number","seedTokens","trimEnd","end","reportJSDoc","checkForShortDescriptions","lastLineWithDesc","descLines","_default","exports","iterateJsdoc","context","allowMultipleTags","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","noFinalLineText","noMultilineBlocks","noSingleLineBlocks","noZeroLineText","singleLineTags","options","sourceLength","isInvalidSingleLine","tagName","includes","slice","makeMultiline","lineChecks","line","emptyTokens","addLine","finalLine","finalLineTokens","trim","prop","hasATag","filterTags","tg","obj","lineEnd","nme","typ","nameOrDescription","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","anyOf","enum","items","module"],"sources":["../../src/rules/multilineBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {number} requireSingleLineUnderCount\n */\nconst checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => {\n if (!requireSingleLineUnderCount || !jsdoc.tags.length) {\n return false;\n }\n\n let lastLineWithTag = 0;\n let exceedsLength = false;\n let hasDesc = false;\n const tagLines = jsdoc.source.reduce((acc, {\n tokens: {\n delimiter,\n description: desc,\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start,\n tag,\n type,\n },\n }, idx) => {\n if (tag.length) {\n lastLineWithTag = idx;\n if (\n start.length + delimiter.length + postDelimiter.length +\n type.length + postType.length + name.length + postName.length +\n tag.length + postTag.length + desc.length <\n requireSingleLineUnderCount\n ) {\n exceedsLength = true;\n }\n\n return acc + 1;\n } else if (desc.length) {\n hasDesc = true;\n return acc;\n }\n\n return acc;\n }, 0);\n // Could be tagLines > 1\n if (!hasDesc && exceedsLength && tagLines === 1) {\n const fixer = () => {\n const tokens = jsdoc.source[lastLineWithTag].tokens;\n jsdoc.source = [\n {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '/**',\n description: tokens.description.trimEnd() + ' ',\n end: '*/',\n name: tokens.name,\n postDelimiter: ' ',\n postName: tokens.postName,\n postTag: tokens.postTag,\n postType: tokens.postType,\n start: jsdoc.source[0].tokens.start,\n tag: tokens.tag,\n type: tokens.type,\n }),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Description is too short to be multi-line.',\n null,\n fixer,\n );\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {number} requireSingleLineUnderCount\n */\nconst checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) => {\n if (!requireSingleLineUnderCount || jsdoc.tags.length) {\n return false;\n }\n\n let lastLineWithDesc = 0;\n let exceedsLength = false;\n const descLines = jsdoc.source.reduce((acc, {\n tokens: {\n delimiter,\n description: desc,\n postDelimiter,\n start,\n },\n }, idx) => {\n if (desc.length) {\n lastLineWithDesc = idx;\n if (\n start.length + delimiter.length + postDelimiter.length + desc.length <\n requireSingleLineUnderCount\n ) {\n exceedsLength = true;\n }\n\n return acc + 1;\n }\n\n return acc;\n }, 0);\n // Could be descLines > 1\n if (exceedsLength && descLines === 1) {\n const fixer = () => {\n const desc = jsdoc.source[lastLineWithDesc].tokens.description;\n jsdoc.source = [\n {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '/**',\n description: desc.trimEnd() + ' ',\n end: '*/',\n postDelimiter: ' ',\n start: jsdoc.source[0].tokens.start,\n }),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Description is too short to be multi-line.',\n null,\n fixer,\n );\n return true;\n }\n\n return false;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n noFinalLineText = true,\n noMultilineBlocks = false,\n noSingleLineBlocks = false,\n noZeroLineText = true,\n requireSingleLineUnderCount = null,\n singleLineTags = [\n 'lends', 'type',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n if (checkForShortDescriptions(jsdoc, utils, requireSingleLineUnderCount)\n ) {\n return;\n }\n\n if (checkForShortTags(jsdoc, utils, requireSingleLineUnderCount)\n ) {\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[\n /**\n * @type {\"delimiter\"|\"postDelimiter\"|\"tag\"|\"type\"|\n * \"lineEnd\"|\"postType\"|\"postTag\"|\"name\"|\n * \"postName\"|\"description\"}\n */ (\n prop\n )\n ] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n lineEnd,\n name: nme,\n postName,\n postTag,\n postType,\n tag: tg,\n type: typ,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/multiline-blocks.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n requireSingleLineUnderCount: {\n type: 'number',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"multilineBlocks.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","checkForShortTags","jsdoc","utils","requireSingleLineUnderCount","tags","length","lastLineWithTag","isUnderCountLimit","hasMultiDescOrType","tagLines","source","reduce","acc","tokens","delimiter","description","desc","name","postDelimiter","postName","postTag","postType","start","tag","type","idx","fixer","number","seedTokens","trimEnd","end","reportJSDoc","checkForShortDescriptions","lastLineWithDesc","descLines","_default","exports","iterateJsdoc","context","allowMultipleTags","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","noFinalLineText","noMultilineBlocks","noSingleLineBlocks","noZeroLineText","singleLineTags","options","sourceLength","isInvalidSingleLine","tagName","includes","slice","makeMultiline","lineChecks","line","emptyTokens","addLine","finalLine","finalLineTokens","trim","prop","hasATag","filterTags","tg","obj","lineEnd","nme","typ","nameOrDescription","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","anyOf","enum","items","module"],"sources":["../../src/rules/multilineBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {number} requireSingleLineUnderCount\n */\nconst checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => {\n if (!requireSingleLineUnderCount || !jsdoc.tags.length) {\n return false;\n }\n\n let lastLineWithTag = 0;\n let isUnderCountLimit = false;\n let hasMultiDescOrType = false;\n const tagLines = jsdoc.source.reduce((acc, {\n tokens: {\n delimiter,\n description: desc,\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start,\n tag,\n type,\n },\n }, idx) => {\n if (tag.length) {\n lastLineWithTag = idx;\n if (\n start.length + delimiter.length + postDelimiter.length +\n type.length + postType.length + name.length + postName.length +\n tag.length + postTag.length + desc.length <\n requireSingleLineUnderCount\n ) {\n isUnderCountLimit = true;\n }\n\n return acc + 1;\n } else if (desc.length || type.length) {\n hasMultiDescOrType = true;\n return acc;\n }\n\n return acc;\n }, 0);\n // Could be tagLines > 1\n if (!hasMultiDescOrType && isUnderCountLimit && tagLines === 1) {\n const fixer = () => {\n const tokens = jsdoc.source[lastLineWithTag].tokens;\n jsdoc.source = [\n {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '/**',\n description: tokens.description.trimEnd() + ' ',\n end: '*/',\n name: tokens.name,\n postDelimiter: ' ',\n postName: tokens.postName,\n postTag: tokens.postTag,\n postType: tokens.postType,\n start: jsdoc.source[0].tokens.start,\n tag: tokens.tag,\n type: tokens.type,\n }),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Description is too short to be multi-line.',\n null,\n fixer,\n );\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {number} requireSingleLineUnderCount\n */\nconst checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) => {\n if (!requireSingleLineUnderCount || jsdoc.tags.length) {\n return false;\n }\n\n let lastLineWithDesc = 0;\n let isUnderCountLimit = false;\n const descLines = jsdoc.source.reduce((acc, {\n tokens: {\n delimiter,\n description: desc,\n postDelimiter,\n start,\n },\n }, idx) => {\n if (desc.length) {\n lastLineWithDesc = idx;\n if (\n start.length + delimiter.length + postDelimiter.length + desc.length <\n requireSingleLineUnderCount\n ) {\n isUnderCountLimit = true;\n }\n\n return acc + 1;\n }\n\n return acc;\n }, 0);\n // Could be descLines > 1\n if (isUnderCountLimit && descLines === 1) {\n const fixer = () => {\n const desc = jsdoc.source[lastLineWithDesc].tokens.description;\n jsdoc.source = [\n {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '/**',\n description: desc.trimEnd() + ' ',\n end: '*/',\n postDelimiter: ' ',\n start: jsdoc.source[0].tokens.start,\n }),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Description is too short to be multi-line.',\n null,\n fixer,\n );\n return true;\n }\n\n return false;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n noFinalLineText = true,\n noMultilineBlocks = false,\n noSingleLineBlocks = false,\n noZeroLineText = true,\n requireSingleLineUnderCount = null,\n singleLineTags = [\n 'lends', 'type',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n if (checkForShortDescriptions(jsdoc, utils, requireSingleLineUnderCount)\n ) {\n return;\n }\n\n if (checkForShortTags(jsdoc, utils, requireSingleLineUnderCount)\n ) {\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[\n /**\n * @type {\"delimiter\"|\"postDelimiter\"|\"tag\"|\"type\"|\n * \"lineEnd\"|\"postType\"|\"postTag\"|\"name\"|\n * \"postName\"|\"description\"}\n */ (\n prop\n )\n ] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n lineEnd,\n name: nme,\n postName,\n postTag,\n postType,\n tag: tg,\n type: typ,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/multiline-blocks.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n requireSingleLineUnderCount: {\n type: 'number',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -197,14 +197,37 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
197
197
|
variables
|
|
198
198
|
}) => {
|
|
199
199
|
return variables;
|
|
200
|
-
}).
|
|
200
|
+
}).flatMap(({
|
|
201
201
|
identifiers,
|
|
202
202
|
name
|
|
203
203
|
}) => {
|
|
204
|
-
|
|
205
|
-
|
|
204
|
+
const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */identifiers?.[0]?.parent;
|
|
205
|
+
switch (globalItem?.type) {
|
|
206
|
+
case 'ClassDeclaration':
|
|
207
|
+
return [name, ...globalItem.body.body.map(item => {
|
|
208
|
+
const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */item?.key)?.name;
|
|
209
|
+
/* c8 ignore next 3 -- Guard */
|
|
210
|
+
if (!property) {
|
|
211
|
+
return '';
|
|
212
|
+
}
|
|
213
|
+
return `${name}.${property}`;
|
|
214
|
+
}).filter(Boolean)];
|
|
215
|
+
case 'ImportDefaultSpecifier':
|
|
216
|
+
case 'ImportNamespaceSpecifier':
|
|
217
|
+
case 'ImportSpecifier':
|
|
218
|
+
imports.push(name);
|
|
219
|
+
break;
|
|
220
|
+
case 'TSInterfaceDeclaration':
|
|
221
|
+
return [name, ...globalItem.body.body.map(item => {
|
|
222
|
+
const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */item?.key)?.name;
|
|
223
|
+
/* c8 ignore next 3 -- Guard */
|
|
224
|
+
if (!property) {
|
|
225
|
+
return '';
|
|
226
|
+
}
|
|
227
|
+
return `${name}.${property}`;
|
|
228
|
+
}).filter(Boolean)];
|
|
206
229
|
}
|
|
207
|
-
return name;
|
|
230
|
+
return [name];
|
|
208
231
|
/* c8 ignore next */
|
|
209
232
|
}) : []).concat(extraTypes).concat(typedefDeclarations).concat(importTags).concat(definedTypes).concat(/** @type {string[]} */definedPreferredTypes).concat((() => {
|
|
210
233
|
// Other methods are not in scope, but we need them, and we grab them here
|
|
@@ -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","utils","scopeManager","globalScope","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","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","includes","body","methodOrProp","key","id","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","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',\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(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\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 * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\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 (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/u).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/u, '').trim().split(/,\\s*/u);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\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 jsdoc = parseComment(commentNode, '');\n\n return jsdoc.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 }).map(({\n identifiers,\n name,\n }) => {\n if (\n [\n 'ImportDefaultSpecifier',\n 'ImportNamespaceSpecifier',\n 'ImportSpecifier',\n ].includes(\n /** @type {import('estree').Identifier & {parent: {type: string}}} */ (\n identifiers?.[0])?.parent?.type,\n )\n ) {\n imports.push(name);\n }\n\n return name;\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 2 */\n sourceCode.getScope(node)) ||\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 !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 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\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 definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\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","utils","scopeManager","globalScope","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","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","methodOrProp","id","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","includes","right","structuredTypes","Array","isArray","markVariableAsUsed","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',\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(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\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 * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\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 (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/u).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/u, '').trim().split(/,\\s*/u);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\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 jsdoc = parseComment(commentNode, '');\n\n return jsdoc.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 }\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 2 */\n sourceCode.getScope(node)) ||\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 !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 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\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 definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -11,8 +11,8 @@ const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
let lastLineWithTag = 0;
|
|
14
|
-
let
|
|
15
|
-
let
|
|
14
|
+
let isUnderCountLimit = false;
|
|
15
|
+
let hasMultiDescOrType = false;
|
|
16
16
|
const tagLines = jsdoc.source.reduce((acc, {
|
|
17
17
|
tokens: {
|
|
18
18
|
delimiter,
|
|
@@ -35,19 +35,19 @@ const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => {
|
|
|
35
35
|
tag.length + postTag.length + desc.length <
|
|
36
36
|
requireSingleLineUnderCount
|
|
37
37
|
) {
|
|
38
|
-
|
|
38
|
+
isUnderCountLimit = true;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return acc + 1;
|
|
42
|
-
} else if (desc.length) {
|
|
43
|
-
|
|
42
|
+
} else if (desc.length || type.length) {
|
|
43
|
+
hasMultiDescOrType = true;
|
|
44
44
|
return acc;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
return acc;
|
|
48
48
|
}, 0);
|
|
49
49
|
// Could be tagLines > 1
|
|
50
|
-
if (!
|
|
50
|
+
if (!hasMultiDescOrType && isUnderCountLimit && tagLines === 1) {
|
|
51
51
|
const fixer = () => {
|
|
52
52
|
const tokens = jsdoc.source[lastLineWithTag].tokens;
|
|
53
53
|
jsdoc.source = [
|
|
@@ -93,7 +93,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) =>
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
let lastLineWithDesc = 0;
|
|
96
|
-
let
|
|
96
|
+
let isUnderCountLimit = false;
|
|
97
97
|
const descLines = jsdoc.source.reduce((acc, {
|
|
98
98
|
tokens: {
|
|
99
99
|
delimiter,
|
|
@@ -108,7 +108,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) =>
|
|
|
108
108
|
start.length + delimiter.length + postDelimiter.length + desc.length <
|
|
109
109
|
requireSingleLineUnderCount
|
|
110
110
|
) {
|
|
111
|
-
|
|
111
|
+
isUnderCountLimit = true;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
return acc + 1;
|
|
@@ -117,7 +117,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) =>
|
|
|
117
117
|
return acc;
|
|
118
118
|
}, 0);
|
|
119
119
|
// Could be descLines > 1
|
|
120
|
-
if (
|
|
120
|
+
if (isUnderCountLimit && descLines === 1) {
|
|
121
121
|
const fixer = () => {
|
|
122
122
|
const desc = jsdoc.source[lastLineWithDesc].tokens.description;
|
|
123
123
|
jsdoc.source = [
|
|
@@ -269,24 +269,54 @@ export default iterateJsdoc(({
|
|
|
269
269
|
variables,
|
|
270
270
|
}) => {
|
|
271
271
|
return variables;
|
|
272
|
-
}).
|
|
272
|
+
}).flatMap(({
|
|
273
273
|
identifiers,
|
|
274
274
|
name,
|
|
275
275
|
}) => {
|
|
276
|
-
|
|
277
|
-
[
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
276
|
+
const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (
|
|
277
|
+
identifiers?.[0]
|
|
278
|
+
)?.parent;
|
|
279
|
+
switch (globalItem?.type) {
|
|
280
|
+
case 'ClassDeclaration':
|
|
281
|
+
return [
|
|
282
|
+
name,
|
|
283
|
+
...globalItem.body.body.map((item) => {
|
|
284
|
+
const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (
|
|
285
|
+
/** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (
|
|
286
|
+
item)?.key)?.name;
|
|
287
|
+
/* c8 ignore next 3 -- Guard */
|
|
288
|
+
if (!property) {
|
|
289
|
+
return '';
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return `${name}.${property}`;
|
|
293
|
+
}).filter(Boolean),
|
|
294
|
+
];
|
|
295
|
+
case 'ImportDefaultSpecifier':
|
|
296
|
+
case 'ImportNamespaceSpecifier':
|
|
297
|
+
case 'ImportSpecifier':
|
|
298
|
+
imports.push(name);
|
|
299
|
+
break;
|
|
300
|
+
case 'TSInterfaceDeclaration':
|
|
301
|
+
return [
|
|
302
|
+
name,
|
|
303
|
+
...globalItem.body.body.map((item) => {
|
|
304
|
+
const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (
|
|
305
|
+
/** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (
|
|
306
|
+
item)?.key)?.name;
|
|
307
|
+
/* c8 ignore next 3 -- Guard */
|
|
308
|
+
if (!property) {
|
|
309
|
+
return '';
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return `${name}.${property}`;
|
|
313
|
+
}).filter(Boolean),
|
|
314
|
+
];
|
|
287
315
|
}
|
|
288
316
|
|
|
289
|
-
return
|
|
317
|
+
return [
|
|
318
|
+
name,
|
|
319
|
+
];
|
|
290
320
|
/* c8 ignore next */
|
|
291
321
|
}) : [],
|
|
292
322
|
)
|