eslint-plugin-jsdoc 53.0.1 → 54.0.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/WarnSettings.cjs +35 -18
- package/dist/WarnSettings.cjs.map +1 -1
- package/dist/alignTransform.cjs +305 -224
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/defaultTagOrder.cjs +43 -132
- package/dist/defaultTagOrder.cjs.map +1 -1
- package/dist/exportParser.cjs +696 -478
- package/dist/exportParser.cjs.map +1 -1
- package/dist/generateRule.cjs +242 -0
- package/dist/generateRule.cjs.map +1 -0
- package/dist/getDefaultTagStructureForMode.cjs +288 -184
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs +550 -364
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.d.ts +65 -68
- package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
- package/dist/index.cjs +410 -2
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/iterateJsdoc.cjs +2005 -1539
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/iterateJsdoc.d.ts +350 -359
- package/dist/iterateJsdoc.d.ts.map +1 -1
- package/dist/jsdocUtils.cjs +1376 -1009
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAccess.cjs +36 -29
- package/dist/rules/checkAccess.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +54 -41
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +484 -327
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +65 -50
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +311 -220
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs +335 -227
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs +106 -78
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkSyntax.cjs +34 -21
- package/dist/rules/checkSyntax.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +210 -188
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +178 -121
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +385 -291
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +146 -100
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs +306 -228
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs +72 -62
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/implementsOnClasses.cjs +56 -36
- package/dist/rules/implementsOnClasses.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs +99 -62
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs +142 -105
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +105 -70
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +222 -160
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +128 -73
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs +352 -235
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +86 -63
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +57 -35
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noBlankBlocks.cjs +48 -26
- package/dist/rules/noBlankBlocks.cjs.map +1 -1
- package/dist/rules/noDefaults.cjs +79 -52
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noMissingSyntax.cjs +165 -115
- package/dist/rules/noMissingSyntax.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +89 -48
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs +79 -45
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs +80 -59
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +388 -297
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs +159 -108
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs +129 -89
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +262 -201
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireExample.cjs +104 -73
- package/dist/rules/requireExample.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs +129 -75
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +133 -85
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +557 -384
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs +526 -336
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireParamDescription.cjs +80 -55
- package/dist/rules/requireParamDescription.cjs.map +1 -1
- package/dist/rules/requireParamName.cjs +50 -32
- package/dist/rules/requireParamName.cjs.map +1 -1
- package/dist/rules/requireParamType.cjs +80 -55
- package/dist/rules/requireParamType.cjs.map +1 -1
- package/dist/rules/requireProperty.cjs +42 -31
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requirePropertyDescription.cjs +25 -17
- package/dist/rules/requirePropertyDescription.cjs.map +1 -1
- package/dist/rules/requirePropertyName.cjs +25 -17
- package/dist/rules/requirePropertyName.cjs.map +1 -1
- package/dist/rules/requirePropertyType.cjs +25 -17
- package/dist/rules/requirePropertyType.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs +203 -125
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +103 -60
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs +54 -39
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireReturnsType.cjs +50 -32
- package/dist/rules/requireReturnsType.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +178 -119
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireThrows.cjs +95 -61
- package/dist/rules/requireThrows.cjs.map +1 -1
- package/dist/rules/requireYields.cjs +166 -106
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs +152 -96
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs +444 -258
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +266 -179
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +127 -92
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +265 -252
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/tagNames.cjs +170 -134
- package/dist/tagNames.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs +474 -246
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/package.json +24 -40
- package/src/WarnSettings.js +34 -0
- package/src/alignTransform.js +358 -0
- package/src/defaultTagOrder.js +169 -0
- package/src/exportParser.js +978 -0
- package/src/getDefaultTagStructureForMode.js +969 -0
- package/src/getJsdocProcessorPlugin.js +672 -0
- package/src/index.js +530 -0
- package/src/iterateJsdoc.js +2541 -0
- package/src/jsdocUtils.js +1896 -0
- package/src/rules/checkAccess.js +45 -0
- package/src/rules/checkAlignment.js +63 -0
- package/src/rules/checkExamples.js +589 -0
- package/src/rules/checkIndentation.js +75 -0
- package/src/rules/checkLineAlignment.js +372 -0
- package/src/rules/checkParamNames.js +474 -0
- package/src/rules/checkPropertyNames.js +152 -0
- package/src/rules/checkSyntax.js +30 -0
- package/src/rules/checkTagNames.js +314 -0
- package/src/rules/checkTemplateNames.js +204 -0
- package/src/rules/checkTypes.js +535 -0
- package/src/rules/checkValues.js +248 -0
- package/src/rules/convertToJsdocComments.js +398 -0
- package/src/rules/emptyTags.js +98 -0
- package/src/rules/implementsOnClasses.js +64 -0
- package/src/rules/importsAsDependencies.js +133 -0
- package/src/rules/informativeDocs.js +189 -0
- package/src/rules/linesBeforeBlock.js +134 -0
- package/src/rules/matchDescription.js +286 -0
- package/src/rules/matchName.js +151 -0
- package/src/rules/multilineBlocks.js +493 -0
- package/src/rules/noBadBlocks.js +119 -0
- package/src/rules/noBlankBlockDescriptions.js +69 -0
- package/src/rules/noBlankBlocks.js +53 -0
- package/src/rules/noDefaults.js +85 -0
- package/src/rules/noMissingSyntax.js +195 -0
- package/src/rules/noMultiAsterisks.js +134 -0
- package/src/rules/noRestrictedSyntax.js +91 -0
- package/src/rules/noTypes.js +93 -0
- package/src/rules/noUndefinedTypes.js +543 -0
- package/src/rules/requireAsteriskPrefix.js +190 -0
- package/src/rules/requireDescription.js +161 -0
- package/src/rules/requireDescriptionCompleteSentence.js +335 -0
- package/src/rules/requireExample.js +118 -0
- package/src/rules/requireFileOverview.js +154 -0
- package/src/rules/requireHyphenBeforeParamDescription.js +176 -0
- package/src/rules/requireJsdoc.js +743 -0
- package/src/rules/requireParam.js +602 -0
- package/src/rules/requireParamDescription.js +89 -0
- package/src/rules/requireParamName.js +55 -0
- package/src/rules/requireParamType.js +89 -0
- package/src/rules/requireProperty.js +48 -0
- package/src/rules/requirePropertyDescription.js +25 -0
- package/src/rules/requirePropertyName.js +25 -0
- package/src/rules/requirePropertyType.js +25 -0
- package/src/rules/requireReturns.js +238 -0
- package/src/rules/requireReturnsCheck.js +145 -0
- package/src/rules/requireReturnsDescription.js +59 -0
- package/src/rules/requireReturnsType.js +51 -0
- package/src/rules/requireTemplate.js +201 -0
- package/src/rules/requireThrows.js +111 -0
- package/src/rules/requireYields.js +216 -0
- package/src/rules/requireYieldsCheck.js +208 -0
- package/src/rules/sortTags.js +558 -0
- package/src/rules/tagLines.js +359 -0
- package/src/rules/textEscaping.js +154 -0
- package/src/rules/validTypes.js +401 -0
- package/src/tagNames.js +238 -0
- package/src/utils/hasReturnValue.js +572 -0
- package/dist/WarnSettings.js +0 -20
- package/dist/WarnSettings.js.map +0 -1
- package/dist/_virtual/rolldown_runtime.cjs +0 -32
- package/dist/_virtual/rolldown_runtime.js +0 -11
- package/dist/alignTransform.js +0 -241
- package/dist/alignTransform.js.map +0 -1
- package/dist/defaultTagOrder.js +0 -134
- package/dist/defaultTagOrder.js.map +0 -1
- package/dist/exportParser.js +0 -518
- package/dist/exportParser.js.map +0 -1
- package/dist/getDefaultTagStructureForMode.js +0 -188
- package/dist/getDefaultTagStructureForMode.js.map +0 -1
- package/dist/getJsdocProcessorPlugin.d.cts +0 -70
- package/dist/getJsdocProcessorPlugin.d.cts.map +0 -1
- package/dist/getJsdocProcessorPlugin.js +0 -383
- package/dist/getJsdocProcessorPlugin.js.map +0 -1
- package/dist/index.d.cts +0 -2
- package/dist/index.js +0 -3
- package/dist/iterateJsdoc.d.cts +0 -472
- package/dist/iterateJsdoc.d.cts.map +0 -1
- package/dist/iterateJsdoc.js +0 -1628
- package/dist/iterateJsdoc.js.map +0 -1
- package/dist/jsdocUtils.js +0 -1123
- package/dist/jsdocUtils.js.map +0 -1
- package/dist/plugin.cjs +0 -427
- package/dist/plugin.cjs.map +0 -1
- package/dist/plugin.js +0 -427
- package/dist/plugin.js.map +0 -1
- package/dist/rules/checkAccess.js +0 -33
- package/dist/rules/checkAccess.js.map +0 -1
- package/dist/rules/checkAlignment.js +0 -47
- package/dist/rules/checkAlignment.js.map +0 -1
- package/dist/rules/checkExamples.js +0 -348
- package/dist/rules/checkExamples.js.map +0 -1
- package/dist/rules/checkIndentation.js +0 -59
- package/dist/rules/checkIndentation.js.map +0 -1
- package/dist/rules/checkLineAlignment.js +0 -229
- package/dist/rules/checkLineAlignment.js.map +0 -1
- package/dist/rules/checkParamNames.js +0 -237
- package/dist/rules/checkParamNames.js.map +0 -1
- package/dist/rules/checkPropertyNames.js +0 -88
- package/dist/rules/checkPropertyNames.js.map +0 -1
- package/dist/rules/checkSyntax.js +0 -25
- package/dist/rules/checkSyntax.js.map +0 -1
- package/dist/rules/checkTagNames.js +0 -191
- package/dist/rules/checkTagNames.js.map +0 -1
- package/dist/rules/checkTemplateNames.js +0 -124
- package/dist/rules/checkTemplateNames.js.map +0 -1
- package/dist/rules/checkTypes.js +0 -299
- package/dist/rules/checkTypes.js.map +0 -1
- package/dist/rules/checkValues.js +0 -103
- package/dist/rules/checkValues.js.map +0 -1
- package/dist/rules/convertToJsdocComments.js +0 -231
- package/dist/rules/convertToJsdocComments.js.map +0 -1
- package/dist/rules/emptyTags.js +0 -67
- package/dist/rules/emptyTags.js.map +0 -1
- package/dist/rules/implementsOnClasses.js +0 -40
- package/dist/rules/implementsOnClasses.js.map +0 -1
- package/dist/rules/importsAsDependencies.js +0 -68
- package/dist/rules/importsAsDependencies.js.map +0 -1
- package/dist/rules/informativeDocs.js +0 -110
- package/dist/rules/informativeDocs.js.map +0 -1
- package/dist/rules/linesBeforeBlock.js +0 -75
- package/dist/rules/linesBeforeBlock.js.map +0 -1
- package/dist/rules/matchDescription.js +0 -167
- package/dist/rules/matchDescription.js.map +0 -1
- package/dist/rules/matchName.js +0 -77
- package/dist/rules/matchName.js.map +0 -1
- package/dist/rules/multilineBlocks.js +0 -245
- package/dist/rules/multilineBlocks.js.map +0 -1
- package/dist/rules/noBadBlocks.js +0 -68
- package/dist/rules/noBadBlocks.js.map +0 -1
- package/dist/rules/noBlankBlockDescriptions.js +0 -41
- package/dist/rules/noBlankBlockDescriptions.js.map +0 -1
- package/dist/rules/noBlankBlocks.js +0 -30
- package/dist/rules/noBlankBlocks.js.map +0 -1
- package/dist/rules/noDefaults.js +0 -56
- package/dist/rules/noDefaults.js.map +0 -1
- package/dist/rules/noMissingSyntax.js +0 -126
- package/dist/rules/noMissingSyntax.js.map +0 -1
- package/dist/rules/noMultiAsterisks.js +0 -58
- package/dist/rules/noMultiAsterisks.js.map +0 -1
- package/dist/rules/noRestrictedSyntax.js +0 -49
- package/dist/rules/noRestrictedSyntax.js.map +0 -1
- package/dist/rules/noTypes.js +0 -65
- package/dist/rules/noTypes.js.map +0 -1
- package/dist/rules/noUndefinedTypes.js +0 -303
- package/dist/rules/noUndefinedTypes.js.map +0 -1
- package/dist/rules/requireAsteriskPrefix.js +0 -112
- package/dist/rules/requireAsteriskPrefix.js.map +0 -1
- package/dist/rules/requireDescription.js +0 -95
- package/dist/rules/requireDescription.js.map +0 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +0 -220
- package/dist/rules/requireDescriptionCompleteSentence.js.map +0 -1
- package/dist/rules/requireExample.js +0 -77
- package/dist/rules/requireExample.js.map +0 -1
- package/dist/rules/requireFileOverview.js +0 -81
- package/dist/rules/requireFileOverview.js.map +0 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +0 -89
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +0 -1
- package/dist/rules/requireJsdoc.js +0 -404
- package/dist/rules/requireJsdoc.js.map +0 -1
- package/dist/rules/requireParam.js +0 -344
- package/dist/rules/requireParam.js.map +0 -1
- package/dist/rules/requireParamDescription.js +0 -59
- package/dist/rules/requireParamDescription.js.map +0 -1
- package/dist/rules/requireParamName.js +0 -36
- package/dist/rules/requireParamName.js.map +0 -1
- package/dist/rules/requireParamType.js +0 -59
- package/dist/rules/requireParamType.js.map +0 -1
- package/dist/rules/requireProperty.js +0 -35
- package/dist/rules/requireProperty.js.map +0 -1
- package/dist/rules/requirePropertyDescription.js +0 -21
- package/dist/rules/requirePropertyDescription.js.map +0 -1
- package/dist/rules/requirePropertyName.js +0 -21
- package/dist/rules/requirePropertyName.js.map +0 -1
- package/dist/rules/requirePropertyType.js +0 -21
- package/dist/rules/requirePropertyType.js.map +0 -1
- package/dist/rules/requireReturns.js +0 -131
- package/dist/rules/requireReturns.js.map +0 -1
- package/dist/rules/requireReturnsCheck.js +0 -66
- package/dist/rules/requireReturnsCheck.js.map +0 -1
- package/dist/rules/requireReturnsDescription.js +0 -43
- package/dist/rules/requireReturnsDescription.js.map +0 -1
- package/dist/rules/requireReturnsType.js +0 -36
- package/dist/rules/requireReturnsType.js.map +0 -1
- package/dist/rules/requireTemplate.js +0 -122
- package/dist/rules/requireTemplate.js.map +0 -1
- package/dist/rules/requireThrows.js +0 -67
- package/dist/rules/requireThrows.js.map +0 -1
- package/dist/rules/requireYields.js +0 -115
- package/dist/rules/requireYields.js.map +0 -1
- package/dist/rules/requireYieldsCheck.js +0 -105
- package/dist/rules/requireYieldsCheck.js.map +0 -1
- package/dist/rules/sortTags.js +0 -262
- package/dist/rules/sortTags.js.map +0 -1
- package/dist/rules/tagLines.js +0 -183
- package/dist/rules/tagLines.js.map +0 -1
- package/dist/rules/textEscaping.js +0 -102
- package/dist/rules/textEscaping.js.map +0 -1
- package/dist/rules/validTypes.js +0 -259
- package/dist/rules/validTypes.js.map +0 -1
- package/dist/tagNames.js +0 -144
- package/dist/tagNames.js.map +0 -1
- package/dist/utils/hasReturnValue.js +0 -265
- package/dist/utils/hasReturnValue.js.map +0 -1
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
import iterateJsdoc, { parseComment } from "../iterateJsdoc.js";
|
|
2
|
-
import { getJSDocComment, parse, traverse, tryParse } from "@es-joy/jsdoccomment";
|
|
3
|
-
import { parseImportsExports } from "parse-imports-exports";
|
|
4
|
-
|
|
5
|
-
//#region src/rules/noUndefinedTypes.js
|
|
6
|
-
const extraTypes = [
|
|
7
|
-
"null",
|
|
8
|
-
"undefined",
|
|
9
|
-
"void",
|
|
10
|
-
"string",
|
|
11
|
-
"boolean",
|
|
12
|
-
"object",
|
|
13
|
-
"function",
|
|
14
|
-
"symbol",
|
|
15
|
-
"number",
|
|
16
|
-
"bigint",
|
|
17
|
-
"NaN",
|
|
18
|
-
"Infinity",
|
|
19
|
-
"any",
|
|
20
|
-
"*",
|
|
21
|
-
"never",
|
|
22
|
-
"unknown",
|
|
23
|
-
"const",
|
|
24
|
-
"this",
|
|
25
|
-
"true",
|
|
26
|
-
"false",
|
|
27
|
-
"Array",
|
|
28
|
-
"Object",
|
|
29
|
-
"RegExp",
|
|
30
|
-
"Date",
|
|
31
|
-
"Function",
|
|
32
|
-
"Intl"
|
|
33
|
-
];
|
|
34
|
-
const typescriptGlobals = [
|
|
35
|
-
"Awaited",
|
|
36
|
-
"Partial",
|
|
37
|
-
"Required",
|
|
38
|
-
"Readonly",
|
|
39
|
-
"Record",
|
|
40
|
-
"Pick",
|
|
41
|
-
"Omit",
|
|
42
|
-
"Exclude",
|
|
43
|
-
"Extract",
|
|
44
|
-
"NonNullable",
|
|
45
|
-
"Parameters",
|
|
46
|
-
"ConstructorParameters",
|
|
47
|
-
"ReturnType",
|
|
48
|
-
"InstanceType",
|
|
49
|
-
"ThisParameterType",
|
|
50
|
-
"OmitThisParameter",
|
|
51
|
-
"ThisType",
|
|
52
|
-
"Uppercase",
|
|
53
|
-
"Lowercase",
|
|
54
|
-
"Capitalize",
|
|
55
|
-
"Uncapitalize"
|
|
56
|
-
];
|
|
57
|
-
/**
|
|
58
|
-
* @param {string|false|undefined} [str]
|
|
59
|
-
* @returns {undefined|string|false}
|
|
60
|
-
*/
|
|
61
|
-
const stripPseudoTypes = (str) => {
|
|
62
|
-
return str && str.replace(/(?:\.|<>|\.<>|\[\])$/v, "");
|
|
63
|
-
};
|
|
64
|
-
var noUndefinedTypes_default = iterateJsdoc(({ context, node, report, settings, sourceCode, utils }) => {
|
|
65
|
-
const { scopeManager } = sourceCode;
|
|
66
|
-
const globalScope = scopeManager.globalScope;
|
|
67
|
-
const { definedTypes = [], disableReporting = false, markVariablesAsUsed = true } = context.options[0] || {};
|
|
68
|
-
/** @type {(string|undefined)[]} */
|
|
69
|
-
let definedPreferredTypes = [];
|
|
70
|
-
const { mode, preferredTypes, structuredTags } = settings;
|
|
71
|
-
if (Object.keys(preferredTypes).length) definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {
|
|
72
|
-
if (typeof preferredType === "string") return stripPseudoTypes(preferredType);
|
|
73
|
-
if (!preferredType) return void 0;
|
|
74
|
-
if (typeof preferredType !== "object") utils.reportSettings("Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.");
|
|
75
|
-
return stripPseudoTypes(preferredType.replacement);
|
|
76
|
-
}).filter(Boolean);
|
|
77
|
-
const allComments = sourceCode.getAllComments();
|
|
78
|
-
const comments = allComments.filter((comment) => {
|
|
79
|
-
return /^\*\s/v.test(comment.value);
|
|
80
|
-
}).map((commentNode) => {
|
|
81
|
-
return parseComment(commentNode, "");
|
|
82
|
-
});
|
|
83
|
-
const globals = allComments.filter((comment) => {
|
|
84
|
-
return /^\s*globals/v.test(comment.value);
|
|
85
|
-
}).flatMap((commentNode) => {
|
|
86
|
-
return commentNode.value.replace(/^\s*globals/v, "").trim().split(/,\s*/v);
|
|
87
|
-
}).concat(Object.keys(context.languageOptions.globals ?? []));
|
|
88
|
-
const typedefDeclarations = comments.flatMap((doc) => {
|
|
89
|
-
return doc.tags.filter(({ tag }) => {
|
|
90
|
-
return utils.isNamepathDefiningTag(tag);
|
|
91
|
-
});
|
|
92
|
-
}).map((tag) => {
|
|
93
|
-
return tag.name;
|
|
94
|
-
});
|
|
95
|
-
const importTags = settings.mode === "typescript" ? comments.flatMap((doc) => {
|
|
96
|
-
return doc.tags.filter(({ tag }) => {
|
|
97
|
-
return tag === "import";
|
|
98
|
-
});
|
|
99
|
-
}).flatMap((tag) => {
|
|
100
|
-
const { description, name, type } = tag;
|
|
101
|
-
const typePart = type ? `{${type}} ` : "";
|
|
102
|
-
const imprt = "import " + (description ? `${typePart}${name} ${description}` : `${typePart}${name}`);
|
|
103
|
-
const importsExports = parseImportsExports(imprt.trim());
|
|
104
|
-
const types = [];
|
|
105
|
-
const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];
|
|
106
|
-
if (namedImports) {
|
|
107
|
-
if (namedImports.default) types.push(namedImports.default);
|
|
108
|
-
if (namedImports.names) types.push(...Object.keys(namedImports.names));
|
|
109
|
-
}
|
|
110
|
-
const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];
|
|
111
|
-
if (namespaceImports) {
|
|
112
|
-
if (namespaceImports.namespace) types.push(namespaceImports.namespace);
|
|
113
|
-
if (namespaceImports.default) types.push(namespaceImports.default);
|
|
114
|
-
}
|
|
115
|
-
return types;
|
|
116
|
-
}).filter(Boolean) : [];
|
|
117
|
-
const ancestorNodes = [];
|
|
118
|
-
let currentNode = node;
|
|
119
|
-
while (currentNode?.parent) {
|
|
120
|
-
ancestorNodes.push(currentNode);
|
|
121
|
-
currentNode = currentNode.parent;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* @param {import('eslint').Rule.Node} ancestorNode
|
|
125
|
-
* @returns {import('comment-parser').Spec[]}
|
|
126
|
-
*/
|
|
127
|
-
const getTemplateTags = function(ancestorNode) {
|
|
128
|
-
const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);
|
|
129
|
-
if (!commentNode) return [];
|
|
130
|
-
const jsdoc = parseComment(commentNode, "");
|
|
131
|
-
return jsdoc.tags.filter((tag) => {
|
|
132
|
-
return tag.tag === "template";
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
const templateTags = ancestorNodes.length ? ancestorNodes.flatMap((ancestorNode) => {
|
|
136
|
-
return getTemplateTags(ancestorNode);
|
|
137
|
-
}) : utils.getPresentTags(["template"]);
|
|
138
|
-
const closureGenericTypes = templateTags.flatMap((tag) => {
|
|
139
|
-
return utils.parseClosureTemplateTag(tag);
|
|
140
|
-
});
|
|
141
|
-
const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === "Program";
|
|
142
|
-
/**
|
|
143
|
-
* @param {import("eslint").Scope.Scope | null} scope
|
|
144
|
-
* @returns {Set<string>}
|
|
145
|
-
*/
|
|
146
|
-
const getValidRuntimeIdentifiers = (scope) => {
|
|
147
|
-
const result = /* @__PURE__ */ new Set();
|
|
148
|
-
let scp = scope;
|
|
149
|
-
while (scp) {
|
|
150
|
-
for (const { name } of scp.variables) result.add(name);
|
|
151
|
-
scp = scp.upper;
|
|
152
|
-
}
|
|
153
|
-
return result;
|
|
154
|
-
};
|
|
155
|
-
/**
|
|
156
|
-
* We treat imports differently as we can't introspect their children.
|
|
157
|
-
* @type {string[]}
|
|
158
|
-
*/
|
|
159
|
-
const imports = [];
|
|
160
|
-
const allDefinedTypes = new Set(globalScope.variables.map(({ name }) => {
|
|
161
|
-
return name;
|
|
162
|
-
}).concat(cjsOrESMScope ? globalScope.childScopes.flatMap(({ variables }) => {
|
|
163
|
-
return variables;
|
|
164
|
-
}).flatMap(({ identifiers, name }) => {
|
|
165
|
-
const globalItem = (identifiers?.[0])?.parent;
|
|
166
|
-
switch (globalItem?.type) {
|
|
167
|
-
case "ClassDeclaration": return [name, ...globalItem.body.body.map((item) => {
|
|
168
|
-
const property = (item?.key)?.name;
|
|
169
|
-
/* c8 ignore next 3 -- Guard */
|
|
170
|
-
if (!property) return "";
|
|
171
|
-
return `${name}.${property}`;
|
|
172
|
-
}).filter(Boolean)];
|
|
173
|
-
case "ImportDefaultSpecifier":
|
|
174
|
-
case "ImportNamespaceSpecifier":
|
|
175
|
-
case "ImportSpecifier":
|
|
176
|
-
imports.push(name);
|
|
177
|
-
break;
|
|
178
|
-
case "TSInterfaceDeclaration": return [name, ...globalItem.body.body.map((item) => {
|
|
179
|
-
const property = (item?.key)?.name;
|
|
180
|
-
/* c8 ignore next 3 -- Guard */
|
|
181
|
-
if (!property) return "";
|
|
182
|
-
return `${name}.${property}`;
|
|
183
|
-
}).filter(Boolean)];
|
|
184
|
-
case "VariableDeclarator":
|
|
185
|
-
if (((globalItem?.init)?.callee)?.name === "require") {
|
|
186
|
-
imports.push(
|
|
187
|
-
/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */
|
|
188
|
-
globalItem.id.name
|
|
189
|
-
);
|
|
190
|
-
break;
|
|
191
|
-
}
|
|
192
|
-
return [];
|
|
193
|
-
}
|
|
194
|
-
return [name];
|
|
195
|
-
/* c8 ignore next */
|
|
196
|
-
}) : []).concat(extraTypes).concat(typedefDeclarations).concat(importTags).concat(definedTypes).concat(definedPreferredTypes).concat((() => {
|
|
197
|
-
if (node?.type === "MethodDefinition") return node.parent.body.flatMap((methodOrProp) => {
|
|
198
|
-
if (methodOrProp.type === "MethodDefinition") {
|
|
199
|
-
if (methodOrProp.key.type === "Identifier") return [methodOrProp.key.name, `${(node.parent?.parent)?.id?.name}.${methodOrProp.key.name}`];
|
|
200
|
-
}
|
|
201
|
-
if (methodOrProp.type === "PropertyDefinition") {
|
|
202
|
-
if (methodOrProp.key.type === "Identifier") return [methodOrProp.key.name, `${(node.parent?.parent)?.id?.name}.${methodOrProp.key.name}`];
|
|
203
|
-
}
|
|
204
|
-
/* c8 ignore next 2 -- Not yet built */
|
|
205
|
-
return "";
|
|
206
|
-
}).filter(Boolean);
|
|
207
|
-
return [];
|
|
208
|
-
})()).concat(...getValidRuntimeIdentifiers(node && (sourceCode.getScope && sourceCode.getScope(node) || context.getScope()))).concat(settings.mode === "jsdoc" ? [] : [...settings.mode === "typescript" ? typescriptGlobals : [], ...closureGenericTypes]));
|
|
209
|
-
/**
|
|
210
|
-
* @typedef {{
|
|
211
|
-
* parsedType: import('jsdoc-type-pratt-parser').RootResult;
|
|
212
|
-
* tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
|
|
213
|
-
* line?: import('../iterateJsdoc.js').Integer
|
|
214
|
-
* }
|
|
215
|
-
* }} TypeAndTagInfo
|
|
216
|
-
*/
|
|
217
|
-
/**
|
|
218
|
-
* @param {string} propertyName
|
|
219
|
-
* @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
|
|
220
|
-
* name?: string,
|
|
221
|
-
* type?: string,
|
|
222
|
-
* line?: import('../iterateJsdoc.js').Integer
|
|
223
|
-
* })|import('comment-parser').Spec & {
|
|
224
|
-
* namepathOrURL?: string
|
|
225
|
-
* }
|
|
226
|
-
* ) => undefined|TypeAndTagInfo}
|
|
227
|
-
*/
|
|
228
|
-
const tagToParsedType = (propertyName) => {
|
|
229
|
-
return (tag) => {
|
|
230
|
-
try {
|
|
231
|
-
const potentialType = tag[propertyName];
|
|
232
|
-
return {
|
|
233
|
-
parsedType: mode === "permissive" ? tryParse(potentialType) : parse(potentialType, mode),
|
|
234
|
-
tag
|
|
235
|
-
};
|
|
236
|
-
} catch {
|
|
237
|
-
return void 0;
|
|
238
|
-
}
|
|
239
|
-
};
|
|
240
|
-
};
|
|
241
|
-
const typeTags = utils.filterTags(({ tag }) => {
|
|
242
|
-
return tag !== "import" && utils.tagMightHaveTypePosition(tag) && (tag !== "suppress" || settings.mode !== "closure");
|
|
243
|
-
}).map(tagToParsedType("type"));
|
|
244
|
-
const namepathReferencingTags = utils.filterTags(({ tag }) => {
|
|
245
|
-
return utils.isNamepathReferencingTag(tag);
|
|
246
|
-
}).map(tagToParsedType("name"));
|
|
247
|
-
const namepathOrUrlReferencingTags = utils.filterAllTags(({ tag }) => {
|
|
248
|
-
return utils.isNamepathOrUrlReferencingTag(tag);
|
|
249
|
-
}).map(tagToParsedType("namepathOrURL"));
|
|
250
|
-
const tagsWithTypes = [
|
|
251
|
-
...typeTags,
|
|
252
|
-
...namepathReferencingTags,
|
|
253
|
-
...namepathOrUrlReferencingTags
|
|
254
|
-
].filter(Boolean);
|
|
255
|
-
for (const { parsedType, tag } of tagsWithTypes) traverse(parsedType, (nde, parentNode) => {
|
|
256
|
-
/**
|
|
257
|
-
* @type {import('jsdoc-type-pratt-parser').NameResult & {
|
|
258
|
-
* _parent?: import('jsdoc-type-pratt-parser').NonRootResult
|
|
259
|
-
* }}
|
|
260
|
-
*/
|
|
261
|
-
nde._parent = parentNode;
|
|
262
|
-
const { type, value } = nde;
|
|
263
|
-
let val = value;
|
|
264
|
-
/** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */
|
|
265
|
-
let currNode = nde;
|
|
266
|
-
do {
|
|
267
|
-
currNode = currNode._parent;
|
|
268
|
-
if (!imports.includes(val) && !globals.includes(val) && !importTags.includes(val) && !extraTypes.includes(val) && !typedefDeclarations.includes(val) && currNode && "right" in currNode && currNode.right?.type === "JsdocTypeProperty") val = val + "." + currNode.right.value;
|
|
269
|
-
} while (currNode?.type === "JsdocTypeNamePath");
|
|
270
|
-
if (type === "JsdocTypeName") {
|
|
271
|
-
const structuredTypes = structuredTags[tag.tag]?.type;
|
|
272
|
-
if (!allDefinedTypes.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))) {
|
|
273
|
-
if (!disableReporting) report(`The type '${val}' is undefined.`, null, tag);
|
|
274
|
-
} else if (markVariablesAsUsed && !extraTypes.includes(val)) if (sourceCode.markVariableAsUsed) sourceCode.markVariableAsUsed(val);
|
|
275
|
-
else context.markVariableAsUsed(val);
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
}, {
|
|
279
|
-
iterateAllJsdocs: true,
|
|
280
|
-
meta: {
|
|
281
|
-
docs: {
|
|
282
|
-
description: "Checks that types in jsdoc comments are defined.",
|
|
283
|
-
url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header"
|
|
284
|
-
},
|
|
285
|
-
schema: [{
|
|
286
|
-
additionalProperties: false,
|
|
287
|
-
properties: {
|
|
288
|
-
definedTypes: {
|
|
289
|
-
items: { type: "string" },
|
|
290
|
-
type: "array"
|
|
291
|
-
},
|
|
292
|
-
disableReporting: { type: "boolean" },
|
|
293
|
-
markVariablesAsUsed: { type: "boolean" }
|
|
294
|
-
},
|
|
295
|
-
type: "object"
|
|
296
|
-
}],
|
|
297
|
-
type: "suggestion"
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
//#endregion
|
|
302
|
-
export { noUndefinedTypes_default as default };
|
|
303
|
-
//# sourceMappingURL=noUndefinedTypes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.js","names":["tryParseType","parseType"],"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 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/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 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 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 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 !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 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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"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import iterateJsdoc from "../iterateJsdoc.js";
|
|
2
|
-
|
|
3
|
-
//#region src/rules/requireAsteriskPrefix.js
|
|
4
|
-
var requireAsteriskPrefix_default = iterateJsdoc(({ context, indent, jsdoc, utils }) => {
|
|
5
|
-
const [defaultRequireValue = "always", { tags: tagMap = {} } = {}] = context.options;
|
|
6
|
-
const { source } = jsdoc;
|
|
7
|
-
const always = defaultRequireValue === "always";
|
|
8
|
-
const never = defaultRequireValue === "never";
|
|
9
|
-
/** @type {string} */
|
|
10
|
-
let currentTag;
|
|
11
|
-
source.some(({ number, tokens }) => {
|
|
12
|
-
const { delimiter, description, end, tag } = tokens;
|
|
13
|
-
/**
|
|
14
|
-
* @returns {void}
|
|
15
|
-
*/
|
|
16
|
-
const neverFix = () => {
|
|
17
|
-
tokens.delimiter = "";
|
|
18
|
-
tokens.postDelimiter = "";
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* @param {string} checkValue
|
|
22
|
-
* @returns {boolean}
|
|
23
|
-
*/
|
|
24
|
-
const checkNever = (checkValue) => {
|
|
25
|
-
if (delimiter && delimiter !== "/**" && (never && !tagMap.always?.includes(checkValue) || tagMap.never?.includes(checkValue))) {
|
|
26
|
-
utils.reportJSDoc("Expected JSDoc line to have no prefix.", {
|
|
27
|
-
column: 0,
|
|
28
|
-
line: number
|
|
29
|
-
}, neverFix);
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
return false;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* @returns {void}
|
|
36
|
-
*/
|
|
37
|
-
const alwaysFix = () => {
|
|
38
|
-
if (!tokens.start) tokens.start = indent + " ";
|
|
39
|
-
tokens.delimiter = "*";
|
|
40
|
-
tokens.postDelimiter = tag || description ? " " : "";
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* @param {string} checkValue
|
|
44
|
-
* @returns {boolean}
|
|
45
|
-
*/
|
|
46
|
-
const checkAlways = (checkValue) => {
|
|
47
|
-
if (!delimiter && (always && !tagMap.never?.includes(checkValue) || tagMap.always?.includes(checkValue))) {
|
|
48
|
-
utils.reportJSDoc("Expected JSDoc line to have the prefix.", {
|
|
49
|
-
column: 0,
|
|
50
|
-
line: number
|
|
51
|
-
}, alwaysFix);
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
55
|
-
};
|
|
56
|
-
if (tag) currentTag = tag.slice(1);
|
|
57
|
-
if (end && !tag) return false;
|
|
58
|
-
if (!currentTag) {
|
|
59
|
-
if (tagMap.any?.includes("*description")) return false;
|
|
60
|
-
if (checkNever("*description")) return true;
|
|
61
|
-
if (checkAlways("*description")) return true;
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
if (tagMap.any?.includes(currentTag)) return false;
|
|
65
|
-
if (checkNever(currentTag)) return true;
|
|
66
|
-
if (checkAlways(currentTag)) return true;
|
|
67
|
-
return false;
|
|
68
|
-
});
|
|
69
|
-
}, {
|
|
70
|
-
iterateAllJsdocs: true,
|
|
71
|
-
meta: {
|
|
72
|
-
docs: {
|
|
73
|
-
description: "Requires that each JSDoc line starts with an `*`.",
|
|
74
|
-
url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-asterisk-prefix.md#repos-sticky-header"
|
|
75
|
-
},
|
|
76
|
-
fixable: "code",
|
|
77
|
-
schema: [{
|
|
78
|
-
enum: [
|
|
79
|
-
"always",
|
|
80
|
-
"never",
|
|
81
|
-
"any"
|
|
82
|
-
],
|
|
83
|
-
type: "string"
|
|
84
|
-
}, {
|
|
85
|
-
additionalProperties: false,
|
|
86
|
-
properties: { tags: {
|
|
87
|
-
additionalProperties: false,
|
|
88
|
-
properties: {
|
|
89
|
-
always: {
|
|
90
|
-
items: { type: "string" },
|
|
91
|
-
type: "array"
|
|
92
|
-
},
|
|
93
|
-
any: {
|
|
94
|
-
items: { type: "string" },
|
|
95
|
-
type: "array"
|
|
96
|
-
},
|
|
97
|
-
never: {
|
|
98
|
-
items: { type: "string" },
|
|
99
|
-
type: "array"
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
type: "object"
|
|
103
|
-
} },
|
|
104
|
-
type: "object"
|
|
105
|
-
}],
|
|
106
|
-
type: "layout"
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
//#endregion
|
|
111
|
-
export { requireAsteriskPrefix_default as default };
|
|
112
|
-
//# sourceMappingURL=requireAsteriskPrefix.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requireAsteriskPrefix.js","names":[],"sources":["../../src/rules/requireAsteriskPrefix.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n utils,\n}) => {\n const [\n defaultRequireValue = 'always',\n {\n tags: tagMap = {},\n } = {},\n ] = context.options;\n\n const {\n source,\n } = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n /** @type {string} */\n let currentTag;\n source.some(({\n number,\n tokens,\n }) => {\n const {\n delimiter,\n description,\n end,\n tag,\n } = tokens;\n\n /**\n * @returns {void}\n */\n const neverFix = () => {\n tokens.delimiter = '';\n tokens.postDelimiter = '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkNever = (checkValue) => {\n if (delimiter && delimiter !== '/**' && (\n never && !tagMap.always?.includes(checkValue) ||\n tagMap.never?.includes(checkValue)\n )) {\n utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n column: 0,\n line: number,\n }, neverFix);\n\n return true;\n }\n\n return false;\n };\n\n /**\n * @returns {void}\n */\n const alwaysFix = () => {\n if (!tokens.start) {\n tokens.start = indent + ' ';\n }\n\n tokens.delimiter = '*';\n tokens.postDelimiter = tag || description ? ' ' : '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkAlways = (checkValue) => {\n if (\n !delimiter && (\n always && !tagMap.never?.includes(checkValue) ||\n tagMap.always?.includes(checkValue)\n )\n ) {\n utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n column: 0,\n line: number,\n }, alwaysFix);\n\n return true;\n }\n\n return false;\n };\n\n if (tag) {\n // Remove at sign\n currentTag = tag.slice(1);\n }\n\n if (\n // If this is the end but has a tag, the delimiter will also be\n // populated and will be safely ignored later\n end && !tag\n ) {\n return false;\n }\n\n if (!currentTag) {\n if (tagMap.any?.includes('*description')) {\n return false;\n }\n\n if (checkNever('*description')) {\n return true;\n }\n\n if (checkAlways('*description')) {\n return true;\n }\n\n return false;\n }\n\n if (tagMap.any?.includes(currentTag)) {\n return false;\n }\n\n if (checkNever(currentTag)) {\n return true;\n }\n\n if (checkAlways(currentTag)) {\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'Requires that each JSDoc line starts with an `*`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-asterisk-prefix.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n additionalProperties: false,\n properties: {\n always: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n any: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n never: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":";;;AAEA,oCAAe,aAAa,CAAC,EAC3B,SACA,QACA,OACA,OACD,KAAK;CACJ,MAAM,CACJ,sBAAsB,UACtB,EACE,MAAM,SAAS,CAAE,GAClB,GAAG,CAAE,EACP,GAAG,QAAQ;CAEZ,MAAM,EACJ,QACD,GAAG;CAEJ,MAAM,SAAS,wBAAwB;CACvC,MAAM,QAAQ,wBAAwB;;CAGtC,IAAI;CACJ,OAAO,KAAK,CAAC,EACX,QACA,QACD,KAAK;EACJ,MAAM,EACJ,WACA,aACA,KACA,KACD,GAAG;;;;EAKJ,MAAM,WAAW,MAAM;GACrB,OAAO,YAAY;GACnB,OAAO,gBAAgB;EACxB;;;;;EAMD,MAAM,aAAa,CAAC,eAAe;AACjC,OAAI,aAAa,cAAc,UAC7B,SAAS,CAAC,OAAO,QAAQ,SAAS,WAAW,IAC7C,OAAO,OAAO,SAAS,WAAW,GACjC;IACD,MAAM,YAAY,0CAA0C;KAC1D,QAAQ;KACR,MAAM;IACP,GAAE,SAAS;AAEZ,WAAO;GACR;AAED,UAAO;EACR;;;;EAKD,MAAM,YAAY,MAAM;AACtB,OAAI,CAAC,OAAO,OACV,OAAO,QAAQ,SAAS;GAG1B,OAAO,YAAY;GACnB,OAAO,gBAAgB,OAAO,cAAc,MAAM;EACnD;;;;;EAMD,MAAM,cAAc,CAAC,eAAe;AAClC,OACE,CAAC,cACC,UAAU,CAAC,OAAO,OAAO,SAAS,WAAW,IAC7C,OAAO,QAAQ,SAAS,WAAW,GAErC;IACA,MAAM,YAAY,2CAA2C;KAC3D,QAAQ;KACR,MAAM;IACP,GAAE,UAAU;AAEb,WAAO;GACR;AAED,UAAO;EACR;AAED,MAAI,KAEF,aAAa,IAAI,MAAM,EAAE;AAG3B,MAGE,OAAO,CAAC,IAER,QAAO;AAGT,MAAI,CAAC,YAAY;AACf,OAAI,OAAO,KAAK,SAAS,eAAe,CACtC,QAAO;AAGT,OAAI,WAAW,eAAe,CAC5B,QAAO;AAGT,OAAI,YAAY,eAAe,CAC7B,QAAO;AAGT,UAAO;EACR;AAED,MAAI,OAAO,KAAK,SAAS,WAAW,CAClC,QAAO;AAGT,MAAI,WAAW,WAAW,CACxB,QAAO;AAGT,MAAI,YAAY,WAAW,CACzB,QAAO;AAGT,SAAO;CACR,EAAC;AACH,GAAE;CACD,kBAAkB;CAClB,MAAM;EACJ,MAAM;GACJ,aACE;GACF,KAAK;EACN;EACD,SAAS;EACT,QAAQ,CACN;GACE,MAAM;IACJ;IAAU;IAAS;GACpB;GACD,MAAM;EACP,GACD;GACE,sBAAsB;GACtB,YAAY,EACV,MAAM;IACJ,sBAAsB;IACtB,YAAY;KACV,QAAQ;MACN,OAAO,EACL,MAAM,SACP;MACD,MAAM;KACP;KACD,KAAK;MACH,OAAO,EACL,MAAM,SACP;MACD,MAAM;KACP;KACD,OAAO;MACL,OAAO,EACL,MAAM,SACP;MACD,MAAM;KACP;IACF;IACD,MAAM;GACP,EACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;AACF,EAAC"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import iterateJsdoc from "../iterateJsdoc.js";
|
|
2
|
-
|
|
3
|
-
//#region src/rules/requireDescription.js
|
|
4
|
-
/**
|
|
5
|
-
* @param {string} description
|
|
6
|
-
* @returns {import('../iterateJsdoc.js').Integer}
|
|
7
|
-
*/
|
|
8
|
-
const checkDescription = (description) => {
|
|
9
|
-
return description.trim().split("\n").filter(Boolean).length;
|
|
10
|
-
};
|
|
11
|
-
var requireDescription_default = iterateJsdoc(({ context, jsdoc, report, utils }) => {
|
|
12
|
-
if (utils.avoidDocs()) return;
|
|
13
|
-
const { descriptionStyle = "body" } = context.options[0] || {};
|
|
14
|
-
let targetTagName = utils.getPreferredTagName({
|
|
15
|
-
skipReportingBlockedTag: descriptionStyle !== "tag",
|
|
16
|
-
tagName: "description"
|
|
17
|
-
});
|
|
18
|
-
if (!targetTagName) return;
|
|
19
|
-
const isBlocked = typeof targetTagName === "object" && "blocked" in targetTagName && targetTagName.blocked;
|
|
20
|
-
if (isBlocked) targetTagName = targetTagName.tagName;
|
|
21
|
-
if (descriptionStyle !== "tag") {
|
|
22
|
-
const { description } = utils.getDescription();
|
|
23
|
-
if (checkDescription(description || "")) return;
|
|
24
|
-
if (descriptionStyle === "body") {
|
|
25
|
-
const descTags = utils.getPresentTags(["desc", "description"]);
|
|
26
|
-
if (descTags.length) {
|
|
27
|
-
const [{ tag: tagName }] = descTags;
|
|
28
|
-
report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);
|
|
29
|
-
} else report("Missing JSDoc block description.");
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const functionExamples = isBlocked ? [] : jsdoc.tags.filter(({ tag }) => {
|
|
34
|
-
return tag === targetTagName;
|
|
35
|
-
});
|
|
36
|
-
if (!functionExamples.length) {
|
|
37
|
-
report(descriptionStyle === "any" ? `Missing JSDoc block description or @${targetTagName} declaration.` : `Missing JSDoc @${targetTagName} declaration.`);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
for (const example of functionExamples) if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) report(`Missing JSDoc @${targetTagName} description.`, null, example);
|
|
41
|
-
}, {
|
|
42
|
-
contextDefaults: true,
|
|
43
|
-
meta: {
|
|
44
|
-
docs: {
|
|
45
|
-
description: "Requires that all functions have a description.",
|
|
46
|
-
url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description.md#repos-sticky-header"
|
|
47
|
-
},
|
|
48
|
-
schema: [{
|
|
49
|
-
additionalProperties: false,
|
|
50
|
-
properties: {
|
|
51
|
-
checkConstructors: {
|
|
52
|
-
default: true,
|
|
53
|
-
type: "boolean"
|
|
54
|
-
},
|
|
55
|
-
checkGetters: {
|
|
56
|
-
default: true,
|
|
57
|
-
type: "boolean"
|
|
58
|
-
},
|
|
59
|
-
checkSetters: {
|
|
60
|
-
default: true,
|
|
61
|
-
type: "boolean"
|
|
62
|
-
},
|
|
63
|
-
contexts: {
|
|
64
|
-
items: { anyOf: [{ type: "string" }, {
|
|
65
|
-
additionalProperties: false,
|
|
66
|
-
properties: {
|
|
67
|
-
comment: { type: "string" },
|
|
68
|
-
context: { type: "string" }
|
|
69
|
-
},
|
|
70
|
-
type: "object"
|
|
71
|
-
}] },
|
|
72
|
-
type: "array"
|
|
73
|
-
},
|
|
74
|
-
descriptionStyle: {
|
|
75
|
-
enum: [
|
|
76
|
-
"body",
|
|
77
|
-
"tag",
|
|
78
|
-
"any"
|
|
79
|
-
],
|
|
80
|
-
type: "string"
|
|
81
|
-
},
|
|
82
|
-
exemptedBy: {
|
|
83
|
-
items: { type: "string" },
|
|
84
|
-
type: "array"
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
type: "object"
|
|
88
|
-
}],
|
|
89
|
-
type: "suggestion"
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
//#endregion
|
|
94
|
-
export { requireDescription_default as default };
|
|
95
|
-
//# sourceMappingURL=requireDescription.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requireDescription.js","names":[],"sources":["../../src/rules/requireDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} description\n * @returns {import('../iterateJsdoc.js').Integer}\n */\nconst checkDescription = (description) => {\n return description\n .trim()\n .split('\\n')\n .filter(Boolean)\n .length;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n descriptionStyle = 'body',\n } = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n\n const isBlocked = typeof targetTagName === 'object' && 'blocked' in targetTagName && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = /** @type {{blocked: true; tagName: string;}} */ (\n targetTagName\n ).tagName;\n }\n\n if (descriptionStyle !== 'tag') {\n const {\n description,\n } = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags([\n 'desc', 'description',\n ]);\n if (descTags.length) {\n const [\n {\n tag: tagName,\n },\n ] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n for (const example of functionExamples) {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n descriptionStyle: {\n enum: [\n 'body', 'tag', 'any',\n ],\n type: 'string',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;;AAMA,MAAM,mBAAmB,CAAC,gBAAgB;AACxC,QAAO,YACJ,MAAM,CACN,MAAM,KAAK,CACX,OAAO,QAAQ,CACf;AACJ;AAED,iCAAe,aAAa,CAAC,EAC3B,SACA,OACA,QACA,OACD,KAAK;AACJ,KAAI,MAAM,WAAW,CACnB;CAGF,MAAM,EACJ,mBAAmB,QACpB,GAAG,QAAQ,QAAQ,MAAM,CAAE;CAE5B,IAAI,gBAAgB,MAAM,oBAAoB;EAK5C,yBAAyB,qBAAqB;EAC9C,SAAS;CACV,EAAC;AACF,KAAI,CAAC,cACH;CAGF,MAAM,YAAY,OAAO,kBAAkB,YAAY,aAAa,iBAAiB,cAAc;AACnG,KAAI,WACF,gBACE,cACA;AAGJ,KAAI,qBAAqB,OAAO;EAC9B,MAAM,EACJ,aACD,GAAG,MAAM,gBAAgB;AAC1B,MAAI,iBAAiB,eAAe,GAAG,CACrC;AAGF,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,WAAW,MAAM,eAAe,CACpC,QAAQ,aACT,EAAC;AACF,OAAI,SAAS,QAAQ;IACnB,MAAM,CACJ,EACE,KAAK,SACN,CACF,GAAG;IACJ,OAAO,CAAC,YAAY,EAAE,QAAQ,sFAAsF,EAAE,QAAQ,MAAM,CAAC,CAAC;GACvI,OACC,OAAO,mCAAmC;AAG5C;EACD;CACF;CAED,MAAM,mBAAmB,YACvB,CAAE,IACF,MAAM,KAAK,OAAO,CAAC,EACjB,KACD,KAAK;AACJ,SAAO,QAAQ;CAChB,EAAC;AAEJ,KAAI,CAAC,iBAAiB,QAAQ;EAC5B,OACE,qBAAqB,QACnB,CAAC,oCAAoC,EAAE,cAAc,aAAa,CAAC,GACnE,CAAC,eAAe,EAAE,cAAc,aAAa,CAAC,CACjD;AAED;CACD;AAED,MAAK,MAAM,WAAW,iBACpB,KAAI,CAAC,iBAAiB,GAAG,QAAQ,KAAK,CAAC,EAAE,MAAM,kBAAkB,QAAQ,EAAE,CAAC,EAC1E,OAAO,CAAC,eAAe,EAAE,cAAc,aAAa,CAAC,EAAE,MAAM,QAAQ;AAG1E,GAAE;CACD,iBAAiB;CACjB,MAAM;EACJ,MAAM;GACJ,aAAa;GACb,KAAK;EACN;EACD,QAAQ,CACN;GACE,sBAAsB;GACtB,YAAY;IACV,mBAAmB;KACjB,SAAS;KACT,MAAM;IACP;IACD,cAAc;KACZ,SAAS;KACT,MAAM;IACP;IACD,cAAc;KACZ,SAAS;KACT,MAAM;IACP;IACD,UAAU;KACR,OAAO,EACL,OAAO,CACL,EACE,MAAM,SACP,GACD;MACE,sBAAsB;MACtB,YAAY;OACV,SAAS,EACP,MAAM,SACP;OACD,SAAS,EACP,MAAM,SACP;MACF;MACD,MAAM;KACP,CACF,EACF;KACD,MAAM;IACP;IACD,kBAAkB;KAChB,MAAM;MACJ;MAAQ;MAAO;KAChB;KACD,MAAM;IACP;IACD,YAAY;KACV,OAAO,EACL,MAAM,SACP;KACD,MAAM;IACP;GACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;AACF,EAAC"}
|