@depup/eslint-plugin-jsdoc 62.8.0-depup.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/LICENSE +24 -0
- package/README.md +33 -0
- package/changes.json +18 -0
- package/dist/WarnSettings.cjs +38 -0
- package/dist/WarnSettings.cjs.map +1 -0
- package/dist/WarnSettings.d.ts +17 -0
- package/dist/alignTransform.cjs +402 -0
- package/dist/alignTransform.cjs.map +1 -0
- package/dist/alignTransform.d.ts +34 -0
- package/dist/buildForbidRuleDefinition.cjs +101 -0
- package/dist/buildForbidRuleDefinition.cjs.map +1 -0
- package/dist/buildForbidRuleDefinition.d.ts +15 -0
- package/dist/buildRejectOrPreferRuleDefinition.cjs +352 -0
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -0
- package/dist/buildRejectOrPreferRuleDefinition.d.ts +9 -0
- package/dist/cjs/WarnSettings.d.ts +16 -0
- package/dist/cjs/alignTransform.d.ts +33 -0
- package/dist/cjs/buildForbidRuleDefinition.d.ts +14 -0
- package/dist/cjs/buildRejectOrPreferRuleDefinition.d.ts +8 -0
- package/dist/cjs/defaultTagOrder.d.ts +4 -0
- package/dist/cjs/exportParser.d.ts +40 -0
- package/dist/cjs/getDefaultTagStructureForMode.d.ts +10 -0
- package/dist/cjs/getJsdocProcessorPlugin.d.cts +5 -0
- package/dist/cjs/getJsdocProcessorPlugin.d.ts +66 -0
- package/dist/cjs/index-cjs.d.ts +23 -0
- package/dist/cjs/index.cjs.d.cts +2 -0
- package/dist/cjs/iterateJsdoc.d.cts +7 -0
- package/dist/cjs/iterateJsdoc.d.ts +495 -0
- package/dist/cjs/jsdocUtils.d.ts +493 -0
- package/dist/cjs/rules/checkAccess.d.ts +2 -0
- package/dist/cjs/rules/checkAlignment.d.ts +2 -0
- package/dist/cjs/rules/checkExamples.d.ts +3 -0
- package/dist/cjs/rules/checkIndentation.d.ts +2 -0
- package/dist/cjs/rules/checkLineAlignment.d.ts +9 -0
- package/dist/cjs/rules/checkParamNames.d.ts +2 -0
- package/dist/cjs/rules/checkPropertyNames.d.ts +2 -0
- package/dist/cjs/rules/checkSyntax.d.ts +2 -0
- package/dist/cjs/rules/checkTagNames.d.ts +2 -0
- package/dist/cjs/rules/checkTemplateNames.d.ts +2 -0
- package/dist/cjs/rules/checkTypes.d.ts +7 -0
- package/dist/cjs/rules/checkValues.d.ts +2 -0
- package/dist/cjs/rules/convertToJsdocComments.d.ts +266 -0
- package/dist/cjs/rules/emptyTags.d.ts +2 -0
- package/dist/cjs/rules/escapeInlineTags.d.ts +2 -0
- package/dist/cjs/rules/implementsOnClasses.d.ts +2 -0
- package/dist/cjs/rules/importsAsDependencies.d.ts +2 -0
- package/dist/cjs/rules/informativeDocs.d.ts +2 -0
- package/dist/cjs/rules/linesBeforeBlock.d.ts +2 -0
- package/dist/cjs/rules/matchDescription.d.ts +2 -0
- package/dist/cjs/rules/matchName.d.ts +2 -0
- package/dist/cjs/rules/multilineBlocks.d.ts +2 -0
- package/dist/cjs/rules/noBadBlocks.d.ts +2 -0
- package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +2 -0
- package/dist/cjs/rules/noBlankBlocks.d.ts +2 -0
- package/dist/cjs/rules/noDefaults.d.ts +2 -0
- package/dist/cjs/rules/noMissingSyntax.d.ts +9 -0
- package/dist/cjs/rules/noMultiAsterisks.d.ts +2 -0
- package/dist/cjs/rules/noRestrictedSyntax.d.ts +2 -0
- package/dist/cjs/rules/noTypes.d.ts +2 -0
- package/dist/cjs/rules/noUndefinedTypes.d.ts +2 -0
- package/dist/cjs/rules/preferImportTag.d.ts +2 -0
- package/dist/cjs/rules/requireAsteriskPrefix.d.ts +2 -0
- package/dist/cjs/rules/requireDescription.d.ts +2 -0
- package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +2 -0
- package/dist/cjs/rules/requireExample.d.ts +2 -0
- package/dist/cjs/rules/requireFileOverview.d.ts +2 -0
- package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +2 -0
- package/dist/cjs/rules/requireJsdoc.d.ts +24 -0
- package/dist/cjs/rules/requireParam.d.ts +3 -0
- package/dist/cjs/rules/requireParamDescription.d.ts +2 -0
- package/dist/cjs/rules/requireParamName.d.ts +2 -0
- package/dist/cjs/rules/requireParamType.d.ts +2 -0
- package/dist/cjs/rules/requireProperty.d.ts +2 -0
- package/dist/cjs/rules/requirePropertyDescription.d.ts +2 -0
- package/dist/cjs/rules/requirePropertyName.d.ts +2 -0
- package/dist/cjs/rules/requirePropertyType.d.ts +2 -0
- package/dist/cjs/rules/requireRejects.d.ts +2 -0
- package/dist/cjs/rules/requireReturns.d.ts +2 -0
- package/dist/cjs/rules/requireReturnsCheck.d.ts +2 -0
- package/dist/cjs/rules/requireReturnsDescription.d.ts +2 -0
- package/dist/cjs/rules/requireReturnsType.d.ts +2 -0
- package/dist/cjs/rules/requireTags.d.ts +2 -0
- package/dist/cjs/rules/requireTemplate.d.ts +2 -0
- package/dist/cjs/rules/requireThrows.d.ts +2 -0
- package/dist/cjs/rules/requireYields.d.ts +2 -0
- package/dist/cjs/rules/requireYieldsCheck.d.ts +2 -0
- package/dist/cjs/rules/sortTags.d.ts +2 -0
- package/dist/cjs/rules/tagLines.d.ts +2 -0
- package/dist/cjs/rules/textEscaping.d.ts +2 -0
- package/dist/cjs/rules/tsMethodSignatureStyle.d.ts +2 -0
- package/dist/cjs/rules/tsNoEmptyObjectType.d.ts +2 -0
- package/dist/cjs/rules/tsNoUnnecessaryTemplateExpression.d.ts +2 -0
- package/dist/cjs/rules/tsPreferFunctionType.d.ts +2 -0
- package/dist/cjs/rules/typeFormatting.d.ts +2 -0
- package/dist/cjs/rules/validTypes.d.ts +2 -0
- package/dist/cjs/tagNames.d.ts +15 -0
- package/dist/cjs/utils/hasReturnValue.d.ts +19 -0
- package/dist/defaultTagOrder.cjs +46 -0
- package/dist/defaultTagOrder.cjs.map +1 -0
- package/dist/defaultTagOrder.d.ts +5 -0
- package/dist/exportParser.cjs +732 -0
- package/dist/exportParser.cjs.map +1 -0
- package/dist/exportParser.d.ts +41 -0
- package/dist/generateDocs.cjs +342 -0
- package/dist/generateDocs.cjs.map +1 -0
- package/dist/generateOptions.cjs +62 -0
- package/dist/generateOptions.cjs.map +1 -0
- package/dist/generateRule.cjs +248 -0
- package/dist/generateRule.cjs.map +1 -0
- package/dist/generateRuleTypes.cjs +24 -0
- package/dist/generateRuleTypes.cjs.map +1 -0
- package/dist/getDefaultTagStructureForMode.cjs +289 -0
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -0
- package/dist/getDefaultTagStructureForMode.d.ts +11 -0
- package/dist/getJsdocProcessorPlugin.cjs +587 -0
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -0
- package/dist/getJsdocProcessorPlugin.cts +5 -0
- package/dist/getJsdocProcessorPlugin.d.ts +67 -0
- package/dist/index-cjs.cjs +595 -0
- package/dist/index-cjs.cjs.map +1 -0
- package/dist/index-cjs.d.ts +24 -0
- package/dist/index-esm.cjs +162 -0
- package/dist/index-esm.cjs.map +1 -0
- package/dist/index-esm.d.ts +72 -0
- package/dist/index.cjs +743 -0
- package/dist/index.cjs.cts +3 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +93 -0
- package/dist/iterateJsdoc.cjs +2150 -0
- package/dist/iterateJsdoc.cjs.map +1 -0
- package/dist/iterateJsdoc.cts +7 -0
- package/dist/iterateJsdoc.d.ts +496 -0
- package/dist/jsdocUtils.cjs +1725 -0
- package/dist/jsdocUtils.cjs.map +1 -0
- package/dist/jsdocUtils.d.ts +494 -0
- package/dist/rules/checkAccess.cjs +40 -0
- package/dist/rules/checkAccess.cjs.map +1 -0
- package/dist/rules/checkAccess.d.ts +3 -0
- package/dist/rules/checkAlignment.cjs +78 -0
- package/dist/rules/checkAlignment.cjs.map +1 -0
- package/dist/rules/checkAlignment.d.ts +3 -0
- package/dist/rules/checkExamples.cjs +521 -0
- package/dist/rules/checkExamples.cjs.map +1 -0
- package/dist/rules/checkExamples.d.ts +4 -0
- package/dist/rules/checkIndentation.cjs +170 -0
- package/dist/rules/checkIndentation.cjs.map +1 -0
- package/dist/rules/checkIndentation.d.ts +3 -0
- package/dist/rules/checkLineAlignment.cjs +398 -0
- package/dist/rules/checkLineAlignment.cjs.map +1 -0
- package/dist/rules/checkLineAlignment.d.ts +10 -0
- package/dist/rules/checkParamNames.cjs +407 -0
- package/dist/rules/checkParamNames.cjs.map +1 -0
- package/dist/rules/checkParamNames.d.ts +3 -0
- package/dist/rules/checkPropertyNames.cjs +135 -0
- package/dist/rules/checkPropertyNames.cjs.map +1 -0
- package/dist/rules/checkPropertyNames.d.ts +3 -0
- package/dist/rules/checkSyntax.cjs +38 -0
- package/dist/rules/checkSyntax.cjs.map +1 -0
- package/dist/rules/checkSyntax.d.ts +3 -0
- package/dist/rules/checkTagNames.cjs +312 -0
- package/dist/rules/checkTagNames.cjs.map +1 -0
- package/dist/rules/checkTagNames.d.ts +3 -0
- package/dist/rules/checkTemplateNames.cjs +185 -0
- package/dist/rules/checkTemplateNames.cjs.map +1 -0
- package/dist/rules/checkTemplateNames.d.ts +3 -0
- package/dist/rules/checkTypes.cjs +111 -0
- package/dist/rules/checkTypes.cjs.map +1 -0
- package/dist/rules/checkTypes.d.ts +8 -0
- package/dist/rules/checkValues.cjs +166 -0
- package/dist/rules/checkValues.cjs.map +1 -0
- package/dist/rules/checkValues.d.ts +3 -0
- package/dist/rules/convertToJsdocComments.cjs +356 -0
- package/dist/rules/convertToJsdocComments.cjs.map +1 -0
- package/dist/rules/convertToJsdocComments.d.ts +267 -0
- package/dist/rules/emptyTags.cjs +85 -0
- package/dist/rules/emptyTags.cjs.map +1 -0
- package/dist/rules/emptyTags.d.ts +3 -0
- package/dist/rules/escapeInlineTags.cjs +149 -0
- package/dist/rules/escapeInlineTags.cjs.map +1 -0
- package/dist/rules/escapeInlineTags.d.ts +3 -0
- package/dist/rules/implementsOnClasses.cjs +74 -0
- package/dist/rules/implementsOnClasses.cjs.map +1 -0
- package/dist/rules/implementsOnClasses.d.ts +3 -0
- package/dist/rules/importsAsDependencies.cjs +104 -0
- package/dist/rules/importsAsDependencies.cjs.map +1 -0
- package/dist/rules/importsAsDependencies.d.ts +3 -0
- package/dist/rules/informativeDocs.cjs +187 -0
- package/dist/rules/informativeDocs.cjs.map +1 -0
- package/dist/rules/informativeDocs.d.ts +3 -0
- package/dist/rules/linesBeforeBlock.cjs +120 -0
- package/dist/rules/linesBeforeBlock.cjs.map +1 -0
- package/dist/rules/linesBeforeBlock.d.ts +3 -0
- package/dist/rules/matchDescription.cjs +356 -0
- package/dist/rules/matchDescription.cjs.map +1 -0
- package/dist/rules/matchDescription.d.ts +3 -0
- package/dist/rules/matchName.cjs +160 -0
- package/dist/rules/matchName.cjs.map +1 -0
- package/dist/rules/matchName.d.ts +3 -0
- package/dist/rules/multilineBlocks.cjs +431 -0
- package/dist/rules/multilineBlocks.cjs.map +1 -0
- package/dist/rules/multilineBlocks.d.ts +3 -0
- package/dist/rules/noBadBlocks.cjs +100 -0
- package/dist/rules/noBadBlocks.cjs.map +1 -0
- package/dist/rules/noBadBlocks.d.ts +3 -0
- package/dist/rules/noBlankBlockDescriptions.cjs +63 -0
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -0
- package/dist/rules/noBlankBlockDescriptions.d.ts +3 -0
- package/dist/rules/noBlankBlocks.cjs +54 -0
- package/dist/rules/noBlankBlocks.cjs.map +1 -0
- package/dist/rules/noBlankBlocks.d.ts +3 -0
- package/dist/rules/noDefaults.cjs +102 -0
- package/dist/rules/noDefaults.cjs.map +1 -0
- package/dist/rules/noDefaults.d.ts +3 -0
- package/dist/rules/noMissingSyntax.cjs +196 -0
- package/dist/rules/noMissingSyntax.cjs.map +1 -0
- package/dist/rules/noMissingSyntax.d.ts +10 -0
- package/dist/rules/noMultiAsterisks.cjs +126 -0
- package/dist/rules/noMultiAsterisks.cjs.map +1 -0
- package/dist/rules/noMultiAsterisks.d.ts +3 -0
- package/dist/rules/noRestrictedSyntax.cjs +68 -0
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -0
- package/dist/rules/noRestrictedSyntax.d.ts +3 -0
- package/dist/rules/noTypes.cjs +101 -0
- package/dist/rules/noTypes.cjs.map +1 -0
- package/dist/rules/noTypes.d.ts +3 -0
- package/dist/rules/noUndefinedTypes.cjs +588 -0
- package/dist/rules/noUndefinedTypes.cjs.map +1 -0
- package/dist/rules/noUndefinedTypes.d.ts +3 -0
- package/dist/rules/preferImportTag.cjs +362 -0
- package/dist/rules/preferImportTag.cjs.map +1 -0
- package/dist/rules/preferImportTag.d.ts +3 -0
- package/dist/rules/requireAsteriskPrefix.cjs +190 -0
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -0
- package/dist/rules/requireAsteriskPrefix.d.ts +3 -0
- package/dist/rules/requireDescription.cjs +164 -0
- package/dist/rules/requireDescription.cjs.map +1 -0
- package/dist/rules/requireDescription.d.ts +3 -0
- package/dist/rules/requireDescriptionCompleteSentence.cjs +321 -0
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -0
- package/dist/rules/requireDescriptionCompleteSentence.d.ts +3 -0
- package/dist/rules/requireExample.cjs +133 -0
- package/dist/rules/requireExample.cjs.map +1 -0
- package/dist/rules/requireExample.d.ts +3 -0
- package/dist/rules/requireFileOverview.cjs +194 -0
- package/dist/rules/requireFileOverview.cjs.map +1 -0
- package/dist/rules/requireFileOverview.d.ts +3 -0
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +166 -0
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -0
- package/dist/rules/requireHyphenBeforeParamDescription.d.ts +3 -0
- package/dist/rules/requireJsdoc.cjs +722 -0
- package/dist/rules/requireJsdoc.cjs.map +1 -0
- package/dist/rules/requireJsdoc.d.ts +25 -0
- package/dist/rules/requireParam.cjs +772 -0
- package/dist/rules/requireParam.cjs.map +1 -0
- package/dist/rules/requireParam.d.ts +4 -0
- package/dist/rules/requireParamDescription.cjs +105 -0
- package/dist/rules/requireParamDescription.cjs.map +1 -0
- package/dist/rules/requireParamDescription.d.ts +3 -0
- package/dist/rules/requireParamName.cjs +68 -0
- package/dist/rules/requireParamName.cjs.map +1 -0
- package/dist/rules/requireParamName.d.ts +3 -0
- package/dist/rules/requireParamType.cjs +104 -0
- package/dist/rules/requireParamType.cjs.map +1 -0
- package/dist/rules/requireParamType.d.ts +3 -0
- package/dist/rules/requireProperty.cjs +63 -0
- package/dist/rules/requireProperty.cjs.map +1 -0
- package/dist/rules/requireProperty.d.ts +3 -0
- package/dist/rules/requirePropertyDescription.cjs +29 -0
- package/dist/rules/requirePropertyDescription.cjs.map +1 -0
- package/dist/rules/requirePropertyDescription.d.ts +3 -0
- package/dist/rules/requirePropertyName.cjs +29 -0
- package/dist/rules/requirePropertyName.cjs.map +1 -0
- package/dist/rules/requirePropertyName.d.ts +3 -0
- package/dist/rules/requirePropertyType.cjs +29 -0
- package/dist/rules/requirePropertyType.cjs.map +1 -0
- package/dist/rules/requirePropertyType.d.ts +3 -0
- package/dist/rules/requireRejects.cjs +226 -0
- package/dist/rules/requireRejects.cjs.map +1 -0
- package/dist/rules/requireRejects.d.ts +3 -0
- package/dist/rules/requireReturns.cjs +262 -0
- package/dist/rules/requireReturns.cjs.map +1 -0
- package/dist/rules/requireReturns.d.ts +3 -0
- package/dist/rules/requireReturnsCheck.cjs +140 -0
- package/dist/rules/requireReturnsCheck.cjs.map +1 -0
- package/dist/rules/requireReturnsCheck.d.ts +3 -0
- package/dist/rules/requireReturnsDescription.cjs +72 -0
- package/dist/rules/requireReturnsDescription.cjs.map +1 -0
- package/dist/rules/requireReturnsDescription.d.ts +3 -0
- package/dist/rules/requireReturnsType.cjs +68 -0
- package/dist/rules/requireReturnsType.cjs.map +1 -0
- package/dist/rules/requireReturnsType.d.ts +3 -0
- package/dist/rules/requireTags.cjs +74 -0
- package/dist/rules/requireTags.cjs.map +1 -0
- package/dist/rules/requireTags.d.ts +3 -0
- package/dist/rules/requireTemplate.cjs +220 -0
- package/dist/rules/requireTemplate.cjs.map +1 -0
- package/dist/rules/requireTemplate.d.ts +3 -0
- package/dist/rules/requireThrows.cjs +118 -0
- package/dist/rules/requireThrows.cjs.map +1 -0
- package/dist/rules/requireThrows.d.ts +3 -0
- package/dist/rules/requireYields.cjs +224 -0
- package/dist/rules/requireYields.cjs.map +1 -0
- package/dist/rules/requireYields.d.ts +3 -0
- package/dist/rules/requireYieldsCheck.cjs +179 -0
- package/dist/rules/requireYieldsCheck.cjs.map +1 -0
- package/dist/rules/requireYieldsCheck.d.ts +3 -0
- package/dist/rules/sortTags.cjs +656 -0
- package/dist/rules/sortTags.cjs.map +1 -0
- package/dist/rules/sortTags.d.ts +3 -0
- package/dist/rules/tagLines.cjs +374 -0
- package/dist/rules/tagLines.cjs.map +1 -0
- package/dist/rules/tagLines.d.ts +3 -0
- package/dist/rules/textEscaping.cjs +141 -0
- package/dist/rules/textEscaping.cjs.map +1 -0
- package/dist/rules/textEscaping.d.ts +3 -0
- package/dist/rules/tsMethodSignatureStyle.cjs +240 -0
- package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -0
- package/dist/rules/tsMethodSignatureStyle.d.ts +3 -0
- package/dist/rules/tsNoEmptyObjectType.cjs +62 -0
- package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -0
- package/dist/rules/tsNoEmptyObjectType.d.ts +3 -0
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +104 -0
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -0
- package/dist/rules/tsNoUnnecessaryTemplateExpression.d.ts +3 -0
- package/dist/rules/tsPreferFunctionType.cjs +110 -0
- package/dist/rules/tsPreferFunctionType.cjs.map +1 -0
- package/dist/rules/tsPreferFunctionType.d.ts +3 -0
- package/dist/rules/typeFormatting.cjs +607 -0
- package/dist/rules/typeFormatting.cjs.map +1 -0
- package/dist/rules/typeFormatting.d.ts +3 -0
- package/dist/rules/validTypes.cjs +328 -0
- package/dist/rules/validTypes.cjs.map +1 -0
- package/dist/rules/validTypes.d.ts +3 -0
- package/dist/rules.d.ts +3203 -0
- package/dist/tagNames.cjs +244 -0
- package/dist/tagNames.cjs.map +1 -0
- package/dist/tagNames.d.ts +16 -0
- package/dist/to-valid-identifier.cjs +263 -0
- package/dist/utils/hasReturnValue.cjs +495 -0
- package/dist/utils/hasReturnValue.cjs.map +1 -0
- package/dist/utils/hasReturnValue.d.ts +20 -0
- package/package.json +220 -0
- package/rollup.config.js +16 -0
- package/src/WarnSettings.js +34 -0
- package/src/alignTransform.js +444 -0
- package/src/buildForbidRuleDefinition.js +106 -0
- package/src/buildRejectOrPreferRuleDefinition.js +481 -0
- package/src/defaultTagOrder.js +169 -0
- package/src/exportParser.js +973 -0
- package/src/getDefaultTagStructureForMode.js +968 -0
- package/src/getJsdocProcessorPlugin.cts +5 -0
- package/src/getJsdocProcessorPlugin.js +692 -0
- package/src/index-cjs.js +755 -0
- package/src/index-esm.js +196 -0
- package/src/index.cjs.cts +3 -0
- package/src/index.js +940 -0
- package/src/iterateJsdoc.cts +7 -0
- package/src/iterateJsdoc.js +2612 -0
- package/src/jsdocUtils.js +2158 -0
- package/src/rules/checkAccess.js +45 -0
- package/src/rules/checkAlignment.js +82 -0
- package/src/rules/checkExamples.js +613 -0
- package/src/rules/checkIndentation.js +176 -0
- package/src/rules/checkLineAlignment.js +453 -0
- package/src/rules/checkParamNames.js +541 -0
- package/src/rules/checkPropertyNames.js +174 -0
- package/src/rules/checkSyntax.js +30 -0
- package/src/rules/checkTagNames.js +414 -0
- package/src/rules/checkTemplateNames.js +208 -0
- package/src/rules/checkTypes.js +130 -0
- package/src/rules/checkValues.js +264 -0
- package/src/rules/convertToJsdocComments.js +444 -0
- package/src/rules/emptyTags.js +106 -0
- package/src/rules/escapeInlineTags.js +189 -0
- package/src/rules/implementsOnClasses.js +78 -0
- package/src/rules/importsAsDependencies.js +132 -0
- package/src/rules/informativeDocs.js +228 -0
- package/src/rules/linesBeforeBlock.js +144 -0
- package/src/rules/matchDescription.js +413 -0
- package/src/rules/matchName.js +179 -0
- package/src/rules/multilineBlocks.js +562 -0
- package/src/rules/noBadBlocks.js +127 -0
- package/src/rules/noBlankBlockDescriptions.js +69 -0
- package/src/rules/noBlankBlocks.js +55 -0
- package/src/rules/noDefaults.js +104 -0
- package/src/rules/noMissingSyntax.js +215 -0
- package/src/rules/noMultiAsterisks.js +162 -0
- package/src/rules/noRestrictedSyntax.js +72 -0
- package/src/rules/noTypes.js +108 -0
- package/src/rules/noUndefinedTypes.js +797 -0
- package/src/rules/preferImportTag.js +521 -0
- package/src/rules/requireAsteriskPrefix.js +217 -0
- package/src/rules/requireDescription.js +190 -0
- package/src/rules/requireDescriptionCompleteSentence.js +376 -0
- package/src/rules/requireExample.js +143 -0
- package/src/rules/requireFileOverview.js +213 -0
- package/src/rules/requireHyphenBeforeParamDescription.js +210 -0
- package/src/rules/requireJsdoc.js +897 -0
- package/src/rules/requireParam.js +848 -0
- package/src/rules/requireParamDescription.js +110 -0
- package/src/rules/requireParamName.js +69 -0
- package/src/rules/requireParamType.js +109 -0
- package/src/rules/requireProperty.js +66 -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/requireRejects.js +246 -0
- package/src/rules/requireReturns.js +291 -0
- package/src/rules/requireReturnsCheck.js +180 -0
- package/src/rules/requireReturnsDescription.js +73 -0
- package/src/rules/requireReturnsType.js +65 -0
- package/src/rules/requireTags.js +85 -0
- package/src/rules/requireTemplate.js +246 -0
- package/src/rules/requireThrows.js +128 -0
- package/src/rules/requireYields.js +265 -0
- package/src/rules/requireYieldsCheck.js +226 -0
- package/src/rules/sortTags.js +766 -0
- package/src/rules/tagLines.js +486 -0
- package/src/rules/textEscaping.js +158 -0
- package/src/rules/tsMethodSignatureStyle.js +300 -0
- package/src/rules/tsNoEmptyObjectType.js +61 -0
- package/src/rules/tsNoUnnecessaryTemplateExpression.js +130 -0
- package/src/rules/tsPreferFunctionType.js +127 -0
- package/src/rules/typeFormatting.js +690 -0
- package/src/rules/validTypes.js +466 -0
- package/src/rules.d.ts +3203 -0
- package/src/tagNames.js +301 -0
- package/src/utils/hasReturnValue.js +572 -0
- package/typings/babel__eslint-parser.d.ts +1 -0
- package/typings/gitdown.d.ts +16 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","globalTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNameOrNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","getNamespaceTypes","prefix","moduleDeclaration","body","item","declaration","id","prop","key","propName","nestedName","imports","closedTypes","allDefinedTypes","identifiers","globalItem","property","init","callee","methodOrProp","programBody","ast","statement","expression","left","object","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","definedNamesAndNamepaths","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","rootNamespace","isNamespaceValid","Array","isArray","typeParameters","some","typeParam","element","markVariableAsUsed","exit","loc","typedef","message","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst globalTypes = [\n 'globalThis', 'global', 'window', 'self',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\n\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdc = parseComment(commentNode, '');\n\n return jsdc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n // We err on the side of being too aggressive; checking only\n // present tags is not sufficient\n comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'template';\n });\n });\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * Recursively extracts types from a namespace declaration.\n * @param {string} prefix - The namespace prefix (e.g., \"MyNamespace\" or \"Outer.Inner\").\n * @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.\n * @returns {string[]} Array of fully qualified type names.\n */\n const getNamespaceTypes = (prefix, moduleDeclaration) => {\n /* c8 ignore next 3 -- Guard for ambient modules without body. */\n if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {\n return [];\n }\n\n return moduleDeclaration.body.body.flatMap((item) => {\n /** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */\n let declaration = item;\n\n if (item.type === 'ExportNamedDeclaration' && item.declaration) {\n declaration = item.declaration;\n }\n\n if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {\n /* c8 ignore next 4 -- Guard for anonymous class declarations. */\n if (!declaration.id) {\n return [];\n }\n\n return [\n `${prefix}.${declaration.id.name}`,\n ];\n }\n\n if (declaration.type === 'TSInterfaceDeclaration') {\n return [\n `${prefix}.${declaration.id.name}`,\n ...declaration.body.body.map((prop) => {\n // Only `TSPropertySignature` and `TSMethodSignature` have 'key'.\n if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {\n return '';\n }\n\n // Key can be computed or a literal, only handle Identifier.\n if (prop.key.type !== 'Identifier') {\n return '';\n }\n\n const propName = prop.key.name;\n /* c8 ignore next -- `propName` is always truthy for Identifiers. */\n return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';\n }).filter(Boolean),\n ];\n }\n\n // Handle nested namespaces.\n if (declaration.type === 'TSModuleDeclaration') {\n /* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */\n const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';\n /* c8 ignore next 3 -- Guard. */\n if (!nestedName) {\n return [];\n }\n\n return [\n `${prefix}.${nestedName}`,\n ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration),\n ];\n }\n\n // Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).\n return [];\n });\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n /** @type {Set<string>} */\n const closedTypes = new Set();\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'TSModuleDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...getNamespaceTypes(name, globalItem),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n // Module scope names are also defined\n return [\n name,\n ];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat((() => {\n // Detect static property assignments like `MyClass.Prop = ...`\n const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */ (\n sourceCode.ast\n ).body;\n\n return programBody.flatMap((statement) => {\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'AssignmentExpression' &&\n statement.expression.left.type === 'MemberExpression' &&\n statement.expression.left.object.type === 'Identifier' &&\n statement.expression.left.property.type === 'Identifier' &&\n closedTypes.has(statement.expression.left.object.name)\n ) {\n return [\n `${statement.expression.left.object.name}.${statement.expression.left.property.name}`,\n ];\n }\n\n return [];\n });\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const definedNamesAndNamepaths = new Set(utils.filterTags(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n }).map(({\n name,\n }) => {\n return name;\n }));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n // eslint-disable-next-line complexity -- Refactor\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n !globalTypes.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty'\n ) {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n const rootNamespace = val.split('.')[0];\n const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) &&\n !closedTypes.has(rootNamespace);\n\n if (!allDefinedTypes.has(val) &&\n !definedNamesAndNamepaths.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid\n ) {\n const parent =\n /**\n * @type {import('jsdoc-type-pratt-parser').RootResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (nde)._parent;\n if (parent?.type === 'JsdocTypeTypeParameter') {\n return;\n }\n\n if (parent?.type === 'JsdocTypeFunction' &&\n /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */\n (parent)?.typeParameters?.some((typeParam) => {\n return value === typeParam.name.value;\n })\n ) {\n return;\n }\n\n if (parent?.type === 'JsdocTypeInfer' && value === parent.element.value) {\n allDefinedTypes.add(value);\n return;\n }\n\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _iterateJsdoc = _interopRequireWildcard(require("../iterateJsdoc.cjs"));
|
|
8
|
+
var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
9
|
+
var _eslint = require("eslint");
|
|
10
|
+
var _parseImportsExports = require("parse-imports-exports");
|
|
11
|
+
var _semver = _interopRequireDefault(require("semver"));
|
|
12
|
+
var _toValidIdentifier = _interopRequireDefault(require("../to-valid-identifier.cjs"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
|
+
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
16
|
+
context,
|
|
17
|
+
indent,
|
|
18
|
+
jsdoc,
|
|
19
|
+
settings,
|
|
20
|
+
sourceCode,
|
|
21
|
+
utils
|
|
22
|
+
}) => {
|
|
23
|
+
const {
|
|
24
|
+
mode
|
|
25
|
+
} = settings;
|
|
26
|
+
const {
|
|
27
|
+
enableFixer = true,
|
|
28
|
+
exemptTypedefs = true,
|
|
29
|
+
outputType = 'namespaced-import'
|
|
30
|
+
} = context.options[0] || {};
|
|
31
|
+
const allComments = sourceCode.getAllComments();
|
|
32
|
+
const comments = allComments.filter(comment => {
|
|
33
|
+
return /^\*(?!\*)/v.test(comment.value);
|
|
34
|
+
}).map(commentNode => {
|
|
35
|
+
return (0, _jsdoccomment.commentParserToESTree)((0, _iterateJsdoc.parseComment)(commentNode, ''), mode === 'permissive' ? 'typescript' : mode);
|
|
36
|
+
});
|
|
37
|
+
const typedefs = comments.flatMap(doc => {
|
|
38
|
+
return doc.tags.filter(({
|
|
39
|
+
tag
|
|
40
|
+
}) => {
|
|
41
|
+
return utils.isNameOrNamepathDefiningTag(tag);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
const imports = comments.flatMap(doc => {
|
|
45
|
+
return doc.tags.filter(({
|
|
46
|
+
tag
|
|
47
|
+
}) => {
|
|
48
|
+
return tag === 'import';
|
|
49
|
+
});
|
|
50
|
+
}).map(tag => {
|
|
51
|
+
// Causes problems with stringification otherwise
|
|
52
|
+
tag.delimiter = '';
|
|
53
|
+
return tag;
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Helper to insert an import statement at the top of the file.
|
|
58
|
+
* @param {string} importText - The import statement text (without newline)
|
|
59
|
+
* @returns {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)} - Fixer function for ESLint
|
|
60
|
+
*/
|
|
61
|
+
const createImportInserter = importText => {
|
|
62
|
+
return fixer => {
|
|
63
|
+
const programNode = sourceCode.ast;
|
|
64
|
+
const commentNodes = sourceCode.getCommentsBefore(programNode);
|
|
65
|
+
|
|
66
|
+
/* c8 ignore start -- ESLint < 10 */
|
|
67
|
+
if (commentNodes[0]) {
|
|
68
|
+
return fixer.insertTextBefore(
|
|
69
|
+
// @ts-expect-error - Comment is compatible with Node in practice
|
|
70
|
+
commentNodes[0], `${importText}\n${indent}`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// For ESLint < 10, use the simple approach of inserting before programNode
|
|
74
|
+
if (_semver.default.lt(_eslint.Linter.version, '10.0.0')) {
|
|
75
|
+
return fixer.insertTextBefore(programNode, importText);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// For ESLint 10+, handle the changed Program node range
|
|
79
|
+
const sourceText = sourceCode.getText();
|
|
80
|
+
const hasCode = programNode.body && programNode.body.length > 0;
|
|
81
|
+
const leadingMatch = hasCode ? sourceText.match(/^(\n[ \t]*)/v) : null;
|
|
82
|
+
if (leadingMatch) {
|
|
83
|
+
const leading = leadingMatch[1];
|
|
84
|
+
return fixer.replaceTextRange([leading.length, leading.length], `${importText}\n${leading.slice(1)}`);
|
|
85
|
+
}
|
|
86
|
+
const startsWithNewline = sourceText[0] === '\n';
|
|
87
|
+
return fixer.replaceTextRange(startsWithNewline ? [0, 1] : [0, 0], `${importText}\n`);
|
|
88
|
+
/* c8 ignore end -- ESLint < 10 */
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag
|
|
94
|
+
*/
|
|
95
|
+
const iterateInlineImports = tag => {
|
|
96
|
+
const potentialType = tag.type;
|
|
97
|
+
let parsedType;
|
|
98
|
+
try {
|
|
99
|
+
parsedType = mode === 'permissive' ? (0, _jsdoccomment.tryParse)(/** @type {string} */potentialType) : (0, _jsdoccomment.parse)(/** @type {string} */potentialType, mode);
|
|
100
|
+
} catch {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
(0, _jsdoccomment.traverse)(parsedType, (nde, parentNode) => {
|
|
104
|
+
// @ts-expect-error Adding our own property for use below
|
|
105
|
+
nde.parentNode = parentNode;
|
|
106
|
+
});
|
|
107
|
+
(0, _jsdoccomment.traverse)(parsedType, nde => {
|
|
108
|
+
const {
|
|
109
|
+
element,
|
|
110
|
+
type
|
|
111
|
+
} = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */nde;
|
|
112
|
+
if (type !== 'JsdocTypeImport') {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
let currentNode = nde;
|
|
116
|
+
|
|
117
|
+
/** @type {string[]} */
|
|
118
|
+
const pathSegments = [];
|
|
119
|
+
|
|
120
|
+
/** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */
|
|
121
|
+
const nodes = [];
|
|
122
|
+
|
|
123
|
+
/** @type {string[]} */
|
|
124
|
+
const extraPathSegments = [];
|
|
125
|
+
|
|
126
|
+
/** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */
|
|
127
|
+
const quotes = [];
|
|
128
|
+
const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */[];
|
|
129
|
+
|
|
130
|
+
// @ts-expect-error Referencing our own property added above
|
|
131
|
+
while (currentNode && currentNode.parentNode) {
|
|
132
|
+
// @ts-expect-error Referencing our own property added above
|
|
133
|
+
currentNode = currentNode.parentNode;
|
|
134
|
+
/* c8 ignore next 3 -- Guard */
|
|
135
|
+
if (currentNode.type !== 'JsdocTypeNamePath') {
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
pathSegments.unshift(currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ? (0, _jsdoccomment.stringify)(currentNode.right.right) : currentNode.right.value);
|
|
139
|
+
nodes.unshift(currentNode);
|
|
140
|
+
propertyOrBrackets.unshift(currentNode.pathType);
|
|
141
|
+
quotes.unshift(currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ? undefined : currentNode.right.meta.quote);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @param {string} name
|
|
146
|
+
* @param {string[]} extrPathSegments
|
|
147
|
+
*/
|
|
148
|
+
const getFixer = (name, extrPathSegments) => {
|
|
149
|
+
const matchingName = (0, _toValidIdentifier.default)(name);
|
|
150
|
+
return () => {
|
|
151
|
+
/** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */
|
|
152
|
+
let node = nodes.at(0);
|
|
153
|
+
if (!node) {
|
|
154
|
+
// Not really a NamePathResult, but will be converted later anyways
|
|
155
|
+
node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */
|
|
156
|
+
/** @type {unknown} */
|
|
157
|
+
nde;
|
|
158
|
+
}
|
|
159
|
+
const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */
|
|
160
|
+
Object.keys(node);
|
|
161
|
+
for (const key of keys) {
|
|
162
|
+
delete node[key];
|
|
163
|
+
}
|
|
164
|
+
if (extrPathSegments.length) {
|
|
165
|
+
let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */
|
|
166
|
+
/** @type {unknown} */
|
|
167
|
+
node;
|
|
168
|
+
while (extrPathSegments.length && newNode) {
|
|
169
|
+
newNode.type = 'JsdocTypeNamePath';
|
|
170
|
+
newNode.right = {
|
|
171
|
+
meta: {
|
|
172
|
+
quote: quotes.shift()
|
|
173
|
+
},
|
|
174
|
+
type: 'JsdocTypeProperty',
|
|
175
|
+
value: (/** @type {string} */extrPathSegments.shift())
|
|
176
|
+
};
|
|
177
|
+
newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */
|
|
178
|
+
propertyOrBrackets.shift();
|
|
179
|
+
// @ts-expect-error Temporary
|
|
180
|
+
newNode.left = {};
|
|
181
|
+
newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */
|
|
182
|
+
newNode.left;
|
|
183
|
+
}
|
|
184
|
+
const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */
|
|
185
|
+
/** @type {unknown} */
|
|
186
|
+
newNode;
|
|
187
|
+
nameNode.type = 'JsdocTypeName';
|
|
188
|
+
nameNode.value = matchingName;
|
|
189
|
+
} else {
|
|
190
|
+
const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */
|
|
191
|
+
/** @type {unknown} */
|
|
192
|
+
node;
|
|
193
|
+
newNode.type = 'JsdocTypeName';
|
|
194
|
+
newNode.value = matchingName;
|
|
195
|
+
}
|
|
196
|
+
for (const src of tag.source) {
|
|
197
|
+
if (src.tokens.type) {
|
|
198
|
+
src.tokens.type = `{${(0, _jsdoccomment.stringify)(parsedType)}}`;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/** @type {string[]} */
|
|
206
|
+
let unusedPathSegments = [];
|
|
207
|
+
const findMatchingTypedef = () => {
|
|
208
|
+
// Don't want typedefs to find themselves
|
|
209
|
+
if (!exemptTypedefs) {
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
212
|
+
const pthSegments = [...pathSegments];
|
|
213
|
+
return typedefs.find(typedef => {
|
|
214
|
+
let typedefNode = typedef.parsedType;
|
|
215
|
+
let namepathMatch;
|
|
216
|
+
while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') {
|
|
217
|
+
const pathSegment = pthSegments.shift();
|
|
218
|
+
if (!pathSegment) {
|
|
219
|
+
namepathMatch = false;
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
if (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' && (0, _jsdoccomment.stringify)(typedefNode.right.right) !== pathSegment || typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' && typedefNode.right.value !== pathSegment) {
|
|
223
|
+
if (namepathMatch === true) {
|
|
224
|
+
// It stopped matching, so stop
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
extraPathSegments.push(pathSegment);
|
|
228
|
+
namepathMatch = false;
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
namepathMatch = true;
|
|
232
|
+
unusedPathSegments = pthSegments;
|
|
233
|
+
typedefNode = typedefNode.left;
|
|
234
|
+
}
|
|
235
|
+
return namepathMatch &&
|
|
236
|
+
// `import('eslint')` matches
|
|
237
|
+
typedefNode && typedefNode.type === 'JsdocTypeImport' && typedefNode.element.value === element.value;
|
|
238
|
+
});
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// Check @typedef's first as should be longest match, allowing
|
|
242
|
+
// for shorter abbreviations
|
|
243
|
+
const matchingTypedef = findMatchingTypedef();
|
|
244
|
+
if (matchingTypedef) {
|
|
245
|
+
utils.reportJSDoc('Inline `import()` found; using `@typedef`', tag, enableFixer ? getFixer(matchingTypedef.name, [...extraPathSegments, ...unusedPathSegments.slice(-1), ...unusedPathSegments.slice(0, -1)]) : null);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const findMatchingImport = () => {
|
|
249
|
+
for (const imprt of imports) {
|
|
250
|
+
const parsedImport = (0, _parseImportsExports.parseImportsExports)((0, _jsdoccomment.estreeToString)(imprt).replace(/^\s*@/v, '').trim());
|
|
251
|
+
const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0];
|
|
252
|
+
const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0];
|
|
253
|
+
const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? [];
|
|
254
|
+
const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0];
|
|
255
|
+
const namespaceImportsDefault = namespaceImports && namespaceImports.default;
|
|
256
|
+
const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace;
|
|
257
|
+
const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0];
|
|
258
|
+
const lastPathSegment = pathSegments.at(-1);
|
|
259
|
+
if (namespaceImportsDefault && namespaceImportsModuleSpecifier === element.value || element.value === namedImportsModuleSpecifier && (lastPathSegment && namedImportNames.includes(lastPathSegment) || lastPathSegment === 'default') || namespaceImportsNamespace && namespaceImportsModuleSpecifier === element.value) {
|
|
260
|
+
return {
|
|
261
|
+
namedImportNames,
|
|
262
|
+
namedImports,
|
|
263
|
+
namedImportsModuleSpecifier,
|
|
264
|
+
namespaceImports,
|
|
265
|
+
namespaceImportsDefault,
|
|
266
|
+
namespaceImportsModuleSpecifier,
|
|
267
|
+
namespaceImportsNamespace
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return undefined;
|
|
272
|
+
};
|
|
273
|
+
const matchingImport = findMatchingImport();
|
|
274
|
+
if (matchingImport) {
|
|
275
|
+
const {
|
|
276
|
+
namedImportNames,
|
|
277
|
+
namedImports,
|
|
278
|
+
namedImportsModuleSpecifier,
|
|
279
|
+
namespaceImportsNamespace
|
|
280
|
+
} = matchingImport;
|
|
281
|
+
if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) {
|
|
282
|
+
utils.reportJSDoc('Inline `import()` found; prefer `@import`', tag, enableFixer ? getFixer(namedImports.default, []) : null);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
const lastPthSegment = pathSegments.at(-1);
|
|
286
|
+
if (lastPthSegment && namedImportNames.includes(lastPthSegment)) {
|
|
287
|
+
utils.reportJSDoc('Inline `import()` found; prefer `@import`', tag, enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (namespaceImportsNamespace) {
|
|
291
|
+
utils.reportJSDoc('Inline `import()` found; prefer `@import`', tag, enableFixer ? getFixer(namespaceImportsNamespace, [...pathSegments]) : null);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (!pathSegments.length) {
|
|
296
|
+
utils.reportJSDoc('Inline `import()` found; prefer `@import`', tag, enableFixer ? fixer => {
|
|
297
|
+
getFixer(element.value, [])();
|
|
298
|
+
return createImportInserter(`/** @import * as ${(0, _toValidIdentifier.default)(element.value)} from '${element.value}'; */`)(fixer);
|
|
299
|
+
} : null);
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const lstPathSegment = pathSegments.at(-1);
|
|
303
|
+
if (lstPathSegment && lstPathSegment === 'default') {
|
|
304
|
+
utils.reportJSDoc('Inline `import()` found; prefer `@import`', tag, enableFixer ? fixer => {
|
|
305
|
+
getFixer(element.value, [])();
|
|
306
|
+
return createImportInserter(`/** @import ${element.value} from '${element.value}'; */`)(fixer);
|
|
307
|
+
} : null);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
utils.reportJSDoc('Inline `import()` found; prefer `@import`', tag, enableFixer ? fixer => {
|
|
311
|
+
if (outputType === 'namespaced-import') {
|
|
312
|
+
getFixer(element.value, [...pathSegments])();
|
|
313
|
+
} else {
|
|
314
|
+
getFixer(/** @type {string} */pathSegments.at(-1), pathSegments.slice(0, -1))();
|
|
315
|
+
}
|
|
316
|
+
const importText = outputType === 'namespaced-import' ? `/** @import * as ${(0, _toValidIdentifier.default)(element.value)} from '${element.value}'; */` : `/** @import { ${(0, _toValidIdentifier.default)(/* c8 ignore next -- TS */
|
|
317
|
+
pathSegments.at(-1) ?? '')} } from '${element.value}'; */`;
|
|
318
|
+
return createImportInserter(importText)(fixer);
|
|
319
|
+
} : null);
|
|
320
|
+
});
|
|
321
|
+
};
|
|
322
|
+
for (const tag of jsdoc.tags) {
|
|
323
|
+
const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);
|
|
324
|
+
const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);
|
|
325
|
+
if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) {
|
|
326
|
+
iterateInlineImports(tag);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}, {
|
|
330
|
+
iterateAllJsdocs: true,
|
|
331
|
+
meta: {
|
|
332
|
+
docs: {
|
|
333
|
+
description: 'Prefer `@import` tags to inline `import()` statements.',
|
|
334
|
+
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header'
|
|
335
|
+
},
|
|
336
|
+
fixable: 'code',
|
|
337
|
+
schema: [{
|
|
338
|
+
additionalProperties: false,
|
|
339
|
+
properties: {
|
|
340
|
+
enableFixer: {
|
|
341
|
+
description: 'Whether or not to enable the fixer to add `@import` tags.',
|
|
342
|
+
type: 'boolean'
|
|
343
|
+
},
|
|
344
|
+
exemptTypedefs: {
|
|
345
|
+
description: 'Whether to allow `import()` statements within `@typedef`',
|
|
346
|
+
type: 'boolean'
|
|
347
|
+
},
|
|
348
|
+
// We might add `typedef` and `typedef-local-only`, but also raises
|
|
349
|
+
// question of how deep the generated typedef should be
|
|
350
|
+
outputType: {
|
|
351
|
+
description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found',
|
|
352
|
+
enum: ['named-import', 'namespaced-import'],
|
|
353
|
+
type: 'string'
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
type: 'object'
|
|
357
|
+
}],
|
|
358
|
+
type: 'suggestion'
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
module.exports = exports.default;
|
|
362
|
+
//# sourceMappingURL=preferImportTag.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferImportTag.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_eslint","_parseImportsExports","_semver","_interopRequireDefault","_toValidIdentifier","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","sourceCode","utils","mode","enableFixer","exemptTypedefs","outputType","options","allComments","getAllComments","comments","filter","comment","test","value","map","commentNode","commentParserToESTree","parseComment","typedefs","flatMap","doc","tags","tag","isNameOrNamepathDefiningTag","imports","delimiter","createImportInserter","importText","fixer","programNode","ast","commentNodes","getCommentsBefore","insertTextBefore","semver","lt","Linter","version","sourceText","getText","hasCode","body","length","leadingMatch","match","leading","replaceTextRange","slice","startsWithNewline","iterateInlineImports","potentialType","type","parsedType","tryParseType","parseType","traverse","nde","parentNode","element","currentNode","pathSegments","nodes","extraPathSegments","quotes","propertyOrBrackets","unshift","right","stringify","pathType","undefined","meta","quote","getFixer","name","extrPathSegments","matchingName","toValidIdentifier","node","at","keys","key","newNode","shift","left","nameNode","src","source","tokens","unusedPathSegments","findMatchingTypedef","pthSegments","find","typedef","typedefNode","namepathMatch","pathSegment","push","matchingTypedef","reportJSDoc","findMatchingImport","imprt","parsedImport","parseImportsExports","estreeToString","replace","trim","namedImportsModuleSpecifier","namedImports","values","namedImportNames","names","namespaceImports","namespaceImportsDefault","namespaceImportsNamespace","namespace","namespaceImportsModuleSpecifier","lastPathSegment","includes","matchingImport","lastPthSegment","lstPathSegment","mightHaveTypePosition","tagMightHaveTypePosition","hasTypePosition","Boolean","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/preferImportTag.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n commentParserToESTree,\n estreeToString,\n // getJSDocComment,\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n Linter,\n} from 'eslint';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport toValidIdentifier from 'to-valid-identifier';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const {\n enableFixer = true,\n exemptTypedefs = true,\n outputType = 'namespaced-import',\n } = context.options[0] || {};\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return commentParserToESTree(\n parseComment(commentNode, ''), mode === 'permissive' ? 'typescript' : mode,\n );\n });\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n });\n\n const imports = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).map((tag) => {\n // Causes problems with stringification otherwise\n tag.delimiter = '';\n return tag;\n });\n\n /**\n * Helper to insert an import statement at the top of the file.\n * @param {string} importText - The import statement text (without newline)\n * @returns {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)} - Fixer function for ESLint\n */\n const createImportInserter = (importText) => {\n return (fixer) => {\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n\n /* c8 ignore start -- ESLint < 10 */\n if (commentNodes[0]) {\n return fixer.insertTextBefore(\n // @ts-expect-error - Comment is compatible with Node in practice\n commentNodes[0],\n `${importText}\\n${indent}`,\n );\n }\n\n // For ESLint < 10, use the simple approach of inserting before programNode\n if (semver.lt(Linter.version, '10.0.0')) {\n return fixer.insertTextBefore(\n programNode,\n importText,\n );\n }\n\n // For ESLint 10+, handle the changed Program node range\n const sourceText = sourceCode.getText();\n const hasCode = programNode.body && programNode.body.length > 0;\n const leadingMatch = hasCode ? sourceText.match(/^(\\n[ \\t]*)/v) : null;\n if (leadingMatch) {\n const leading = leadingMatch[1];\n return fixer.replaceTextRange(\n [\n leading.length, leading.length,\n ],\n `${importText}\\n${leading.slice(1)}`,\n );\n }\n\n const startsWithNewline = sourceText[0] === '\\n';\n return fixer.replaceTextRange(\n startsWithNewline ? [\n 0, 1,\n ] : [\n 0, 0,\n ],\n `${importText}\\n`,\n );\n /* c8 ignore end -- ESLint < 10 */\n };\n };\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const iterateInlineImports = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde, parentNode) => {\n // @ts-expect-error Adding our own property for use below\n nde.parentNode = parentNode;\n });\n\n traverse(parsedType, (nde) => {\n const {\n element,\n type,\n } = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */ (nde);\n if (type !== 'JsdocTypeImport') {\n return;\n }\n\n let currentNode = nde;\n\n /** @type {string[]} */\n const pathSegments = [];\n\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */\n const nodes = [];\n\n /** @type {string[]} */\n const extraPathSegments = [];\n\n /** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */\n const quotes = [];\n\n const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */ ([]);\n\n // @ts-expect-error Referencing our own property added above\n while (currentNode && currentNode.parentNode) {\n // @ts-expect-error Referencing our own property added above\n currentNode = currentNode.parentNode;\n /* c8 ignore next 3 -- Guard */\n if (currentNode.type !== 'JsdocTypeNamePath') {\n break;\n }\n\n pathSegments.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n stringify(currentNode.right.right) :\n currentNode.right.value,\n );\n nodes.unshift(currentNode);\n propertyOrBrackets.unshift(currentNode.pathType);\n quotes.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n undefined :\n currentNode.right.meta.quote,\n );\n }\n\n /**\n * @param {string} name\n * @param {string[]} extrPathSegments\n */\n const getFixer = (name, extrPathSegments) => {\n const matchingName = toValidIdentifier(name);\n return () => {\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */\n let node = nodes.at(0);\n if (!node) {\n // Not really a NamePathResult, but will be converted later anyways\n node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (nde)\n );\n }\n\n const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */ (\n Object.keys(node)\n );\n\n for (const key of keys) {\n delete node[key];\n }\n\n if (extrPathSegments.length) {\n let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (node)\n );\n while (extrPathSegments.length && newNode) {\n newNode.type = 'JsdocTypeNamePath';\n newNode.right = {\n meta: {\n quote: quotes.shift(),\n },\n type: 'JsdocTypeProperty',\n value: /** @type {string} */ (extrPathSegments.shift()),\n };\n\n newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */ (\n propertyOrBrackets.shift()\n );\n // @ts-expect-error Temporary\n newNode.left = {};\n newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n newNode.left\n );\n }\n\n const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (newNode)\n );\n nameNode.type = 'JsdocTypeName';\n nameNode.value = matchingName;\n } else {\n const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (node)\n );\n newNode.type = 'JsdocTypeName';\n newNode.value = matchingName;\n }\n\n for (const src of tag.source) {\n if (src.tokens.type) {\n src.tokens.type = `{${stringify(parsedType)}}`;\n break;\n }\n }\n };\n };\n\n /** @type {string[]} */\n let unusedPathSegments = [];\n\n const findMatchingTypedef = () => {\n // Don't want typedefs to find themselves\n if (!exemptTypedefs) {\n return undefined;\n }\n\n const pthSegments = [\n ...pathSegments,\n ];\n return typedefs.find((typedef) => {\n let typedefNode = typedef.parsedType;\n let namepathMatch;\n while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') {\n const pathSegment = pthSegments.shift();\n if (!pathSegment) {\n namepathMatch = false;\n break;\n }\n\n if (\n (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' &&\n stringify(typedefNode.right.right) !== pathSegment) ||\n (typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' &&\n typedefNode.right.value !== pathSegment)\n ) {\n if (namepathMatch === true) {\n // It stopped matching, so stop\n break;\n }\n\n extraPathSegments.push(pathSegment);\n namepathMatch = false;\n continue;\n }\n\n namepathMatch = true;\n\n unusedPathSegments = pthSegments;\n\n typedefNode = typedefNode.left;\n }\n\n return namepathMatch &&\n // `import('eslint')` matches\n typedefNode &&\n typedefNode.type === 'JsdocTypeImport' &&\n typedefNode.element.value === element.value;\n });\n };\n\n // Check @typedef's first as should be longest match, allowing\n // for shorter abbreviations\n const matchingTypedef = findMatchingTypedef();\n if (matchingTypedef) {\n utils.reportJSDoc(\n 'Inline `import()` found; using `@typedef`',\n tag,\n enableFixer ? getFixer(matchingTypedef.name, [\n ...extraPathSegments,\n ...unusedPathSegments.slice(-1),\n ...unusedPathSegments.slice(0, -1),\n ]) : null,\n );\n return;\n }\n\n const findMatchingImport = () => {\n for (const imprt of imports) {\n const parsedImport = parseImportsExports(\n estreeToString(imprt).replace(/^\\s*@/v, '').trim(),\n );\n\n const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0];\n\n const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0];\n const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? [];\n\n const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0];\n\n const namespaceImportsDefault = namespaceImports && namespaceImports.default;\n const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace;\n const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0];\n\n const lastPathSegment = pathSegments.at(-1);\n\n if (\n (namespaceImportsDefault &&\n namespaceImportsModuleSpecifier === element.value) ||\n (element.value === namedImportsModuleSpecifier && (\n (lastPathSegment && namedImportNames.includes(lastPathSegment)) ||\n lastPathSegment === 'default'\n )) ||\n (namespaceImportsNamespace &&\n namespaceImportsModuleSpecifier === element.value)\n ) {\n return {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImports,\n namespaceImportsDefault,\n namespaceImportsModuleSpecifier,\n namespaceImportsNamespace,\n };\n }\n }\n\n return undefined;\n };\n\n const matchingImport = findMatchingImport();\n if (matchingImport) {\n const {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImportsNamespace,\n } = matchingImport;\n if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namedImports.default, []) : null,\n );\n return;\n }\n\n const lastPthSegment = pathSegments.at(-1);\n if (lastPthSegment && namedImportNames.includes(lastPthSegment)) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null,\n );\n return;\n }\n\n if (namespaceImportsNamespace) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namespaceImportsNamespace, [\n ...pathSegments,\n ]) : null,\n );\n return;\n }\n }\n\n if (!pathSegments.length) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n return createImportInserter(\n `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */`,\n )(fixer);\n } : null,\n );\n return;\n }\n\n const lstPathSegment = pathSegments.at(-1);\n if (lstPathSegment && lstPathSegment === 'default') {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n return createImportInserter(\n `/** @import ${element.value} from '${element.value}'; */`,\n )(fixer);\n } : null,\n );\n return;\n }\n\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n if (outputType === 'namespaced-import') {\n getFixer(element.value, [\n ...pathSegments,\n ])();\n } else {\n getFixer(\n /** @type {string} */ (pathSegments.at(-1)),\n pathSegments.slice(0, -1),\n )();\n }\n\n const importText = outputType === 'namespaced-import' ?\n `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */` :\n `/** @import { ${toValidIdentifier(\n /* c8 ignore next -- TS */\n pathSegments.at(-1) ?? '',\n )} } from '${element.value}'; */`;\n\n return createImportInserter(importText)(fixer);\n } : null,\n );\n });\n };\n\n for (const tag of jsdoc.tags) {\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) {\n iterateInlineImports(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefer `@import` tags to inline `import()` statements.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether or not to enable the fixer to add `@import` tags.',\n type: 'boolean',\n },\n exemptTypedefs: {\n description: 'Whether to allow `import()` statements within `@typedef`',\n type: 'boolean',\n },\n\n // We might add `typedef` and `typedef-local-only`, but also raises\n // question of how deep the generated typedef should be\n outputType: {\n description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found',\n enum: [\n 'named-import',\n 'namespaced-import',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|