eslint-plugin-jsdoc 53.0.1 → 54.1.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 +2007 -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 +391 -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 +559 -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 +41 -57
- 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 +2542 -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 +545 -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 +744 -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkParamNames.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} disableMissingParamChecks\n * @param {boolean} enableFixer\n * @param {import('../jsdocUtils.js').ParamNameInfo[]} functionParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Report} report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (\n typeof functionParameterName === 'object' &&\n 'name' in functionParameterName &&\n Array.isArray(functionParameterName.name)\n ) {\n const actualName = tag.name.trim();\n const expectedName = functionParameterName.name[index];\n if (actualName === expectedName) {\n thisOffset--;\n return false;\n }\n\n report(\n `Expected @${targetTagName} name to be \"${expectedName}\". Got \"${actualName}\".`,\n null,\n tag,\n );\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n annotationParamName,\n hasPropertyRest,\n names: properties,\n rests,\n },\n ] =\n /**\n * @type {[string | undefined, import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string | undefined;\n }]} */ (functionParameterName);\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n\n /** @type {string[]} */\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n name: missingProperty,\n tagPlacement,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n /** @type {[string, import('comment-parser').Spec][]} */\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (/**\n * @type {[string|undefined, (import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string,\n })]} */ (item)?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n });\n\n // When disableMissingParamChecks is true tag names can be omitted.\n // Report when the tag names do not match the expected names or they are used out of order.\n if (disableMissingParamChecks) {\n const usedExpectedNames = expectedNames.map((a) => {\n return a?.toString();\n }).filter((expectedName) => {\n return expectedName && actualNames.includes(expectedName);\n });\n const usedInOrder = actualNames.every((actualName, idx) => {\n return actualName === usedExpectedNames[idx];\n });\n if (usedInOrder) {\n return false;\n }\n }\n\n report(\n `Expected @${targetTagName} names to be \"${\n expectedNames.map((expectedName) => {\n return typeof expectedName === 'object' &&\n 'name' in expectedName &&\n expectedName.restElement ?\n '...' + expectedName.name :\n expectedName;\n }).join(', ')\n }\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {{\n * name: string,\n * idx: import('../iterateJsdoc.js').Integer\n * }[]} jsdocParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n idx,\n name: jsdocParameterName,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nconst allowedNodes = [\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',\n // Add this to above defaults\n 'TSMethodSignature',\n];\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n disableExtraPropertyReporting = false,\n disableMissingParamChecks = false,\n enableFixer = false,\n useDefaultObjectProperties = false,\n } = context.options[0] || {};\n\n // Although we might just remove global settings contexts from applying to\n // this rule (as they can cause problems with `getFunctionParameterNames`\n // checks if they are not functions but say variables), the user may\n // instead wish to narrow contexts in those settings, so this check\n // is still useful\n if (!allowedNodes.includes(/** @type {import('estree').Node} */ (node).type)) {\n return;\n }\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n contextDefaults: allowedNodes,\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n disableMissingParamChecks: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,MAAM,yBAAyB,CAC7B,eACA,6BACA,mBACA,mBACA,iBACA,+BACA,2BACA,aACA,wBAAwB,OAAO,OAAO,WACnC;CACH,MAAM,YAAY,OAAO,QAAQ,MAAM,KAAK,CAAC,OAAO,CAAC,GACjD,IACH,KAAK;AACJ,SAAO,IAAI,QAAQ;CACpB,EAAC;CACF,MAAM,qBAAqB,UAAU,OAAO,CAAC,GACzC,IACH,KAAK;AACJ,SAAO,CAAC,IAAI,KAAK,SAAS,IAAI;CAC/B,EAAC;CAEF,IAAI,SAAS;CACb,IAAI,aAAa;AAGjB,QAAO,UAAU,KAAK,CAAC,GACnB,IACH,EAAE,UAAU;;EAEX,IAAI;EACJ,MAAM,cAAc,UAAU,KAAK,CAAC,CAClC,UACA,GACD,EAAE,QAAQ;GACT,YAAY,OAAO,SAAS;AAE5B,UAAO,GAAG,SAAS,IAAI,QAAQ,QAAQ;EACxC,EAAC;AACF,MAAI,aAAa;GACf,MAAM,YAAY,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,YAAY,IAAI,cAAc,MAAM;IACjG,MAAM,UAAU,UAAU;GAC3B,IAAG,KAAK;AAET,UAAO;EACR;AAED,MAAI,IAAI,KAAK,SAAS,IAAI,EAAE;GAC1B;AAEA,UAAO;EACR;EAED,IAAI,wBAAwB,uBAAuB,QAAQ,SAAS;AACpE,MAAI,0BAA0B,UAAU,IAAI,KAAK,MAAM,KAAK,QAAQ;GAClE,EAAE;GACF,wBAAwB,uBAAuB,QAAQ,SAAS;EACjE;AAED,MAAI,CAAC,uBAAuB;AAC1B,OAAI,4BACF,QAAO;GAGT,OACE,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,KAAK,gDAAgD,CAAC,EAChF,MACA,IACD;AAED,UAAO;EACR;AAED,MACE,OAAO,0BAA0B,YAC/B,UAAU,yBACV,MAAM,QAAQ,sBAAsB,KAAK,EAC3C;GACA,MAAM,aAAa,IAAI,KAAK,MAAM;GAClC,MAAM,eAAe,sBAAsB,KAAK;AAChD,OAAI,eAAe,cAAc;IAC/B;AACA,WAAO;GACR;GAED,OACE,CAAC,UAAU,EAAE,cAAc,aAAa,EAAE,aAAa,QAAQ,EAAE,WAAW,EAAE,CAAC,EAC/E,MACA,IACD;AACD,UAAO;EACR;AAED,MAAI,MAAM,QAAQ,sBAAsB,EAAE;AACxC,OAAI,CAAC,kBACH,QAAO;AAGT,OAAI,IAAI,QAAQ,IAAI,KAAK,OAAO,gBAAgB,KAAK,GACnD,QAAO;GAGT,MAAM,CACJ,eACA,EACE,qBACA,iBACA,OAAO,YACP,OACD,CACF,GAIW;AACZ,OAAI,wBAAwB,QAAW;IACrC,MAAM,OAAO,IAAI,KAAK,MAAM;AAC5B,QAAI,SAAS,qBACX,OAAO,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,iCAAiC,EAAE,oBAAoB,CAAC,CAAC,EAAE,MAAM,IAAI;GAE1G;GAED,MAAM,UAAU,kBAAkB,SAAY,IAAI,KAAK,MAAM,GAAG;GAChE,MAAM,gBAAgB,WAAW,IAAI,CAAC,SAAS;AAC7C,WAAO,GAAG,QAAQ,CAAC,EAAE,MAAM;GAC5B,EAAC;GACF,MAAM,cAAc,UAAU,IAAI,CAAC,GAC/B,SACH,KAAK;AACJ,WAAO,SAAS,KAAK,MAAM;GAC5B,EAAC;GACF,MAAM,cAAc,UAAU,IAAI,CAAC,GAC/B,SACH,KAAK;AACJ,WAAO,SAAS;GACjB,EAAC;GAEF,MAAM,oBAAoB,CAAE;;GAG5B,MAAM,mBAAmB,CAAE;AAE3B,QAAK,MAAM,CACT,KACA,KACD,IAAI,cAAc,SAAS,EAAE;AAC5B,QAAI,iBAAiB,KAAK,CAAC,oBAAoB;AAC7C,YAAO,KAAK,WAAW,gBAAgB;IACxC,EAAC,CACA;IAGF,MAAM,gBAAgB,YAAY,UAAU,CAAC,eAAe;AAC1D,YAAO,MAAM,aAAa,KAAK,CAAC,WAAW;IAC5C,EAAC;AACF,QAAI,kBAAkB,IAAI;AACxB,SAAI,CAAC,qBAAqB,MAAM,KAC9B;KAGF,MAAM,eAAe,YAAY,UAAU,CAAC,eAAe;AACzD,aAAO,MAAM,qBAAqB,MAAM,WAAW;KACpD,EAAC;KACF,MAAM,OAAO,IAAI,OAAO,GAAG,SAAS,KAAK,eAAe,KAAK,eAAe,YAAY;KACxF,kBAAkB,KAAK;MACrB;MACA,cAAc,EACZ,MAAM,SAAS,IAAI,IAAI,KACxB;KACF,EAAC;IACH,WAAU,YAAY,eAAe,OAAO,gBAAgB,KAAK,MAAM,YAAY,mBAAmB,IACrG,iBAAiB,KAAK,KAAK;GAE9B;GAED,MAAM,aAAa,kBAAkB;AACrC,OAAI,WACF,MAAK,MAAM,EACT,MAAM,iBACN,cACD,IAAI,mBACH,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,aAAa;AAIhF,OAAI,CAAC,mBAAmB,mBAAmB;;IAEzC,MAAM,kBAAkB,CAAE;AAC1B,SAAK,MAAM,CACT,KACA,KACD,IAAI,YAAY,SAAS,EAAE;KAC1B,MAAM,QAAQ,KAAK,WAAW,IAAI,KAAK,MAAM,GAAG,IAAI;AACpD,SACE,SAAS,CAAC,cAAc,KACtB,MAAM,aAAa,KAAK,CACzB,IAAI,CAAC,MAAM,aAAa,KAAK,CAAC,IAAI,KAAK,KACvC,CAAC,iCAAiC,WAAW,KAAK,CAAC,SAAS;AAC3D,aAAO,KAAK,MAAM,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,SAAS;KAC3D,EAAC,GAEF,gBAAgB,KAAK,CACnB,MAAM,UAAU,KAAK,EACtB,EAAC;IAEL;AAED,QAAI,gBAAgB,QAAQ;AAC1B,UAAK,MAAM,CACT,eACA,GACD,IAAI,iBACH,OAAO,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,cAAc,oBAAoB,EAAE,IAAI,MAAM,EAAE,MAAM,GAAG;AAGxF,YAAO;IACR;GACF;AAED,UAAO;EACR;EAED,IAAI;AACJ,MAAI,OAAO,0BAA0B,UAAU;GAC7C,MAAM,EACJ,MACD,GAAG;GACJ,gBAAgB;EACjB,OACC,gBAAgB;AAGlB,MAAI,kBAAkB,IAAI,KAAK,MAAM,EAAE;GAErC,MAAM,cAAc,mBAAmB,IAAI,CAAC,GACxC,EACA,MACD,CACF,KAAK;AACJ,WAAO,KAAK,MAAM;GACnB,EAAC;GAEF,MAAM,gBAAgB,uBAAuB,IAAI,CAAC,MAAM,QAAQ;AAC9D,QAGe,OAAQ,IAAI,MACzB,QAAO,YAAY;AAGrB,WAAO;GACR,EAAC,CAAC,OAAO,CAAC,SAAS;AAClB,WAAO,SAAS;GACjB,EAAC;AAIF,OAAI,2BAA2B;IAC7B,MAAM,oBAAoB,cAAc,IAAI,CAAC,MAAM;AACjD,YAAO,GAAG,UAAU;IACrB,EAAC,CAAC,OAAO,CAAC,iBAAiB;AAC1B,YAAO,gBAAgB,YAAY,SAAS,aAAa;IAC1D,EAAC;IACF,MAAM,cAAc,YAAY,MAAM,CAAC,YAAY,QAAQ;AACzD,YAAO,eAAe,kBAAkB;IACzC,EAAC;AACF,QAAI,YACF,QAAO;GAEV;GAED,OACE,CAAC,UAAU,EAAE,cAAc,cAAc,EACvC,cAAc,IAAI,CAAC,iBAAiB;AAClC,WAAO,OAAO,iBAAiB,YAC7B,UAAU,gBACV,aAAa,cACb,QAAQ,aAAa,OACrB;GACH,EAAC,CAAC,KAAK,KAAK,CACd,QAAQ,EAAE,YAAY,KAAK,KAAK,CAAC,EAAE,CAAC,EACrC,MACA,IACD;AAED,UAAO;EACR;AAED,SAAO;CACR,EAAC;AACH;;;;;;;;;;;;AAaD,MAAM,6BAA6B,CACjC,eAAe,8BACf,qBAAqB,OAAO,WACzB;;CAEH,IAAI;AAEJ,QAAO,oBAAoB,KAAK,CAAC,EAC/B,KACA,MAAM,oBACP,KAAK;EACJ,MAAM,iBAAiB,mBAAmB,SAAS,IAAI;AAEvD,MAAI,gBAAgB;AAClB,OAAI,CAAC,mBAAmB;IACtB,OAAO,CAAC,CAAC,EAAE,cAAc,oBAAoB,EAAE,mBAAmB,qCAAqC,CAAC,EAAE,MAAM,MAAM,KAAK,KAAK;AAEhI,WAAO;GACR;GAED,IAAI,mBAAmB,mBAAmB,MAAM,GAAG,mBAAmB,QAAQ,IAAI,CAAC;AAEnF,OAAI,iBAAiB,SAAS,KAAK,EACjC,mBAAmB,iBAAiB,MAAM,GAAG,GAAG;AAGlD,OAAI,qBAAqB,mBAAmB;IAC1C,OACE,CAAC,CAAC,EAAE,cAAc,oBAAoB,EAAE,mBAAmB,oBAAoB,EAAE,iBAAiB,iDAAG,EACpD,kBAAkB,GAAG,CAAC,EACvE,MACA,MAAM,KAAK,KACZ;AAED,WAAO;GACR;EACF,OACC,oBAAoB;AAGtB,SAAO;CACR,EAAC;AACH;AAED,MAAM,eAAe;CACnB;CAA2B;CAAuB;CAAsB;CAExE;AACD;AAED,8BAAeA,6BAAa,CAAC,EAC3B,SACA,OACA,MACA,QACA,OACD,KAAK;CACJ,MAAM,EACJ,6BACA,oBAAoB,MACpB,oBAAoB,OACpB,oBAAoB,kEACpB,gCAAgC,OAChC,4BAA4B,OAC5B,cAAc,OACd,6BAA6B,OAC9B,GAAG,QAAQ,QAAQ,MAAM,CAAE;AAO5B,KAAI,CAAC,aAAa;;EAA+C,KAAM;EAAK,CAC1E;CAGF,MAAM,kBAAkB,MAAM,mBAAmB,kBAAkB;CAEnE,MAAM,0BAA0B,MAAM,iBAAiB,QAAQ;AAC/D,KAAI,CAAC,2BAA2B,CAAC,wBAAwB,OACvD;CAGF,MAAM,yBAAyB,MAAM,0BAA0B,2BAA2B;CAE1F,MAAM,gBAAuC,MAAM,oBAAoB,EACrE,SAAS,QACV,EAAC;CACF,MAAM,UAAU,uBACd,eACA,6BACA,mBACA,mBACA,iBACA,+BACA,2BACA,aACA,wBACA,OACA,OACA,OACD;AAED,KAAI,WAAW,CAAC,kBACd;CAGF,2BACE,eAAe,6BAA6B,yBAAyB,OAAO,OAC7E;AACF,GAAE;CACD,iBAAiB;CACjB,MAAM;EACJ,MAAM;GACJ,aAAa;GACb,KAAK;EACN;EACD,SAAS;EACT,QAAQ,CACN;GACE,sBAAsB;GACtB,YAAY;IACV,6BAA6B,EAC3B,MAAM,UACP;IACD,mBAAmB,EACjB,MAAM,UACP;IACD,mBAAmB,EACjB,MAAM,UACP;IACD,mBAAmB,EACjB,MAAM,SACP;IACD,+BAA+B,EAC7B,MAAM,UACP;IACD,2BAA2B,EACzB,MAAM,UACP;IACD,aAAa,EACX,MAAM,UACP;IACD,4BAA4B,EAC1B,MAAM,UACP;GACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;AACF,EAAC"}
|
|
1
|
+
{"version":3,"file":"checkParamNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","disableMissingParamChecks","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","Number","reportJSDoc","removeTag","functionParameterName","trim","Array","isArray","actualName","expectedName","type","search","parameterName","annotationParamName","hasPropertyRest","names","properties","rests","undefined","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","usedExpectedNames","a","toString","usedInOrder","every","restElement","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","allowedNodes","_default","exports","iterateJsdoc","context","node","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","module"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} disableMissingParamChecks\n * @param {boolean} enableFixer\n * @param {import('../jsdocUtils.js').ParamNameInfo[]} functionParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Report} report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (\n typeof functionParameterName === 'object' &&\n 'name' in functionParameterName &&\n Array.isArray(functionParameterName.name)\n ) {\n const actualName = tag.name.trim();\n const expectedName = functionParameterName.name[index];\n if (actualName === expectedName) {\n thisOffset--;\n return false;\n }\n\n report(\n `Expected @${targetTagName} name to be \"${expectedName}\". Got \"${actualName}\".`,\n null,\n tag,\n );\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n annotationParamName,\n hasPropertyRest,\n names: properties,\n rests,\n },\n ] =\n /**\n * @type {[string | undefined, import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string | undefined;\n }]} */ (functionParameterName);\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n\n /** @type {string[]} */\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n name: missingProperty,\n tagPlacement,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n /** @type {[string, import('comment-parser').Spec][]} */\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (/**\n * @type {[string|undefined, (import('../jsdocUtils.js').FlattendRootInfo & {\n * annotationParamName?: string,\n })]} */ (item)?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n });\n\n // When disableMissingParamChecks is true tag names can be omitted.\n // Report when the tag names do not match the expected names or they are used out of order.\n if (disableMissingParamChecks) {\n const usedExpectedNames = expectedNames.map((a) => {\n return a?.toString();\n }).filter((expectedName) => {\n return expectedName && actualNames.includes(expectedName);\n });\n const usedInOrder = actualNames.every((actualName, idx) => {\n return actualName === usedExpectedNames[idx];\n });\n if (usedInOrder) {\n return false;\n }\n }\n\n report(\n `Expected @${targetTagName} names to be \"${\n expectedNames.map((expectedName) => {\n return typeof expectedName === 'object' &&\n 'name' in expectedName &&\n expectedName.restElement ?\n '...' + expectedName.name :\n expectedName;\n }).join(', ')\n }\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {{\n * name: string,\n * idx: import('../iterateJsdoc.js').Integer\n * }[]} jsdocParameterNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n idx,\n name: jsdocParameterName,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nconst allowedNodes = [\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',\n // Add this to above defaults\n 'TSMethodSignature',\n];\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n disableExtraPropertyReporting = false,\n disableMissingParamChecks = false,\n enableFixer = false,\n useDefaultObjectProperties = false,\n } = context.options[0] || {};\n\n // Although we might just remove global settings contexts from applying to\n // this rule (as they can cause problems with `getFunctionParameterNames`\n // checks if they are not functions but say variables), the user may\n // instead wish to narrow contexts in those settings, so this check\n // is still useful\n if (!allowedNodes.includes(/** @type {import('estree').Node} */ (node).type)) {\n return;\n }\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep || !jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n disableMissingParamChecks,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n contextDefaults: allowedNodes,\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n disableMissingParamChecks: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,88 +1,116 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
4
9
|
/**
|
|
5
|
-
* @param {string} targetTagName
|
|
6
|
-
* @param {boolean} enableFixer
|
|
7
|
-
* @param {import('comment-parser').Block} jsdoc
|
|
8
|
-
* @param {import('../iterateJsdoc.js').Utils} utils
|
|
9
|
-
* @returns {boolean}
|
|
10
|
-
*/
|
|
10
|
+
* @param {string} targetTagName
|
|
11
|
+
* @param {boolean} enableFixer
|
|
12
|
+
* @param {import('comment-parser').Block} jsdoc
|
|
13
|
+
* @param {import('../iterateJsdoc.js').Utils} utils
|
|
14
|
+
* @returns {boolean}
|
|
15
|
+
*/
|
|
11
16
|
const validatePropertyNames = (targetTagName, enableFixer, jsdoc, utils) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
const propertyTags = Object.entries(jsdoc.tags).filter(([, tag]) => {
|
|
18
|
+
return tag.tag === targetTagName;
|
|
19
|
+
});
|
|
20
|
+
return propertyTags.some(([, tag], index) => {
|
|
21
|
+
/** @type {import('../iterateJsdoc.js').Integer} */
|
|
22
|
+
let tagsIndex;
|
|
23
|
+
const dupeTagInfo = propertyTags.find(([tgsIndex, tg], idx) => {
|
|
24
|
+
tagsIndex = Number(tgsIndex);
|
|
25
|
+
return tg.name === tag.name && idx !== index;
|
|
26
|
+
});
|
|
27
|
+
if (dupeTagInfo) {
|
|
28
|
+
utils.reportJSDoc(`Duplicate @${targetTagName} "${tag.name}"`, dupeTagInfo[1], enableFixer ? () => {
|
|
29
|
+
utils.removeTag(tagsIndex);
|
|
30
|
+
} : null);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
});
|
|
30
35
|
};
|
|
36
|
+
|
|
31
37
|
/**
|
|
32
|
-
* @param {string} targetTagName
|
|
33
|
-
* @param {{
|
|
34
|
-
* idx: number;
|
|
35
|
-
* name: string;
|
|
36
|
-
* type: string;
|
|
37
|
-
* }[]} jsdocPropertyNames
|
|
38
|
-
* @param {import('comment-parser').Block} jsdoc
|
|
39
|
-
* @param {Function} report
|
|
40
|
-
*/
|
|
38
|
+
* @param {string} targetTagName
|
|
39
|
+
* @param {{
|
|
40
|
+
* idx: number;
|
|
41
|
+
* name: string;
|
|
42
|
+
* type: string;
|
|
43
|
+
* }[]} jsdocPropertyNames
|
|
44
|
+
* @param {import('comment-parser').Block} jsdoc
|
|
45
|
+
* @param {Function} report
|
|
46
|
+
*/
|
|
41
47
|
const validatePropertyNamesDeep = (targetTagName, jsdocPropertyNames, jsdoc, report) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
/** @type {string} */
|
|
49
|
+
let lastRealProperty;
|
|
50
|
+
return jsdocPropertyNames.some(({
|
|
51
|
+
idx,
|
|
52
|
+
name: jsdocPropertyName
|
|
53
|
+
}) => {
|
|
54
|
+
const isPropertyPath = jsdocPropertyName.includes('.');
|
|
55
|
+
if (isPropertyPath) {
|
|
56
|
+
if (!lastRealProperty) {
|
|
57
|
+
report(`@${targetTagName} path declaration ("${jsdocPropertyName}") appears before any real property.`, null, jsdoc.tags[idx]);
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));
|
|
61
|
+
if (pathRootNodeName.endsWith('[]')) {
|
|
62
|
+
pathRootNodeName = pathRootNodeName.slice(0, -2);
|
|
63
|
+
}
|
|
64
|
+
if (pathRootNodeName !== lastRealProperty) {
|
|
65
|
+
report(`@${targetTagName} path declaration ("${jsdocPropertyName}") root node name ("${pathRootNodeName}") ` + `does not match previous real property name ("${lastRealProperty}").`, null, jsdoc.tags[idx]);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
lastRealProperty = jsdocPropertyName;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
});
|
|
60
73
|
};
|
|
61
|
-
var
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
75
|
+
context,
|
|
76
|
+
jsdoc,
|
|
77
|
+
report,
|
|
78
|
+
utils
|
|
79
|
+
}) => {
|
|
80
|
+
const {
|
|
81
|
+
enableFixer = false
|
|
82
|
+
} = context.options[0] || {};
|
|
83
|
+
const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');
|
|
84
|
+
if (!jsdocPropertyNamesDeep || !jsdocPropertyNamesDeep.length) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const targetTagName = /** @type {string} */utils.getPreferredTagName({
|
|
88
|
+
tagName: 'property'
|
|
89
|
+
});
|
|
90
|
+
const isError = validatePropertyNames(targetTagName, enableFixer, jsdoc, utils);
|
|
91
|
+
if (isError) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
validatePropertyNamesDeep(targetTagName, jsdocPropertyNamesDeep, jsdoc, report);
|
|
69
95
|
}, {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
iterateAllJsdocs: true,
|
|
97
|
+
meta: {
|
|
98
|
+
docs: {
|
|
99
|
+
description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',
|
|
100
|
+
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-property-names.md#repos-sticky-header'
|
|
101
|
+
},
|
|
102
|
+
fixable: 'code',
|
|
103
|
+
schema: [{
|
|
104
|
+
additionalProperties: false,
|
|
105
|
+
properties: {
|
|
106
|
+
enableFixer: {
|
|
107
|
+
type: 'boolean'
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
type: 'object'
|
|
111
|
+
}],
|
|
112
|
+
type: 'suggestion'
|
|
113
|
+
}
|
|
84
114
|
});
|
|
85
|
-
|
|
86
|
-
//#endregion
|
|
87
|
-
exports.default = checkPropertyNames_default;
|
|
115
|
+
module.exports = exports.default;
|
|
88
116
|
//# sourceMappingURL=checkPropertyNames.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPropertyNames.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/checkPropertyNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} enableFixer\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @returns {boolean}\n */\nconst validatePropertyNames = (\n targetTagName,\n enableFixer,\n jsdoc, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {{\n * idx: number;\n * name: string;\n * type: string;\n * }[]} jsdocPropertyNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n */\nconst validatePropertyNamesDeep = (\n targetTagName,\n jsdocPropertyNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n idx,\n name: jsdocPropertyName,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep || !jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'property',\n }));\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-property-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkPropertyNames.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","validatePropertyNames","targetTagName","enableFixer","jsdoc","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","Number","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","_default","exports","iterateJsdoc","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type","module"],"sources":["../../src/rules/checkPropertyNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} enableFixer\n * @param {import('comment-parser').Block} jsdoc\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @returns {boolean}\n */\nconst validatePropertyNames = (\n targetTagName,\n enableFixer,\n jsdoc, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n /** @type {import('../iterateJsdoc.js').Integer} */\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = Number(tgsIndex);\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {{\n * idx: number;\n * name: string;\n * type: string;\n * }[]} jsdocPropertyNames\n * @param {import('comment-parser').Block} jsdoc\n * @param {Function} report\n */\nconst validatePropertyNamesDeep = (\n targetTagName,\n jsdocPropertyNames, jsdoc, report,\n) => {\n /** @type {string} */\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n idx,\n name: jsdocPropertyName,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep || !jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'property',\n }));\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-property-names.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,25 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const { mode } = settings;
|
|
6
|
-
if (mode === "jsdoc" || mode === "typescript") {
|
|
7
|
-
for (const tag of jsdoc.tags) if (tag.type.slice(-1) === "=") {
|
|
8
|
-
report("Syntax should not be Google Closure Compiler style.", null, tag);
|
|
9
|
-
break;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}, {
|
|
13
|
-
iterateAllJsdocs: true,
|
|
14
|
-
meta: {
|
|
15
|
-
docs: {
|
|
16
|
-
description: "Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).",
|
|
17
|
-
url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-syntax.md#repos-sticky-header"
|
|
18
|
-
},
|
|
19
|
-
type: "suggestion"
|
|
20
|
-
}
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
21
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
10
|
+
jsdoc,
|
|
11
|
+
report,
|
|
12
|
+
settings
|
|
13
|
+
}) => {
|
|
14
|
+
const {
|
|
15
|
+
mode
|
|
16
|
+
} = settings;
|
|
22
17
|
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
// Don't check for "permissive" and "closure"
|
|
19
|
+
if (mode === 'jsdoc' || mode === 'typescript') {
|
|
20
|
+
for (const tag of jsdoc.tags) {
|
|
21
|
+
if (tag.type.slice(-1) === '=') {
|
|
22
|
+
report('Syntax should not be Google Closure Compiler style.', null, tag);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}, {
|
|
28
|
+
iterateAllJsdocs: true,
|
|
29
|
+
meta: {
|
|
30
|
+
docs: {
|
|
31
|
+
description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',
|
|
32
|
+
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-syntax.md#repos-sticky-header'
|
|
33
|
+
},
|
|
34
|
+
type: 'suggestion'
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
module.exports = exports.default;
|
|
25
38
|
//# sourceMappingURL=checkSyntax.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkSyntax.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/checkSyntax.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-syntax.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkSyntax.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url","module"],"sources":["../../src/rules/checkSyntax.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-syntax.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAE/B,IAAAG,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGD,QAAQ;;EAEZ;EACA,IAAIC,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,YAAY,EAAE;IAC7C,KAAK,MAAMC,GAAG,IAAIJ,KAAK,CAACK,IAAI,EAAE;MAC5B,IAAID,GAAG,CAACE,IAAI,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC9BN,MAAM,CAAC,qDAAqD,EAAE,IAAI,EAAEG,GAAG,CAAC;QACxE;MACF;IACF;EACF;AACF,CAAC,EAAE;EACDI,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,oGAAoG;MACjHC,GAAG,EAAE;IACP,CAAC;IACDN,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAO,MAAA,CAAAf,OAAA,GAAAA,OAAA,CAAAF,OAAA","ignoreList":[]}
|