eslint-plugin-jsdoc 52.0.4 → 53.0.1
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 +18 -35
- package/dist/WarnSettings.cjs.map +1 -1
- package/dist/WarnSettings.js +20 -0
- package/dist/WarnSettings.js.map +1 -0
- package/dist/_virtual/rolldown_runtime.cjs +32 -0
- package/dist/_virtual/rolldown_runtime.js +11 -0
- package/dist/alignTransform.cjs +224 -305
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/alignTransform.js +241 -0
- package/dist/alignTransform.js.map +1 -0
- package/dist/defaultTagOrder.cjs +132 -43
- package/dist/defaultTagOrder.cjs.map +1 -1
- package/dist/defaultTagOrder.js +134 -0
- package/dist/defaultTagOrder.js.map +1 -0
- package/dist/exportParser.cjs +478 -696
- package/dist/exportParser.cjs.map +1 -1
- package/dist/exportParser.js +518 -0
- package/dist/exportParser.js.map +1 -0
- package/dist/getDefaultTagStructureForMode.cjs +184 -288
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getDefaultTagStructureForMode.js +188 -0
- package/dist/getDefaultTagStructureForMode.js.map +1 -0
- package/dist/getJsdocProcessorPlugin.cjs +364 -550
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.d.cts +70 -0
- package/dist/getJsdocProcessorPlugin.d.cts.map +1 -0
- package/dist/getJsdocProcessorPlugin.d.ts +68 -65
- package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
- package/dist/getJsdocProcessorPlugin.js +383 -0
- package/dist/getJsdocProcessorPlugin.js.map +1 -0
- package/dist/index.cjs +2 -410
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -17
- package/dist/index.js +3 -0
- package/dist/iterateJsdoc.cjs +1539 -1988
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/iterateJsdoc.d.cts +472 -0
- package/dist/iterateJsdoc.d.cts.map +1 -0
- package/dist/iterateJsdoc.d.ts +359 -349
- package/dist/iterateJsdoc.d.ts.map +1 -1
- package/dist/iterateJsdoc.js +1628 -0
- package/dist/iterateJsdoc.js.map +1 -0
- package/dist/jsdocUtils.cjs +1009 -1376
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/jsdocUtils.js +1123 -0
- package/dist/jsdocUtils.js.map +1 -0
- package/dist/plugin.cjs +427 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.js +427 -0
- package/dist/plugin.js.map +1 -0
- package/dist/rules/checkAccess.cjs +29 -36
- package/dist/rules/checkAccess.cjs.map +1 -1
- package/dist/rules/checkAccess.js +33 -0
- package/dist/rules/checkAccess.js.map +1 -0
- package/dist/rules/checkAlignment.cjs +41 -54
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkAlignment.js +47 -0
- package/dist/rules/checkAlignment.js.map +1 -0
- package/dist/rules/checkExamples.cjs +327 -484
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkExamples.js +348 -0
- package/dist/rules/checkExamples.js.map +1 -0
- package/dist/rules/checkIndentation.cjs +50 -65
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkIndentation.js +59 -0
- package/dist/rules/checkIndentation.js.map +1 -0
- package/dist/rules/checkLineAlignment.cjs +220 -311
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.js +229 -0
- package/dist/rules/checkLineAlignment.js.map +1 -0
- package/dist/rules/checkParamNames.cjs +227 -335
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkParamNames.js +237 -0
- package/dist/rules/checkParamNames.js.map +1 -0
- package/dist/rules/checkPropertyNames.cjs +78 -106
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.js +88 -0
- package/dist/rules/checkPropertyNames.js.map +1 -0
- package/dist/rules/checkSyntax.cjs +21 -34
- package/dist/rules/checkSyntax.cjs.map +1 -1
- package/dist/rules/checkSyntax.js +25 -0
- package/dist/rules/checkSyntax.js.map +1 -0
- package/dist/rules/checkTagNames.cjs +188 -210
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTagNames.js +191 -0
- package/dist/rules/checkTagNames.js.map +1 -0
- package/dist/rules/checkTemplateNames.cjs +121 -178
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.js +124 -0
- package/dist/rules/checkTemplateNames.js.map +1 -0
- package/dist/rules/checkTypes.cjs +291 -385
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkTypes.js +299 -0
- package/dist/rules/checkTypes.js.map +1 -0
- package/dist/rules/checkValues.cjs +100 -146
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/checkValues.js +103 -0
- package/dist/rules/checkValues.js.map +1 -0
- package/dist/rules/convertToJsdocComments.cjs +228 -306
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.js +231 -0
- package/dist/rules/convertToJsdocComments.js.map +1 -0
- package/dist/rules/emptyTags.cjs +62 -72
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/emptyTags.js +67 -0
- package/dist/rules/emptyTags.js.map +1 -0
- package/dist/rules/implementsOnClasses.cjs +36 -56
- package/dist/rules/implementsOnClasses.cjs.map +1 -1
- package/dist/rules/implementsOnClasses.js +40 -0
- package/dist/rules/implementsOnClasses.js.map +1 -0
- package/dist/rules/importsAsDependencies.cjs +62 -99
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.js +68 -0
- package/dist/rules/importsAsDependencies.js.map +1 -0
- package/dist/rules/informativeDocs.cjs +105 -142
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/informativeDocs.js +110 -0
- package/dist/rules/informativeDocs.js.map +1 -0
- package/dist/rules/linesBeforeBlock.cjs +70 -105
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.js +75 -0
- package/dist/rules/linesBeforeBlock.js.map +1 -0
- package/dist/rules/matchDescription.cjs +160 -222
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchDescription.js +167 -0
- package/dist/rules/matchDescription.js.map +1 -0
- package/dist/rules/matchName.cjs +73 -128
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/matchName.js +77 -0
- package/dist/rules/matchName.js.map +1 -0
- package/dist/rules/multilineBlocks.cjs +235 -352
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/multilineBlocks.js +245 -0
- package/dist/rules/multilineBlocks.js.map +1 -0
- package/dist/rules/noBadBlocks.cjs +63 -86
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.js +68 -0
- package/dist/rules/noBadBlocks.js.map +1 -0
- package/dist/rules/noBlankBlockDescriptions.cjs +35 -57
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.js +41 -0
- package/dist/rules/noBlankBlockDescriptions.js.map +1 -0
- package/dist/rules/noBlankBlocks.cjs +26 -48
- package/dist/rules/noBlankBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlocks.js +30 -0
- package/dist/rules/noBlankBlocks.js.map +1 -0
- package/dist/rules/noDefaults.cjs +52 -79
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noDefaults.js +56 -0
- package/dist/rules/noDefaults.js.map +1 -0
- package/dist/rules/noMissingSyntax.cjs +115 -165
- package/dist/rules/noMissingSyntax.cjs.map +1 -1
- package/dist/rules/noMissingSyntax.js +126 -0
- package/dist/rules/noMissingSyntax.js.map +1 -0
- package/dist/rules/noMultiAsterisks.cjs +48 -89
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.js +58 -0
- package/dist/rules/noMultiAsterisks.js.map +1 -0
- package/dist/rules/noRestrictedSyntax.cjs +45 -79
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.js +49 -0
- package/dist/rules/noRestrictedSyntax.js.map +1 -0
- package/dist/rules/noTypes.cjs +59 -80
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noTypes.js +65 -0
- package/dist/rules/noTypes.js.map +1 -0
- package/dist/rules/noUndefinedTypes.cjs +297 -388
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.js +303 -0
- package/dist/rules/noUndefinedTypes.js.map +1 -0
- package/dist/rules/requireAsteriskPrefix.cjs +108 -159
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js +112 -0
- package/dist/rules/requireAsteriskPrefix.js.map +1 -0
- package/dist/rules/requireDescription.cjs +89 -129
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescription.js +95 -0
- package/dist/rules/requireDescription.js.map +1 -0
- package/dist/rules/requireDescriptionCompleteSentence.cjs +201 -262
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +220 -0
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -0
- package/dist/rules/requireExample.cjs +73 -104
- package/dist/rules/requireExample.cjs.map +1 -1
- package/dist/rules/requireExample.js +77 -0
- package/dist/rules/requireExample.js.map +1 -0
- package/dist/rules/requireFileOverview.cjs +75 -129
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireFileOverview.js +81 -0
- package/dist/rules/requireFileOverview.js.map +1 -0
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +85 -133
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +89 -0
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -0
- package/dist/rules/requireJsdoc.cjs +384 -557
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireJsdoc.js +404 -0
- package/dist/rules/requireJsdoc.js.map +1 -0
- package/dist/rules/requireParam.cjs +336 -526
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireParam.js +344 -0
- package/dist/rules/requireParam.js.map +1 -0
- package/dist/rules/requireParamDescription.cjs +55 -80
- package/dist/rules/requireParamDescription.cjs.map +1 -1
- package/dist/rules/requireParamDescription.js +59 -0
- package/dist/rules/requireParamDescription.js.map +1 -0
- package/dist/rules/requireParamName.cjs +32 -50
- package/dist/rules/requireParamName.cjs.map +1 -1
- package/dist/rules/requireParamName.js +36 -0
- package/dist/rules/requireParamName.js.map +1 -0
- package/dist/rules/requireParamType.cjs +55 -80
- package/dist/rules/requireParamType.cjs.map +1 -1
- package/dist/rules/requireParamType.js +59 -0
- package/dist/rules/requireParamType.js.map +1 -0
- package/dist/rules/requireProperty.cjs +31 -42
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requireProperty.js +35 -0
- package/dist/rules/requireProperty.js.map +1 -0
- package/dist/rules/requirePropertyDescription.cjs +17 -25
- package/dist/rules/requirePropertyDescription.cjs.map +1 -1
- package/dist/rules/requirePropertyDescription.js +21 -0
- package/dist/rules/requirePropertyDescription.js.map +1 -0
- package/dist/rules/requirePropertyName.cjs +17 -25
- package/dist/rules/requirePropertyName.cjs.map +1 -1
- package/dist/rules/requirePropertyName.js +21 -0
- package/dist/rules/requirePropertyName.js.map +1 -0
- package/dist/rules/requirePropertyType.cjs +17 -25
- package/dist/rules/requirePropertyType.cjs.map +1 -1
- package/dist/rules/requirePropertyType.js +21 -0
- package/dist/rules/requirePropertyType.js.map +1 -0
- package/dist/rules/requireReturns.cjs +125 -203
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturns.js +131 -0
- package/dist/rules/requireReturns.js.map +1 -0
- package/dist/rules/requireReturnsCheck.cjs +60 -103
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.js +66 -0
- package/dist/rules/requireReturnsCheck.js.map +1 -0
- package/dist/rules/requireReturnsDescription.cjs +39 -54
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.js +43 -0
- package/dist/rules/requireReturnsDescription.js.map +1 -0
- package/dist/rules/requireReturnsType.cjs +32 -50
- package/dist/rules/requireReturnsType.cjs.map +1 -1
- package/dist/rules/requireReturnsType.js +36 -0
- package/dist/rules/requireReturnsType.js.map +1 -0
- package/dist/rules/requireTemplate.cjs +119 -178
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireTemplate.js +122 -0
- package/dist/rules/requireTemplate.js.map +1 -0
- package/dist/rules/requireThrows.cjs +61 -95
- package/dist/rules/requireThrows.cjs.map +1 -1
- package/dist/rules/requireThrows.js +67 -0
- package/dist/rules/requireThrows.js.map +1 -0
- package/dist/rules/requireYields.cjs +106 -166
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYields.js +115 -0
- package/dist/rules/requireYields.js.map +1 -0
- package/dist/rules/requireYieldsCheck.cjs +96 -152
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.js +105 -0
- package/dist/rules/requireYieldsCheck.js.map +1 -0
- package/dist/rules/sortTags.cjs +258 -444
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/sortTags.js +262 -0
- package/dist/rules/sortTags.js.map +1 -0
- package/dist/rules/tagLines.cjs +179 -266
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/tagLines.js +183 -0
- package/dist/rules/tagLines.js.map +1 -0
- package/dist/rules/textEscaping.cjs +92 -127
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/textEscaping.js +102 -0
- package/dist/rules/textEscaping.js.map +1 -0
- package/dist/rules/validTypes.cjs +252 -265
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/rules/validTypes.js +259 -0
- package/dist/rules/validTypes.js.map +1 -0
- package/dist/tagNames.cjs +134 -170
- package/dist/tagNames.cjs.map +1 -1
- package/dist/tagNames.js +144 -0
- package/dist/tagNames.js.map +1 -0
- package/dist/utils/hasReturnValue.cjs +246 -474
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/dist/utils/hasReturnValue.js +265 -0
- package/dist/utils/hasReturnValue.js.map +1 -0
- package/package.json +40 -24
- package/dist/generateRule.cjs +0 -242
- package/dist/generateRule.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/src/WarnSettings.js +0 -34
- package/src/alignTransform.js +0 -358
- package/src/defaultTagOrder.js +0 -169
- package/src/exportParser.js +0 -978
- package/src/getDefaultTagStructureForMode.js +0 -969
- package/src/getJsdocProcessorPlugin.js +0 -672
- package/src/index.js +0 -530
- package/src/iterateJsdoc.js +0 -2518
- package/src/jsdocUtils.js +0 -1896
- package/src/rules/checkAccess.js +0 -45
- package/src/rules/checkAlignment.js +0 -63
- package/src/rules/checkExamples.js +0 -589
- package/src/rules/checkIndentation.js +0 -75
- package/src/rules/checkLineAlignment.js +0 -372
- package/src/rules/checkParamNames.js +0 -474
- package/src/rules/checkPropertyNames.js +0 -152
- package/src/rules/checkSyntax.js +0 -30
- package/src/rules/checkTagNames.js +0 -314
- package/src/rules/checkTemplateNames.js +0 -204
- package/src/rules/checkTypes.js +0 -535
- package/src/rules/checkValues.js +0 -248
- package/src/rules/convertToJsdocComments.js +0 -398
- package/src/rules/emptyTags.js +0 -98
- package/src/rules/implementsOnClasses.js +0 -64
- package/src/rules/importsAsDependencies.js +0 -133
- package/src/rules/informativeDocs.js +0 -189
- package/src/rules/linesBeforeBlock.js +0 -134
- package/src/rules/matchDescription.js +0 -286
- package/src/rules/matchName.js +0 -151
- package/src/rules/multilineBlocks.js +0 -493
- package/src/rules/noBadBlocks.js +0 -119
- package/src/rules/noBlankBlockDescriptions.js +0 -69
- package/src/rules/noBlankBlocks.js +0 -53
- package/src/rules/noDefaults.js +0 -85
- package/src/rules/noMissingSyntax.js +0 -195
- package/src/rules/noMultiAsterisks.js +0 -134
- package/src/rules/noRestrictedSyntax.js +0 -91
- package/src/rules/noTypes.js +0 -93
- package/src/rules/noUndefinedTypes.js +0 -543
- package/src/rules/requireAsteriskPrefix.js +0 -190
- package/src/rules/requireDescription.js +0 -161
- package/src/rules/requireDescriptionCompleteSentence.js +0 -335
- package/src/rules/requireExample.js +0 -118
- package/src/rules/requireFileOverview.js +0 -154
- package/src/rules/requireHyphenBeforeParamDescription.js +0 -176
- package/src/rules/requireJsdoc.js +0 -743
- package/src/rules/requireParam.js +0 -602
- package/src/rules/requireParamDescription.js +0 -89
- package/src/rules/requireParamName.js +0 -55
- package/src/rules/requireParamType.js +0 -89
- package/src/rules/requireProperty.js +0 -48
- package/src/rules/requirePropertyDescription.js +0 -25
- package/src/rules/requirePropertyName.js +0 -25
- package/src/rules/requirePropertyType.js +0 -25
- package/src/rules/requireReturns.js +0 -238
- package/src/rules/requireReturnsCheck.js +0 -145
- package/src/rules/requireReturnsDescription.js +0 -59
- package/src/rules/requireReturnsType.js +0 -51
- package/src/rules/requireTemplate.js +0 -201
- package/src/rules/requireThrows.js +0 -111
- package/src/rules/requireYields.js +0 -216
- package/src/rules/requireYieldsCheck.js +0 -208
- package/src/rules/sortTags.js +0 -558
- package/src/rules/tagLines.js +0 -359
- package/src/rules/textEscaping.js +0 -154
- package/src/rules/validTypes.js +0 -401
- package/src/tagNames.js +0 -238
- package/src/utils/hasReturnValue.js +0 -572
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsdocUtils.js","names":["getDefaultTagStructureForMode","WarnSettings"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n closureTags,\n jsdocTags,\n typeScriptTags,\n} from './tagNames.js';\nimport WarnSettings from './WarnSettings.js';\nimport {\n tryParse,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {number} Integer\n */\n/**\n * @typedef {import('./utils/hasReturnValue.js').ESTreeOrTypeScriptNode} ESTreeOrTypeScriptNode\n */\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"|\"permissive\"} ParserMode\n */\n\n/**\n * @type {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nlet tagStructure;\n\n/**\n * @param {ParserMode} mode\n * @returns {void}\n */\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n/**\n * @typedef {undefined|string|{\n * name: Integer,\n * restElement: boolean\n * }|{\n * isRestProperty: boolean|undefined,\n * name: string,\n * restElement: boolean\n * }|{\n * name: string,\n * restElement: boolean\n * }} ParamCommon\n */\n/**\n * @typedef {ParamCommon|[string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string,\n * })]|NestedParamInfo} ParamNameInfo\n */\n\n/**\n * @typedef {{\n * hasPropertyRest: boolean,\n * hasRestElement: boolean,\n * names: string[],\n * rests: boolean[],\n * }} FlattendRootInfo\n */\n/**\n * @typedef {[string, (string[]|ParamInfo[])]} NestedParamInfo\n */\n/**\n * @typedef {ParamCommon|\n * [string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string\n * })]|\n * NestedParamInfo} ParamInfo\n */\n\n/**\n * Given a nested array of property names, reduce them to a single array,\n * appending the name of the root element along the way if present.\n * @callback FlattenRoots\n * @param {ParamInfo[]} params\n * @param {string} [root]\n * @returns {FlattendRootInfo}\n */\n\n/** @type {FlattenRoots} */\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n\n /**\n * @type {boolean[]}\n */\n const rests = [];\n\n const names = params.reduce(\n /**\n * @param {string[]} acc\n * @param {ParamInfo} cur\n * @returns {string[]}\n */\n (acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = /** @type {string[]} */ ([\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean));\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if ('isRestProperty' in cur && cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if ('restElement' in cur && cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${String(cur.name)}` : String(cur.name));\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, [],\n );\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {import('@typescript-eslint/types').TSESTree.TSIndexSignature|\n * import('@typescript-eslint/types').TSESTree.TSConstructSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSCallSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSPropertySignature} propSignature\n * @returns {undefined|string|[string, string[]]}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name,\n propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return /** @type {string} */ (\n getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n member\n ),\n )\n );\n }),\n ];\n }\n\n return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name;\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null} functionNode\n * @param {boolean} [checkDefaultObjects]\n * @throws {Error}\n * @returns {ParamNameInfo[]}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n /* eslint-disable complexity -- Temporary */\n /**\n * @param {import('estree').Identifier|import('estree').AssignmentPattern|\n * import('estree').ObjectPattern|import('estree').Property|\n * import('estree').RestElement|import('estree').ArrayPattern|\n * import('@typescript-eslint/types').TSESTree.TSParameterProperty|\n * import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.RestElement|\n * import('@typescript-eslint/types').TSESTree.Identifier|\n * import('@typescript-eslint/types').TSESTree.ObjectPattern|\n * import('@typescript-eslint/types').TSESTree.BindingName|\n * import('@typescript-eslint/types').TSESTree.Parameter\n * } param\n * @param {boolean} [isProperty]\n * @returns {ParamNameInfo|[string, ParamNameInfo[]]}\n */\n const getParamName = (param, isProperty) => {\n /* eslint-enable complexity -- Temporary */\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).typeAnnotation :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier|import('@typescript-eslint/types').TSESTree.ObjectPattern} */\n (param).typeAnnotation;\n\n if (typeAnnotation?.typeAnnotation?.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */\n (member),\n );\n });\n\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: 'name' in param ? param.name : undefined,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).name :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param\n ).name,\n flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (\n param.type === 'ObjectPattern' ||\n ('left' in param &&\n (\n param\n ).left.type === 'ObjectPattern')\n ) {\n const properties = /** @type {import('@typescript-eslint/types').TSESTree.ObjectPattern} */ (\n param\n ).properties ||\n /** @type {import('estree').ObjectPattern} */\n (\n /** @type {import('@typescript-eslint/types').TSESTree.AssignmentPattern} */ (\n param\n ).left\n )?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n switch (param.value.type) {\n case 'ArrayPattern': {\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n }\n\n case 'ObjectPattern': {\n return [\n /** @type {import('estree').Identifier} */ (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value\n ).properties.map((prop) => {\n return /** @type {string|[string, string[]]} */ (getParamName(prop, isProperty));\n }),\n ];\n }\n\n case 'AssignmentPattern': {\n switch (param.value.left.type) {\n case 'ArrayPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value.left\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n /** @type {import('estree').Identifier} */ (\n param.key\n ).name,\n /** @type {import('estree').AssignmentPattern} */ (\n param.value\n ).right.properties.map((prop) => {\n return /** @type {string} */ (getParamName(\n /** @type {import('estree').Property} */\n (prop),\n isProperty,\n ));\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value.left\n ).properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n /* c8 ignore next 2 -- `raw` may not be present in all parsers */\n return /** @type {string} */ (param.key.raw ||\n param.key.value);\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (\n param.type === 'ArrayPattern' ||\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left?.type === 'ArrayPattern'\n ) {\n const elements = /** @type {import('estree').ArrayPattern} */ (\n param\n ).elements || /** @type {import('estree').ArrayPattern} */ (\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left\n )?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'ExperimentalRestProperty', 'RestElement',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.RestElement} */ (\n param\n // @ts-expect-error Ok\n ).argument).name ?? param?.argument?.elements?.map(({\n // @ts-expect-error Ok\n name,\n }) => {\n return name;\n }),\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSParameterProperty} */ (\n param\n ).parameter\n ),\n true,\n );\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n if (!functionNode) {\n return [];\n }\n\n return (/** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params || /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n functionNode\n ).value?.params || []).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * `foo` or `foo.bar`.\n * @param {import('comment-parser').Block} jsdoc\n * @param {string} targetTagName\n * @returns {{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {ParserMode|undefined} mode\n * @param {Reporter} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'closure':\n case 'permissive':\n return closureTags;\n case 'jsdoc':\n return jsdocTags; case 'typescript':\n return typeScriptTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\nconst getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n description,\n end,\n lineEnd,\n name,\n postDelimiter,\n postTag,\n tag,\n type,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n};\n\n/**\n * @typedef {{\n * report: (descriptor: import('eslint').Rule.ReportDescriptor) => void\n * }} Reporter\n */\n\n/**\n * @param {string} name\n * @param {ParserMode|undefined} mode\n * @param {TagNamePreference} tagPreference\n * @param {Reporter} context\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagNameSimple = (\n name,\n mode,\n tagPreference = {},\n // eslint-disable-next-line unicorn/no-object-as-default-parameter -- Ok\n context = {\n report () {\n // No-op\n },\n },\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /v, ''), value,\n ];\n }),\n );\n\n if (Object.hasOwn(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\nconst filterTags = (jsdoc, filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\nconst getTags = (jsdoc, tagName) => {\n return filterTags(jsdoc, (item) => {\n return item.tag === tagName;\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {{\n * tagName: string,\n * context?: import('eslint').Rule.RuleContext,\n * mode?: ParserMode,\n * report?: import('./iterateJsdoc.js').Report\n * tagNamePreference?: TagNamePreference\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string,\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\nconst getPreferredTagName = (jsdoc, {\n allowObjectReturn = false,\n context,\n tagName,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n mode,\n report = () => {},\n skipReportingBlockedTag = false,\n tagNamePreference,\n}) => {\n const ret = getPreferredTagNameSimple(tagName, mode, tagNamePreference, context);\n const isObject = ret && typeof ret === 'object';\n if (hasTag(jsdoc, tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, getTags(jsdoc, tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {object} cfg\n * @param {import('eslint').Rule.RuleContext} [cfg.context]\n * @param {ParserMode} [cfg.mode]\n * @param {import('./iterateJsdoc.js').Report} [cfg.report]\n * @param {TagNamePreference} [cfg.tagNamePreference]\n * @param {boolean} [cfg.skipReportingBlockedTag]\n * @returns {void}\n */\nconst forEachPreferredTag = (\n jsdoc, tagName, arrayHandler,\n {\n context,\n mode,\n report,\n skipReportingBlockedTag = false,\n tagNamePreference,\n } = {},\n) => {\n const targetTagName = /** @type {string|false} */ (\n getPreferredTagName(jsdoc, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagName,\n tagNamePreference,\n })\n );\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(\n /**\n * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n */ (\n matchingJsdocTag\n ), targetTagName,\n );\n }\n};\n\n/**\n * Get all tags, inline tags and inline tags in tags\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\nconst getAllTags = (jsdoc) => {\n return [\n ...jsdoc.tags,\n ...jsdoc.inlineTags.map((inlineTag) => {\n // Tags don't have source or line numbers, so add before returning\n let line = -1;\n for (const {\n tokens: {\n description,\n },\n } of jsdoc.source) {\n line++;\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n break;\n }\n }\n\n inlineTag.line = line;\n\n return inlineTag;\n }),\n ...jsdoc.tags.flatMap((tag) => {\n let tagBegins = -1;\n for (const {\n tokens: {\n tag: tg,\n },\n } of jsdoc.source) {\n tagBegins++;\n if (tg) {\n break;\n }\n }\n\n for (const inlineTag of tag.inlineTags) {\n /** @type {import('./iterateJsdoc.js').Integer} */\n let line = 0;\n for (const {\n number,\n tokens: {\n description,\n },\n } of tag.source) {\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n line = number;\n break;\n }\n }\n\n inlineTag.line = tagBegins + line - 1;\n }\n\n return (\n /**\n * @type {import('comment-parser').Spec & {\n * inlineTags: import('@es-joy/jsdoccomment').JsdocInlineTagNoType[]\n * }}\n */ (\n tag\n ).inlineTags\n );\n }),\n ];\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string[]} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment has an undefined type.\n * @param {import('comment-parser').Spec|null|undefined} tag\n * the tag which should be checked.\n * @param {ParserMode} mode\n * @returns {boolean}\n * true in case a defined type is undeclared; otherwise false.\n */\nconst mayBeUndefinedTypeTag = (tag, mode) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return true;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n\n // Exit early if matching\n if (\n tagType === 'undefined' || tagType === 'void' ||\n tagType === '*' || tagType === 'any'\n ) {\n return true;\n }\n\n let parsedTypes;\n try {\n parsedTypes = tryParse(\n tagType,\n mode === 'permissive' ? undefined : [\n mode,\n ],\n );\n } catch {\n // Ignore\n }\n\n if (\n // We do not traverse deeply as it could be, e.g., `Promise<void>`\n parsedTypes &&\n parsedTypes.type === 'JsdocTypeUnion' &&\n parsedTypes.elements.find((elem) => {\n return elem.type === 'JsdocTypeUndefined' ||\n elem.type === 'JsdocTypeName' && elem.value === 'void';\n })) {\n return true;\n }\n\n // In any other case, a type is present\n return false;\n};\n\n/**\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} map\n * @param {string} tag\n * @returns {Map<string, string|string[]|boolean|undefined>}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return /** @type {Map<string, string | boolean>} */ (map.get(tag));\n};\n\n/**\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {void}\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n required = [],\n type,\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('namepathRole', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param {ParserMode} mode\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n /* c8 ignore next 3 */\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('namepathRole') === 'namepath-defining';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathOrUrlReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-or-url-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('typeRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|string}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = /** @type {boolean|undefined} */ (tagStruct.get('typeAllowed'));\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('namepathRole');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const nampathRole = tagStruct.get('namepathRole');\n\n return nampathRole !== false &&\n namepathTypes.has(/** @type {string} */ (nampathRole));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('nameRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean} */ (tagStruct.get('typeOrNameRequired'));\n};\n\n/**\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/* eslint-disable complexity -- Temporary */\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n /* eslint-enable complexity -- Temporary */\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'ArrayExpression':\n\n case 'ArrayPattern':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n /* c8 ignore next 2 -- In Babel? */\n case 'CallExpression':\n // @ts-expect-error In Babel?\n case 'OptionalCallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ClassProperty':\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectProperty':\n /* c8 ignore next 2 -- In Babel? */\n case 'Property':\n\n case 'PropertyDefinition':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n\n case 'ConditionalExpression':\n\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'DoWhileStatement':\n case 'ForInStatement':\n\n case 'ForOfStatement':\n\n case 'ForStatement':\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n // ?.\n /* c8 ignore next 2 -- In Babel? */\n case 'MemberExpression':\n // @ts-expect-error In Babel?\n case 'OptionalMemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n case 'ObjectExpression':\n /* eslint-disable no-fallthrough */\n case 'ObjectPattern':\n /* eslint-enable no-fallthrough */\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectMethod':\n /* c8 ignore next 6 -- In Babel? */\n // @ts-expect-error In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n // @ts-expect-error In Babel?\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n case 'SpreadElement':\n\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(\n node.handler && node.handler.body, checkYieldReturnValue,\n ) ||\n hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n (node.finalizer),\n checkYieldReturnValue,\n );\n }\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (\n /** @type {import('eslint').Rule.Node} */ (\n node\n ).parent.type === 'VariableDeclarator'\n ) {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).generator && (\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).expression || hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */\n (node).body,\n checkYieldReturnValue,\n )\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [innerFunction]\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'ArrowFunctionExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'DoWhileStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'ForStatement':\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /v.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n * @see {@link https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {@link https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim().replace(/^\\[?(?<name>.*?)=.*$/v, '$<name>');\n });\n};\n\n/**\n * @typedef {true|string[]} DefaultContexts\n */\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n * @param {import('eslint').Rule.RuleContext} context\n * @param {DefaultContexts|undefined} defaultContexts\n * @param {{\n * contexts?: import('./iterateJsdoc.js').Context[]\n * }} settings\n * @returns {(string|import('./iterateJsdoc.js').ContextObject)[]}\n */\nconst enforcedContexts = (context, defaultContexts, settings) => {\n const contexts = context.options[0]?.contexts || settings.contexts || (defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ] : defaultContexts);\n\n return contexts;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Context[]} contexts\n * @param {import('./iterateJsdoc.js').CheckJsdoc} checkJsdoc\n * @param {import('@es-joy/jsdoccomment').CommentHandler} [handler]\n * @returns {import('eslint').Rule.RuleListener}\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n /** @type {import('eslint').Rule.RuleListener} */\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n /** @type {string} */\n let property;\n\n /** @type {(node: import('eslint').Rule.Node) => void} */\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(\n null,\n {\n ...selInfo,\n comment: prop.comment,\n },\n /**\n * @type {(jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean}\n */\n (/** @type {import('@es-joy/jsdoccomment').CommentHandler} */ (\n handler\n ).bind(null, prop.comment)),\n );\n } else {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */ (properties[property]);\n properties[property] = old ?\n /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */\n function (node) {\n old(node);\n value(node);\n } :\n value;\n }\n\n return properties;\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'arg', 'argument', 'param', 'prop', 'property',\n 'return',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'template',\n]);\n\n/**\n * @typedef {{\n * [key: string]: false|string|\n * {message: string, replacement?: string}\n * }} TagNamePreference\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\nconst getTagsByType = (context, mode, tags) => {\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const tagsWithoutNames = [];\n const tagsWithNames = tags.filter((tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\n/**\n * @param {import('eslint').SourceCode|{\n * text: string\n * }} sourceCode\n * @returns {string}\n */\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/v)?.[1] ?? '') + ' ';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n node?.parent\n )?.kind === 'constructor';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isGetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (\n node.parent\n )?.kind === 'get';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isSetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */(\n node.parent\n )?.kind === 'set';\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessorPair = (node) => {\n const {\n key,\n kind: sourceKind,\n type,\n } =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (node);\n\n const sourceName =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n key\n ).name;\n\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const sibling = type === 'MethodDefinition' ?\n /** @type {import('@typescript-eslint/types').TSESTree.ClassBody} */ (\n node.parent\n ).body :\n /** @type {import('@typescript-eslint/types').TSESTree.ObjectExpression} */ (\n node.parent\n ).properties;\n\n return (\n sibling.some((child) => {\n const {\n key: ky,\n kind,\n } = /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (child);\n\n const name =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n ky\n ).name;\n\n return kind === oppositeKind && name === sourceName;\n })\n );\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {import('eslint').Rule.Node|null} node\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4} schema\n * @returns {boolean}\n */\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n /**\n * @param {\"checkGetters\"|\"checkSetters\"|\"checkConstructors\"} prop\n * @returns {boolean|\"no-setter\"|\"no-getter\"}\n */\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replaceAll(/\\.(['\"])(.*)\\1/gv, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @callback PathDoesNotBeginWith\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\n\n/** @type {PathDoesNotBeginWith} */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyvus]*)$/vs);\n let flags = 'v';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'v';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n forEachPreferredTag,\n getAllTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getPreferredTagNameSimple,\n getRegexFromString,\n getTagDescription,\n getTags,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasParams,\n\n hasTag,\n hasThrowValue,\n\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isNamepathOrUrlReferencingTag,\n isNamepathReferencingTag,\n isSetter,\n isValidTag,\n mayBeUndefinedTypeTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\n"],"mappings":"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"}
|
package/dist/plugin.cjs
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
const require_getJsdocProcessorPlugin = require('./getJsdocProcessorPlugin.cjs');
|
|
2
|
+
const require_checkAccess = require('./rules/checkAccess.cjs');
|
|
3
|
+
const require_checkAlignment = require('./rules/checkAlignment.cjs');
|
|
4
|
+
const require_checkExamples = require('./rules/checkExamples.cjs');
|
|
5
|
+
const require_checkIndentation = require('./rules/checkIndentation.cjs');
|
|
6
|
+
const require_checkLineAlignment = require('./rules/checkLineAlignment.cjs');
|
|
7
|
+
const require_checkParamNames = require('./rules/checkParamNames.cjs');
|
|
8
|
+
const require_checkPropertyNames = require('./rules/checkPropertyNames.cjs');
|
|
9
|
+
const require_checkSyntax = require('./rules/checkSyntax.cjs');
|
|
10
|
+
const require_checkTagNames = require('./rules/checkTagNames.cjs');
|
|
11
|
+
const require_checkTemplateNames = require('./rules/checkTemplateNames.cjs');
|
|
12
|
+
const require_checkTypes = require('./rules/checkTypes.cjs');
|
|
13
|
+
const require_checkValues = require('./rules/checkValues.cjs');
|
|
14
|
+
const require_convertToJsdocComments = require('./rules/convertToJsdocComments.cjs');
|
|
15
|
+
const require_emptyTags = require('./rules/emptyTags.cjs');
|
|
16
|
+
const require_implementsOnClasses = require('./rules/implementsOnClasses.cjs');
|
|
17
|
+
const require_importsAsDependencies = require('./rules/importsAsDependencies.cjs');
|
|
18
|
+
const require_informativeDocs = require('./rules/informativeDocs.cjs');
|
|
19
|
+
const require_linesBeforeBlock = require('./rules/linesBeforeBlock.cjs');
|
|
20
|
+
const require_matchDescription = require('./rules/matchDescription.cjs');
|
|
21
|
+
const require_matchName = require('./rules/matchName.cjs');
|
|
22
|
+
const require_multilineBlocks = require('./rules/multilineBlocks.cjs');
|
|
23
|
+
const require_noBadBlocks = require('./rules/noBadBlocks.cjs');
|
|
24
|
+
const require_noBlankBlockDescriptions = require('./rules/noBlankBlockDescriptions.cjs');
|
|
25
|
+
const require_noBlankBlocks = require('./rules/noBlankBlocks.cjs');
|
|
26
|
+
const require_noDefaults = require('./rules/noDefaults.cjs');
|
|
27
|
+
const require_noMissingSyntax = require('./rules/noMissingSyntax.cjs');
|
|
28
|
+
const require_noMultiAsterisks = require('./rules/noMultiAsterisks.cjs');
|
|
29
|
+
const require_noRestrictedSyntax = require('./rules/noRestrictedSyntax.cjs');
|
|
30
|
+
const require_noTypes = require('./rules/noTypes.cjs');
|
|
31
|
+
const require_noUndefinedTypes = require('./rules/noUndefinedTypes.cjs');
|
|
32
|
+
const require_requireAsteriskPrefix = require('./rules/requireAsteriskPrefix.cjs');
|
|
33
|
+
const require_requireDescription = require('./rules/requireDescription.cjs');
|
|
34
|
+
const require_requireDescriptionCompleteSentence = require('./rules/requireDescriptionCompleteSentence.cjs');
|
|
35
|
+
const require_requireExample = require('./rules/requireExample.cjs');
|
|
36
|
+
const require_requireFileOverview = require('./rules/requireFileOverview.cjs');
|
|
37
|
+
const require_requireHyphenBeforeParamDescription = require('./rules/requireHyphenBeforeParamDescription.cjs');
|
|
38
|
+
const require_requireJsdoc = require('./rules/requireJsdoc.cjs');
|
|
39
|
+
const require_requireParam = require('./rules/requireParam.cjs');
|
|
40
|
+
const require_requireParamDescription = require('./rules/requireParamDescription.cjs');
|
|
41
|
+
const require_requireParamName = require('./rules/requireParamName.cjs');
|
|
42
|
+
const require_requireParamType = require('./rules/requireParamType.cjs');
|
|
43
|
+
const require_requireProperty = require('./rules/requireProperty.cjs');
|
|
44
|
+
const require_requirePropertyDescription = require('./rules/requirePropertyDescription.cjs');
|
|
45
|
+
const require_requirePropertyName = require('./rules/requirePropertyName.cjs');
|
|
46
|
+
const require_requirePropertyType = require('./rules/requirePropertyType.cjs');
|
|
47
|
+
const require_requireReturns = require('./rules/requireReturns.cjs');
|
|
48
|
+
const require_requireReturnsCheck = require('./rules/requireReturnsCheck.cjs');
|
|
49
|
+
const require_requireReturnsDescription = require('./rules/requireReturnsDescription.cjs');
|
|
50
|
+
const require_requireReturnsType = require('./rules/requireReturnsType.cjs');
|
|
51
|
+
const require_requireTemplate = require('./rules/requireTemplate.cjs');
|
|
52
|
+
const require_requireThrows = require('./rules/requireThrows.cjs');
|
|
53
|
+
const require_requireYields = require('./rules/requireYields.cjs');
|
|
54
|
+
const require_requireYieldsCheck = require('./rules/requireYieldsCheck.cjs');
|
|
55
|
+
const require_sortTags = require('./rules/sortTags.cjs');
|
|
56
|
+
const require_tagLines = require('./rules/tagLines.cjs');
|
|
57
|
+
const require_textEscaping = require('./rules/textEscaping.cjs');
|
|
58
|
+
const require_validTypes = require('./rules/validTypes.cjs');
|
|
59
|
+
|
|
60
|
+
//#region src/plugin.js
|
|
61
|
+
/**
|
|
62
|
+
* @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups
|
|
63
|
+
* @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants
|
|
64
|
+
* @typedef {"" | "-error"} ErrorLevelVariants
|
|
65
|
+
*/
|
|
66
|
+
/**
|
|
67
|
+
* @type {import('eslint').ESLint.Plugin & {
|
|
68
|
+
* configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`,
|
|
69
|
+
* import('eslint').Linter.Config>
|
|
70
|
+
* }}
|
|
71
|
+
*/
|
|
72
|
+
const plugin = {
|
|
73
|
+
configs: {},
|
|
74
|
+
rules: {
|
|
75
|
+
"check-access": require_checkAccess.default,
|
|
76
|
+
"check-alignment": require_checkAlignment.default,
|
|
77
|
+
"check-examples": require_checkExamples.default,
|
|
78
|
+
"check-indentation": require_checkIndentation.default,
|
|
79
|
+
"check-line-alignment": require_checkLineAlignment.default,
|
|
80
|
+
"check-param-names": require_checkParamNames.default,
|
|
81
|
+
"check-property-names": require_checkPropertyNames.default,
|
|
82
|
+
"check-syntax": require_checkSyntax.default,
|
|
83
|
+
"check-tag-names": require_checkTagNames.default,
|
|
84
|
+
"check-template-names": require_checkTemplateNames.default,
|
|
85
|
+
"check-types": require_checkTypes.default,
|
|
86
|
+
"check-values": require_checkValues.default,
|
|
87
|
+
"convert-to-jsdoc-comments": require_convertToJsdocComments.default,
|
|
88
|
+
"empty-tags": require_emptyTags.default,
|
|
89
|
+
"implements-on-classes": require_implementsOnClasses.default,
|
|
90
|
+
"imports-as-dependencies": require_importsAsDependencies.default,
|
|
91
|
+
"informative-docs": require_informativeDocs.default,
|
|
92
|
+
"lines-before-block": require_linesBeforeBlock.default,
|
|
93
|
+
"match-description": require_matchDescription.default,
|
|
94
|
+
"match-name": require_matchName.default,
|
|
95
|
+
"multiline-blocks": require_multilineBlocks.default,
|
|
96
|
+
"no-bad-blocks": require_noBadBlocks.default,
|
|
97
|
+
"no-blank-block-descriptions": require_noBlankBlockDescriptions.default,
|
|
98
|
+
"no-blank-blocks": require_noBlankBlocks.default,
|
|
99
|
+
"no-defaults": require_noDefaults.default,
|
|
100
|
+
"no-missing-syntax": require_noMissingSyntax.default,
|
|
101
|
+
"no-multi-asterisks": require_noMultiAsterisks.default,
|
|
102
|
+
"no-restricted-syntax": require_noRestrictedSyntax.default,
|
|
103
|
+
"no-types": require_noTypes.default,
|
|
104
|
+
"no-undefined-types": require_noUndefinedTypes.default,
|
|
105
|
+
"require-asterisk-prefix": require_requireAsteriskPrefix.default,
|
|
106
|
+
"require-description": require_requireDescription.default,
|
|
107
|
+
"require-description-complete-sentence": require_requireDescriptionCompleteSentence.default,
|
|
108
|
+
"require-example": require_requireExample.default,
|
|
109
|
+
"require-file-overview": require_requireFileOverview.default,
|
|
110
|
+
"require-hyphen-before-param-description": require_requireHyphenBeforeParamDescription.default,
|
|
111
|
+
"require-jsdoc": require_requireJsdoc.default,
|
|
112
|
+
"require-param": require_requireParam.default,
|
|
113
|
+
"require-param-description": require_requireParamDescription.default,
|
|
114
|
+
"require-param-name": require_requireParamName.default,
|
|
115
|
+
"require-param-type": require_requireParamType.default,
|
|
116
|
+
"require-property": require_requireProperty.default,
|
|
117
|
+
"require-property-description": require_requirePropertyDescription.default,
|
|
118
|
+
"require-property-name": require_requirePropertyName.default,
|
|
119
|
+
"require-property-type": require_requirePropertyType.default,
|
|
120
|
+
"require-returns": require_requireReturns.default,
|
|
121
|
+
"require-returns-check": require_requireReturnsCheck.default,
|
|
122
|
+
"require-returns-description": require_requireReturnsDescription.default,
|
|
123
|
+
"require-returns-type": require_requireReturnsType.default,
|
|
124
|
+
"require-template": require_requireTemplate.default,
|
|
125
|
+
"require-throws": require_requireThrows.default,
|
|
126
|
+
"require-yields": require_requireYields.default,
|
|
127
|
+
"require-yields-check": require_requireYieldsCheck.default,
|
|
128
|
+
"sort-tags": require_sortTags.default,
|
|
129
|
+
"tag-lines": require_tagLines.default,
|
|
130
|
+
"text-escaping": require_textEscaping.default,
|
|
131
|
+
"valid-types": require_validTypes.default
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* @param {"warn"|"error"} warnOrError
|
|
136
|
+
* @param {string} [flatName]
|
|
137
|
+
* @returns {import('eslint').Linter.FlatConfig}
|
|
138
|
+
*/
|
|
139
|
+
const createRecommendedRuleset = (warnOrError, flatName) => {
|
|
140
|
+
return {
|
|
141
|
+
...flatName ? { name: "jsdoc/" + flatName } : {},
|
|
142
|
+
plugins: flatName ? { jsdoc: plugin } : ["jsdoc"],
|
|
143
|
+
rules: {
|
|
144
|
+
"jsdoc/check-access": warnOrError,
|
|
145
|
+
"jsdoc/check-alignment": warnOrError,
|
|
146
|
+
"jsdoc/check-examples": "off",
|
|
147
|
+
"jsdoc/check-indentation": "off",
|
|
148
|
+
"jsdoc/check-line-alignment": "off",
|
|
149
|
+
"jsdoc/check-param-names": warnOrError,
|
|
150
|
+
"jsdoc/check-property-names": warnOrError,
|
|
151
|
+
"jsdoc/check-syntax": "off",
|
|
152
|
+
"jsdoc/check-tag-names": warnOrError,
|
|
153
|
+
"jsdoc/check-template-names": "off",
|
|
154
|
+
"jsdoc/check-types": warnOrError,
|
|
155
|
+
"jsdoc/check-values": warnOrError,
|
|
156
|
+
"jsdoc/convert-to-jsdoc-comments": "off",
|
|
157
|
+
"jsdoc/empty-tags": warnOrError,
|
|
158
|
+
"jsdoc/implements-on-classes": warnOrError,
|
|
159
|
+
"jsdoc/imports-as-dependencies": "off",
|
|
160
|
+
"jsdoc/informative-docs": "off",
|
|
161
|
+
"jsdoc/lines-before-block": "off",
|
|
162
|
+
"jsdoc/match-description": "off",
|
|
163
|
+
"jsdoc/match-name": "off",
|
|
164
|
+
"jsdoc/multiline-blocks": warnOrError,
|
|
165
|
+
"jsdoc/no-bad-blocks": "off",
|
|
166
|
+
"jsdoc/no-blank-block-descriptions": "off",
|
|
167
|
+
"jsdoc/no-blank-blocks": "off",
|
|
168
|
+
"jsdoc/no-defaults": warnOrError,
|
|
169
|
+
"jsdoc/no-missing-syntax": "off",
|
|
170
|
+
"jsdoc/no-multi-asterisks": warnOrError,
|
|
171
|
+
"jsdoc/no-restricted-syntax": "off",
|
|
172
|
+
"jsdoc/no-types": "off",
|
|
173
|
+
"jsdoc/no-undefined-types": warnOrError,
|
|
174
|
+
"jsdoc/require-asterisk-prefix": "off",
|
|
175
|
+
"jsdoc/require-description": "off",
|
|
176
|
+
"jsdoc/require-description-complete-sentence": "off",
|
|
177
|
+
"jsdoc/require-example": "off",
|
|
178
|
+
"jsdoc/require-file-overview": "off",
|
|
179
|
+
"jsdoc/require-hyphen-before-param-description": "off",
|
|
180
|
+
"jsdoc/require-jsdoc": warnOrError,
|
|
181
|
+
"jsdoc/require-param": warnOrError,
|
|
182
|
+
"jsdoc/require-param-description": warnOrError,
|
|
183
|
+
"jsdoc/require-param-name": warnOrError,
|
|
184
|
+
"jsdoc/require-param-type": warnOrError,
|
|
185
|
+
"jsdoc/require-property": warnOrError,
|
|
186
|
+
"jsdoc/require-property-description": warnOrError,
|
|
187
|
+
"jsdoc/require-property-name": warnOrError,
|
|
188
|
+
"jsdoc/require-property-type": warnOrError,
|
|
189
|
+
"jsdoc/require-returns": warnOrError,
|
|
190
|
+
"jsdoc/require-returns-check": warnOrError,
|
|
191
|
+
"jsdoc/require-returns-description": warnOrError,
|
|
192
|
+
"jsdoc/require-returns-type": warnOrError,
|
|
193
|
+
"jsdoc/require-template": "off",
|
|
194
|
+
"jsdoc/require-throws": "off",
|
|
195
|
+
"jsdoc/require-yields": warnOrError,
|
|
196
|
+
"jsdoc/require-yields-check": warnOrError,
|
|
197
|
+
"jsdoc/sort-tags": "off",
|
|
198
|
+
"jsdoc/tag-lines": warnOrError,
|
|
199
|
+
"jsdoc/text-escaping": "off",
|
|
200
|
+
"jsdoc/valid-types": warnOrError
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* @param {"warn"|"error"} warnOrError
|
|
206
|
+
* @param {string} [flatName]
|
|
207
|
+
* @returns {import('eslint').Linter.FlatConfig}
|
|
208
|
+
*/
|
|
209
|
+
const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => {
|
|
210
|
+
const ruleset = createRecommendedRuleset(warnOrError, flatName);
|
|
211
|
+
return {
|
|
212
|
+
...ruleset,
|
|
213
|
+
rules: {
|
|
214
|
+
...ruleset.rules,
|
|
215
|
+
"jsdoc/check-tag-names": [warnOrError, { typed: true }],
|
|
216
|
+
"jsdoc/no-types": warnOrError,
|
|
217
|
+
"jsdoc/no-undefined-types": "off",
|
|
218
|
+
"jsdoc/require-param-type": "off",
|
|
219
|
+
"jsdoc/require-property-type": "off",
|
|
220
|
+
"jsdoc/require-returns-type": "off"
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* @param {"warn"|"error"} warnOrError
|
|
226
|
+
* @param {string} [flatName]
|
|
227
|
+
* @returns {import('eslint').Linter.FlatConfig}
|
|
228
|
+
*/
|
|
229
|
+
const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => {
|
|
230
|
+
const ruleset = createRecommendedRuleset(warnOrError, flatName);
|
|
231
|
+
return {
|
|
232
|
+
...ruleset,
|
|
233
|
+
rules: {
|
|
234
|
+
...ruleset.rules,
|
|
235
|
+
"jsdoc/no-undefined-types": "off"
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* @param {(string | unknown[])[]} ruleNames
|
|
241
|
+
*/
|
|
242
|
+
const createStandaloneRulesetFactory = (ruleNames) => {
|
|
243
|
+
/**
|
|
244
|
+
* @param {"warn"|"error"} warnOrError
|
|
245
|
+
* @param {string} [flatName]
|
|
246
|
+
* @returns {import('eslint').Linter.FlatConfig}
|
|
247
|
+
*/
|
|
248
|
+
return (warnOrError, flatName) => {
|
|
249
|
+
return {
|
|
250
|
+
name: "jsdoc/" + flatName,
|
|
251
|
+
plugins: { jsdoc: plugin },
|
|
252
|
+
rules: Object.fromEntries(ruleNames.map((ruleName) => {
|
|
253
|
+
return typeof ruleName === "string" ? [ruleName, warnOrError] : [ruleName[0], [warnOrError, ...ruleName.slice(1)]];
|
|
254
|
+
}))
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
const contentsRules = [
|
|
259
|
+
"jsdoc/informative-docs",
|
|
260
|
+
"jsdoc/match-description",
|
|
261
|
+
"jsdoc/no-blank-block-descriptions",
|
|
262
|
+
"jsdoc/no-blank-blocks",
|
|
263
|
+
["jsdoc/text-escaping", { escapeHTML: true }]
|
|
264
|
+
];
|
|
265
|
+
const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules);
|
|
266
|
+
const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules);
|
|
267
|
+
const logicalRules = [
|
|
268
|
+
"jsdoc/check-access",
|
|
269
|
+
"jsdoc/check-param-names",
|
|
270
|
+
"jsdoc/check-property-names",
|
|
271
|
+
"jsdoc/check-syntax",
|
|
272
|
+
"jsdoc/check-tag-names",
|
|
273
|
+
"jsdoc/check-template-names",
|
|
274
|
+
"jsdoc/check-types",
|
|
275
|
+
"jsdoc/check-values",
|
|
276
|
+
"jsdoc/empty-tags",
|
|
277
|
+
"jsdoc/implements-on-classes",
|
|
278
|
+
"jsdoc/require-returns-check",
|
|
279
|
+
"jsdoc/require-yields-check",
|
|
280
|
+
"jsdoc/no-bad-blocks",
|
|
281
|
+
"jsdoc/no-defaults",
|
|
282
|
+
"jsdoc/no-types",
|
|
283
|
+
"jsdoc/no-undefined-types",
|
|
284
|
+
"jsdoc/valid-types"
|
|
285
|
+
];
|
|
286
|
+
const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules);
|
|
287
|
+
const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules);
|
|
288
|
+
const requirementsRules = [
|
|
289
|
+
"jsdoc/require-example",
|
|
290
|
+
"jsdoc/require-jsdoc",
|
|
291
|
+
"jsdoc/require-param",
|
|
292
|
+
"jsdoc/require-param-description",
|
|
293
|
+
"jsdoc/require-param-name",
|
|
294
|
+
"jsdoc/require-property",
|
|
295
|
+
"jsdoc/require-property-description",
|
|
296
|
+
"jsdoc/require-property-name",
|
|
297
|
+
"jsdoc/require-returns",
|
|
298
|
+
"jsdoc/require-returns-description",
|
|
299
|
+
"jsdoc/require-yields"
|
|
300
|
+
];
|
|
301
|
+
const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules);
|
|
302
|
+
const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([
|
|
303
|
+
...requirementsRules,
|
|
304
|
+
"jsdoc/require-param-type",
|
|
305
|
+
"jsdoc/require-property-type",
|
|
306
|
+
"jsdoc/require-returns-type",
|
|
307
|
+
"jsdoc/require-template"
|
|
308
|
+
]);
|
|
309
|
+
const stylisticRules = [
|
|
310
|
+
"jsdoc/check-alignment",
|
|
311
|
+
"jsdoc/check-line-alignment",
|
|
312
|
+
"jsdoc/lines-before-block",
|
|
313
|
+
"jsdoc/multiline-blocks",
|
|
314
|
+
"jsdoc/no-multi-asterisks",
|
|
315
|
+
"jsdoc/require-asterisk-prefix",
|
|
316
|
+
["jsdoc/require-hyphen-before-param-description", "never"],
|
|
317
|
+
"jsdoc/tag-lines"
|
|
318
|
+
];
|
|
319
|
+
const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules);
|
|
320
|
+
const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules);
|
|
321
|
+
/* c8 ignore next 3 -- TS */
|
|
322
|
+
if (!plugin.configs) throw new Error("TypeScript guard");
|
|
323
|
+
plugin.configs.recommended = createRecommendedRuleset("warn");
|
|
324
|
+
plugin.configs["recommended-error"] = createRecommendedRuleset("error");
|
|
325
|
+
plugin.configs["recommended-typescript"] = createRecommendedTypeScriptRuleset("warn");
|
|
326
|
+
plugin.configs["recommended-typescript-error"] = createRecommendedTypeScriptRuleset("error");
|
|
327
|
+
plugin.configs["recommended-typescript-flavor"] = createRecommendedTypeScriptFlavorRuleset("warn");
|
|
328
|
+
plugin.configs["recommended-typescript-flavor-error"] = createRecommendedTypeScriptFlavorRuleset("error");
|
|
329
|
+
plugin.configs["flat/recommended"] = createRecommendedRuleset("warn", "flat/recommended");
|
|
330
|
+
plugin.configs["flat/recommended-error"] = createRecommendedRuleset("error", "flat/recommended-error");
|
|
331
|
+
plugin.configs["flat/recommended-typescript"] = createRecommendedTypeScriptRuleset("warn", "flat/recommended-typescript");
|
|
332
|
+
plugin.configs["flat/recommended-typescript-error"] = createRecommendedTypeScriptRuleset("error", "flat/recommended-typescript-error");
|
|
333
|
+
plugin.configs["flat/recommended-typescript-flavor"] = createRecommendedTypeScriptFlavorRuleset("warn", "flat/recommended-typescript-flavor");
|
|
334
|
+
plugin.configs["flat/recommended-typescript-flavor-error"] = createRecommendedTypeScriptFlavorRuleset("error", "flat/recommended-typescript-flavor-error");
|
|
335
|
+
plugin.configs["flat/contents-typescript"] = createContentsTypescriptRuleset("warn", "flat/contents-typescript");
|
|
336
|
+
plugin.configs["flat/contents-typescript-error"] = createContentsTypescriptRuleset("error", "flat/contents-typescript-error");
|
|
337
|
+
plugin.configs["flat/contents-typescript-flavor"] = createContentsTypescriptFlavorRuleset("warn", "flat/contents-typescript-flavor");
|
|
338
|
+
plugin.configs["flat/contents-typescript-flavor-error"] = createContentsTypescriptFlavorRuleset("error", "flat/contents-typescript-error-flavor");
|
|
339
|
+
plugin.configs["flat/logical-typescript"] = createLogicalTypescriptRuleset("warn", "flat/logical-typescript");
|
|
340
|
+
plugin.configs["flat/logical-typescript-error"] = createLogicalTypescriptRuleset("error", "flat/logical-typescript-error");
|
|
341
|
+
plugin.configs["flat/logical-typescript-flavor"] = createLogicalTypescriptFlavorRuleset("warn", "flat/logical-typescript-flavor");
|
|
342
|
+
plugin.configs["flat/logical-typescript-flavor-error"] = createLogicalTypescriptFlavorRuleset("error", "flat/logical-typescript-error-flavor");
|
|
343
|
+
plugin.configs["flat/requirements-typescript"] = createRequirementsTypeScriptRuleset("warn", "flat/requirements-typescript");
|
|
344
|
+
plugin.configs["flat/requirements-typescript-error"] = createRequirementsTypeScriptRuleset("error", "flat/requirements-typescript-error");
|
|
345
|
+
plugin.configs["flat/requirements-typescript-flavor"] = createRequirementsTypeScriptFlavorRuleset("warn", "flat/requirements-typescript-flavor");
|
|
346
|
+
plugin.configs["flat/requirements-typescript-flavor-error"] = createRequirementsTypeScriptFlavorRuleset("error", "flat/requirements-typescript-error-flavor");
|
|
347
|
+
plugin.configs["flat/stylistic-typescript"] = createStylisticTypeScriptRuleset("warn", "flat/stylistic-typescript");
|
|
348
|
+
plugin.configs["flat/stylistic-typescript-error"] = createStylisticTypeScriptRuleset("error", "flat/stylistic-typescript-error");
|
|
349
|
+
plugin.configs["flat/stylistic-typescript-flavor"] = createStylisticTypeScriptFlavorRuleset("warn", "flat/stylistic-typescript-flavor");
|
|
350
|
+
plugin.configs["flat/stylistic-typescript-flavor-error"] = createStylisticTypeScriptFlavorRuleset("error", "flat/stylistic-typescript-error-flavor");
|
|
351
|
+
plugin.configs.examples = [{
|
|
352
|
+
files: ["**/*.js"],
|
|
353
|
+
name: "jsdoc/examples/processor",
|
|
354
|
+
plugins: { examples: require_getJsdocProcessorPlugin.getJsdocProcessorPlugin() },
|
|
355
|
+
processor: "examples/examples"
|
|
356
|
+
}, {
|
|
357
|
+
files: ["**/*.md/*.js"],
|
|
358
|
+
name: "jsdoc/examples/rules",
|
|
359
|
+
rules: {
|
|
360
|
+
"eol-last": 0,
|
|
361
|
+
"import/no-unresolved": 0,
|
|
362
|
+
"import/unambiguous": 0,
|
|
363
|
+
"jsdoc/require-file-overview": 0,
|
|
364
|
+
"jsdoc/require-jsdoc": 0,
|
|
365
|
+
"no-console": 0,
|
|
366
|
+
"no-multiple-empty-lines": 0,
|
|
367
|
+
"no-undef": 0,
|
|
368
|
+
"no-unused-vars": 0,
|
|
369
|
+
"node/no-missing-import": 0,
|
|
370
|
+
"node/no-missing-require": 0,
|
|
371
|
+
"padded-blocks": 0
|
|
372
|
+
}
|
|
373
|
+
}];
|
|
374
|
+
plugin.configs["default-expressions"] = [{
|
|
375
|
+
files: ["**/*.js"],
|
|
376
|
+
name: "jsdoc/default-expressions/processor",
|
|
377
|
+
plugins: { examples: require_getJsdocProcessorPlugin.getJsdocProcessorPlugin({
|
|
378
|
+
checkDefaults: true,
|
|
379
|
+
checkParams: true,
|
|
380
|
+
checkProperties: true
|
|
381
|
+
}) },
|
|
382
|
+
processor: "examples/examples"
|
|
383
|
+
}, {
|
|
384
|
+
files: [
|
|
385
|
+
"**/*.jsdoc-defaults",
|
|
386
|
+
"**/*.jsdoc-params",
|
|
387
|
+
"**/*.jsdoc-properties"
|
|
388
|
+
],
|
|
389
|
+
name: "jsdoc/default-expressions/rules",
|
|
390
|
+
rules: {
|
|
391
|
+
...plugin.configs.examples[1].rules,
|
|
392
|
+
"chai-friendly/no-unused-expressions": 0,
|
|
393
|
+
"no-empty-function": 0,
|
|
394
|
+
"no-new": 0,
|
|
395
|
+
"no-unused-expressions": 0,
|
|
396
|
+
quotes: ["error", "double"],
|
|
397
|
+
semi: ["error", "never"],
|
|
398
|
+
strict: 0
|
|
399
|
+
}
|
|
400
|
+
}];
|
|
401
|
+
plugin.configs["examples-and-default-expressions"] = [
|
|
402
|
+
{
|
|
403
|
+
name: "jsdoc/examples-and-default-expressions",
|
|
404
|
+
plugins: { examples: require_getJsdocProcessorPlugin.getJsdocProcessorPlugin({
|
|
405
|
+
checkDefaults: true,
|
|
406
|
+
checkParams: true,
|
|
407
|
+
checkProperties: true
|
|
408
|
+
}) }
|
|
409
|
+
},
|
|
410
|
+
...plugin.configs.examples.map((config) => {
|
|
411
|
+
return {
|
|
412
|
+
...config,
|
|
413
|
+
plugins: {}
|
|
414
|
+
};
|
|
415
|
+
}),
|
|
416
|
+
...plugin.configs["default-expressions"].map((config) => {
|
|
417
|
+
return {
|
|
418
|
+
...config,
|
|
419
|
+
plugins: {}
|
|
420
|
+
};
|
|
421
|
+
})
|
|
422
|
+
];
|
|
423
|
+
var plugin_default = plugin;
|
|
424
|
+
|
|
425
|
+
//#endregion
|
|
426
|
+
exports.default = plugin_default;
|
|
427
|
+
//# sourceMappingURL=plugin.cjs.map
|