eslint-plugin-jsdoc 63.3.3 → 64.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -0
- package/package.json +23 -48
- package/src/index.js +22 -6
- package/dist/WarnSettings.cjs +0 -38
- package/dist/WarnSettings.cjs.map +0 -1
- package/dist/alignTransform.cjs +0 -402
- package/dist/alignTransform.cjs.map +0 -1
- package/dist/buildForbidRuleDefinition.cjs +0 -101
- package/dist/buildForbidRuleDefinition.cjs.map +0 -1
- package/dist/buildRejectOrPreferRuleDefinition.cjs +0 -352
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +0 -1
- package/dist/cjs/WarnSettings.d.ts +0 -16
- package/dist/cjs/alignTransform.d.ts +0 -33
- package/dist/cjs/buildForbidRuleDefinition.d.ts +0 -14
- package/dist/cjs/buildRejectOrPreferRuleDefinition.d.ts +0 -8
- package/dist/cjs/defaultTagOrder.d.ts +0 -4
- package/dist/cjs/exportParser.d.ts +0 -40
- package/dist/cjs/getDefaultTagStructureForMode.d.ts +0 -10
- package/dist/cjs/getJsdocProcessorPlugin.d.cts +0 -5
- package/dist/cjs/getJsdocProcessorPlugin.d.ts +0 -66
- package/dist/cjs/index-cjs.d.ts +0 -26
- package/dist/cjs/index.cjs.d.cts +0 -2
- package/dist/cjs/iterateJsdoc.d.cts +0 -7
- package/dist/cjs/iterateJsdoc.d.ts +0 -495
- package/dist/cjs/jsdocUtils.d.ts +0 -500
- package/dist/cjs/rules/checkAccess.d.ts +0 -2
- package/dist/cjs/rules/checkAlignment.d.ts +0 -2
- package/dist/cjs/rules/checkExamples.d.ts +0 -3
- package/dist/cjs/rules/checkIndentation.d.ts +0 -2
- package/dist/cjs/rules/checkLineAlignment.d.ts +0 -9
- package/dist/cjs/rules/checkParamNames.d.ts +0 -2
- package/dist/cjs/rules/checkPropertyNames.d.ts +0 -2
- package/dist/cjs/rules/checkSyntax.d.ts +0 -2
- package/dist/cjs/rules/checkTagNames.d.ts +0 -2
- package/dist/cjs/rules/checkTemplateNames.d.ts +0 -2
- package/dist/cjs/rules/checkTypes.d.ts +0 -7
- package/dist/cjs/rules/checkValues.d.ts +0 -2
- package/dist/cjs/rules/convertToJsdocComments.d.ts +0 -266
- package/dist/cjs/rules/emptyTags.d.ts +0 -2
- package/dist/cjs/rules/escapeInlineTags.d.ts +0 -2
- package/dist/cjs/rules/implementsOnClasses.d.ts +0 -2
- package/dist/cjs/rules/importsAsDependencies.d.ts +0 -2
- package/dist/cjs/rules/informativeDocs.d.ts +0 -2
- package/dist/cjs/rules/linesBeforeBlock.d.ts +0 -2
- package/dist/cjs/rules/matchDescription.d.ts +0 -2
- package/dist/cjs/rules/matchName.d.ts +0 -2
- package/dist/cjs/rules/multilineBlocks.d.ts +0 -2
- package/dist/cjs/rules/noBadBlocks.d.ts +0 -2
- package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +0 -2
- package/dist/cjs/rules/noBlankBlocks.d.ts +0 -2
- package/dist/cjs/rules/noDefaults.d.ts +0 -2
- package/dist/cjs/rules/noMissingSyntax.d.ts +0 -9
- package/dist/cjs/rules/noMultiAsterisks.d.ts +0 -2
- package/dist/cjs/rules/noRestrictedSyntax.d.ts +0 -2
- package/dist/cjs/rules/noTypes.d.ts +0 -2
- package/dist/cjs/rules/noUndefinedTypes.d.ts +0 -2
- package/dist/cjs/rules/normalizeSeeLinks.d.ts +0 -2
- package/dist/cjs/rules/preferImportTag.d.ts +0 -2
- package/dist/cjs/rules/requireAsteriskPrefix.d.ts +0 -2
- package/dist/cjs/rules/requireDescription.d.ts +0 -2
- package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +0 -2
- package/dist/cjs/rules/requireExample.d.ts +0 -2
- package/dist/cjs/rules/requireFileOverview.d.ts +0 -2
- package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +0 -2
- package/dist/cjs/rules/requireJsdoc.d.ts +0 -24
- package/dist/cjs/rules/requireParam.d.ts +0 -3
- package/dist/cjs/rules/requireParamDescription.d.ts +0 -2
- package/dist/cjs/rules/requireParamName.d.ts +0 -2
- package/dist/cjs/rules/requireParamType.d.ts +0 -2
- package/dist/cjs/rules/requireProperty.d.ts +0 -2
- package/dist/cjs/rules/requirePropertyDescription.d.ts +0 -2
- package/dist/cjs/rules/requirePropertyName.d.ts +0 -2
- package/dist/cjs/rules/requirePropertyType.d.ts +0 -2
- package/dist/cjs/rules/requireRejects.d.ts +0 -2
- package/dist/cjs/rules/requireReturns.d.ts +0 -2
- package/dist/cjs/rules/requireReturnsCheck.d.ts +0 -2
- package/dist/cjs/rules/requireReturnsDescription.d.ts +0 -2
- package/dist/cjs/rules/requireReturnsType.d.ts +0 -2
- package/dist/cjs/rules/requireTags.d.ts +0 -2
- package/dist/cjs/rules/requireTemplate.d.ts +0 -2
- package/dist/cjs/rules/requireThrows.d.ts +0 -2
- package/dist/cjs/rules/requireYields.d.ts +0 -2
- package/dist/cjs/rules/requireYieldsCheck.d.ts +0 -2
- package/dist/cjs/rules/sortTags.d.ts +0 -2
- package/dist/cjs/rules/tagLines.d.ts +0 -2
- package/dist/cjs/rules/textEscaping.d.ts +0 -2
- package/dist/cjs/rules/tsMethodSignatureStyle.d.ts +0 -2
- package/dist/cjs/rules/tsNoEmptyObjectType.d.ts +0 -2
- package/dist/cjs/rules/tsNoUnnecessaryTemplateExpression.d.ts +0 -2
- package/dist/cjs/rules/tsPreferFunctionType.d.ts +0 -2
- package/dist/cjs/rules/typeFormatting.d.ts +0 -2
- package/dist/cjs/rules/validTypes.d.ts +0 -2
- package/dist/cjs/tagNames.d.ts +0 -15
- package/dist/cjs/utils/hasReturnValue.d.ts +0 -19
- package/dist/defaultTagOrder.cjs +0 -46
- package/dist/defaultTagOrder.cjs.map +0 -1
- package/dist/exportParser.cjs +0 -732
- package/dist/exportParser.cjs.map +0 -1
- package/dist/generateDocs.cjs +0 -342
- package/dist/generateDocs.cjs.map +0 -1
- package/dist/generateOptions.cjs +0 -62
- package/dist/generateOptions.cjs.map +0 -1
- package/dist/generateRule.cjs +0 -248
- package/dist/generateRule.cjs.map +0 -1
- package/dist/generateRuleTypes.cjs +0 -24
- package/dist/generateRuleTypes.cjs.map +0 -1
- package/dist/getDefaultTagStructureForMode.cjs +0 -289
- package/dist/getDefaultTagStructureForMode.cjs.map +0 -1
- package/dist/getJsdocProcessorPlugin.cjs +0 -587
- package/dist/getJsdocProcessorPlugin.cjs.map +0 -1
- package/dist/getJsdocProcessorPlugin.cts +0 -5
- package/dist/index-cjs.cjs +0 -600
- package/dist/index-cjs.cjs.map +0 -1
- package/dist/index-cjs.d.ts +0 -27
- package/dist/index-esm.cjs +0 -162
- package/dist/index-esm.cjs.map +0 -1
- package/dist/index-esm.d.ts +0 -72
- package/dist/index.cjs +0 -748
- package/dist/index.cjs.cts +0 -3
- package/dist/index.cjs.map +0 -1
- package/dist/iterateJsdoc.cjs +0 -2150
- package/dist/iterateJsdoc.cjs.map +0 -1
- package/dist/iterateJsdoc.cts +0 -7
- package/dist/jsdocUtils.cjs +0 -1786
- package/dist/jsdocUtils.cjs.map +0 -1
- package/dist/rules/checkAccess.cjs +0 -40
- package/dist/rules/checkAccess.cjs.map +0 -1
- package/dist/rules/checkAlignment.cjs +0 -78
- package/dist/rules/checkAlignment.cjs.map +0 -1
- package/dist/rules/checkExamples.cjs +0 -521
- package/dist/rules/checkExamples.cjs.map +0 -1
- package/dist/rules/checkIndentation.cjs +0 -170
- package/dist/rules/checkIndentation.cjs.map +0 -1
- package/dist/rules/checkLineAlignment.cjs +0 -398
- package/dist/rules/checkLineAlignment.cjs.map +0 -1
- package/dist/rules/checkParamNames.cjs +0 -407
- package/dist/rules/checkParamNames.cjs.map +0 -1
- package/dist/rules/checkPropertyNames.cjs +0 -135
- package/dist/rules/checkPropertyNames.cjs.map +0 -1
- package/dist/rules/checkSyntax.cjs +0 -38
- package/dist/rules/checkSyntax.cjs.map +0 -1
- package/dist/rules/checkTagNames.cjs +0 -312
- package/dist/rules/checkTagNames.cjs.map +0 -1
- package/dist/rules/checkTemplateNames.cjs +0 -192
- package/dist/rules/checkTemplateNames.cjs.map +0 -1
- package/dist/rules/checkTypes.cjs +0 -111
- package/dist/rules/checkTypes.cjs.map +0 -1
- package/dist/rules/checkValues.cjs +0 -166
- package/dist/rules/checkValues.cjs.map +0 -1
- package/dist/rules/convertToJsdocComments.cjs +0 -356
- package/dist/rules/convertToJsdocComments.cjs.map +0 -1
- package/dist/rules/emptyTags.cjs +0 -98
- package/dist/rules/emptyTags.cjs.map +0 -1
- package/dist/rules/escapeInlineTags.cjs +0 -234
- package/dist/rules/escapeInlineTags.cjs.map +0 -1
- package/dist/rules/implementsOnClasses.cjs +0 -74
- package/dist/rules/implementsOnClasses.cjs.map +0 -1
- package/dist/rules/importsAsDependencies.cjs +0 -104
- package/dist/rules/importsAsDependencies.cjs.map +0 -1
- package/dist/rules/informativeDocs.cjs +0 -187
- package/dist/rules/informativeDocs.cjs.map +0 -1
- package/dist/rules/linesBeforeBlock.cjs +0 -120
- package/dist/rules/linesBeforeBlock.cjs.map +0 -1
- package/dist/rules/matchDescription.cjs +0 -356
- package/dist/rules/matchDescription.cjs.map +0 -1
- package/dist/rules/matchName.cjs +0 -160
- package/dist/rules/matchName.cjs.map +0 -1
- package/dist/rules/multilineBlocks.cjs +0 -431
- package/dist/rules/multilineBlocks.cjs.map +0 -1
- package/dist/rules/noBadBlocks.cjs +0 -100
- package/dist/rules/noBadBlocks.cjs.map +0 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +0 -63
- package/dist/rules/noBlankBlockDescriptions.cjs.map +0 -1
- package/dist/rules/noBlankBlocks.cjs +0 -54
- package/dist/rules/noBlankBlocks.cjs.map +0 -1
- package/dist/rules/noDefaults.cjs +0 -102
- package/dist/rules/noDefaults.cjs.map +0 -1
- package/dist/rules/noMissingSyntax.cjs +0 -196
- package/dist/rules/noMissingSyntax.cjs.map +0 -1
- package/dist/rules/noMultiAsterisks.cjs +0 -126
- package/dist/rules/noMultiAsterisks.cjs.map +0 -1
- package/dist/rules/noRestrictedSyntax.cjs +0 -68
- package/dist/rules/noRestrictedSyntax.cjs.map +0 -1
- package/dist/rules/noTypes.cjs +0 -101
- package/dist/rules/noTypes.cjs.map +0 -1
- package/dist/rules/noUndefinedTypes.cjs +0 -616
- package/dist/rules/noUndefinedTypes.cjs.map +0 -1
- package/dist/rules/normalizeSeeLinks.cjs +0 -271
- package/dist/rules/normalizeSeeLinks.cjs.map +0 -1
- package/dist/rules/preferImportTag.cjs +0 -362
- package/dist/rules/preferImportTag.cjs.map +0 -1
- package/dist/rules/requireAsteriskPrefix.cjs +0 -190
- package/dist/rules/requireAsteriskPrefix.cjs.map +0 -1
- package/dist/rules/requireDescription.cjs +0 -164
- package/dist/rules/requireDescription.cjs.map +0 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +0 -321
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +0 -1
- package/dist/rules/requireExample.cjs +0 -136
- package/dist/rules/requireExample.cjs.map +0 -1
- package/dist/rules/requireFileOverview.cjs +0 -194
- package/dist/rules/requireFileOverview.cjs.map +0 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +0 -166
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +0 -1
- package/dist/rules/requireJsdoc.cjs +0 -721
- package/dist/rules/requireJsdoc.cjs.map +0 -1
- package/dist/rules/requireParam.cjs +0 -772
- package/dist/rules/requireParam.cjs.map +0 -1
- package/dist/rules/requireParamDescription.cjs +0 -105
- package/dist/rules/requireParamDescription.cjs.map +0 -1
- package/dist/rules/requireParamName.cjs +0 -68
- package/dist/rules/requireParamName.cjs.map +0 -1
- package/dist/rules/requireParamType.cjs +0 -104
- package/dist/rules/requireParamType.cjs.map +0 -1
- package/dist/rules/requireProperty.cjs +0 -63
- package/dist/rules/requireProperty.cjs.map +0 -1
- package/dist/rules/requirePropertyDescription.cjs +0 -29
- package/dist/rules/requirePropertyDescription.cjs.map +0 -1
- package/dist/rules/requirePropertyName.cjs +0 -29
- package/dist/rules/requirePropertyName.cjs.map +0 -1
- package/dist/rules/requirePropertyType.cjs +0 -29
- package/dist/rules/requirePropertyType.cjs.map +0 -1
- package/dist/rules/requireRejects.cjs +0 -226
- package/dist/rules/requireRejects.cjs.map +0 -1
- package/dist/rules/requireReturns.cjs +0 -262
- package/dist/rules/requireReturns.cjs.map +0 -1
- package/dist/rules/requireReturnsCheck.cjs +0 -225
- package/dist/rules/requireReturnsCheck.cjs.map +0 -1
- package/dist/rules/requireReturnsDescription.cjs +0 -72
- package/dist/rules/requireReturnsDescription.cjs.map +0 -1
- package/dist/rules/requireReturnsType.cjs +0 -68
- package/dist/rules/requireReturnsType.cjs.map +0 -1
- package/dist/rules/requireTags.cjs +0 -74
- package/dist/rules/requireTags.cjs.map +0 -1
- package/dist/rules/requireTemplate.cjs +0 -220
- package/dist/rules/requireTemplate.cjs.map +0 -1
- package/dist/rules/requireThrows.cjs +0 -118
- package/dist/rules/requireThrows.cjs.map +0 -1
- package/dist/rules/requireYields.cjs +0 -224
- package/dist/rules/requireYields.cjs.map +0 -1
- package/dist/rules/requireYieldsCheck.cjs +0 -179
- package/dist/rules/requireYieldsCheck.cjs.map +0 -1
- package/dist/rules/sortTags.cjs +0 -656
- package/dist/rules/sortTags.cjs.map +0 -1
- package/dist/rules/tagLines.cjs +0 -374
- package/dist/rules/tagLines.cjs.map +0 -1
- package/dist/rules/textEscaping.cjs +0 -141
- package/dist/rules/textEscaping.cjs.map +0 -1
- package/dist/rules/tsMethodSignatureStyle.cjs +0 -240
- package/dist/rules/tsMethodSignatureStyle.cjs.map +0 -1
- package/dist/rules/tsNoEmptyObjectType.cjs +0 -62
- package/dist/rules/tsNoEmptyObjectType.cjs.map +0 -1
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +0 -104
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +0 -1
- package/dist/rules/tsPreferFunctionType.cjs +0 -110
- package/dist/rules/tsPreferFunctionType.cjs.map +0 -1
- package/dist/rules/typeFormatting.cjs +0 -607
- package/dist/rules/typeFormatting.cjs.map +0 -1
- package/dist/rules/validTypes.cjs +0 -324
- package/dist/rules/validTypes.cjs.map +0 -1
- package/dist/tagNames.cjs +0 -244
- package/dist/tagNames.cjs.map +0 -1
- package/dist/to-valid-identifier.cjs +0 -263
- package/dist/utils/hasReturnValue.cjs +0 -495
- package/dist/utils/hasReturnValue.cjs.map +0 -1
- package/rollup.config.js +0 -16
- package/src/getJsdocProcessorPlugin.cts +0 -5
- package/src/index-cjs.js +0 -760
- package/src/index-esm.js +0 -196
- package/src/index.cjs.cts +0 -3
- package/src/iterateJsdoc.cts +0 -7
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
-
var _areDocsInformative = require("are-docs-informative");
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
const defaultAliases = {
|
|
11
|
-
a: ['an', 'our']
|
|
12
|
-
};
|
|
13
|
-
const defaultUselessWords = ['a', 'an', 'i', 'in', 'of', 's', 'the'];
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node
|
|
17
|
-
* @returns {string[]}
|
|
18
|
-
*/
|
|
19
|
-
const getNamesFromNode = node => {
|
|
20
|
-
switch (node?.type) {
|
|
21
|
-
case 'AccessorProperty':
|
|
22
|
-
case 'MethodDefinition':
|
|
23
|
-
case 'PropertyDefinition':
|
|
24
|
-
case 'TSAbstractAccessorProperty':
|
|
25
|
-
case 'TSAbstractMethodDefinition':
|
|
26
|
-
case 'TSAbstractPropertyDefinition':
|
|
27
|
-
return [...getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.Node} */node.parent.parent), ...getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.Node} */
|
|
28
|
-
node.key)];
|
|
29
|
-
case 'ClassDeclaration':
|
|
30
|
-
case 'ClassExpression':
|
|
31
|
-
case 'FunctionDeclaration':
|
|
32
|
-
case 'FunctionExpression':
|
|
33
|
-
case 'TSDeclareFunction':
|
|
34
|
-
case 'TSEnumDeclaration':
|
|
35
|
-
case 'TSEnumMember':
|
|
36
|
-
case 'TSInterfaceDeclaration':
|
|
37
|
-
case 'TSMethodSignature':
|
|
38
|
-
case 'TSModuleDeclaration':
|
|
39
|
-
case 'TSTypeAliasDeclaration':
|
|
40
|
-
return getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */
|
|
41
|
-
node.id);
|
|
42
|
-
case 'ExportDefaultDeclaration':
|
|
43
|
-
case 'ExportNamedDeclaration':
|
|
44
|
-
return getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.ExportNamedDeclaration} */
|
|
45
|
-
node.declaration);
|
|
46
|
-
case 'Identifier':
|
|
47
|
-
return [node.name];
|
|
48
|
-
case 'Property':
|
|
49
|
-
return getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.Node} */
|
|
50
|
-
node.key);
|
|
51
|
-
case 'VariableDeclaration':
|
|
52
|
-
return getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.Node} */
|
|
53
|
-
node.declarations[0]);
|
|
54
|
-
case 'VariableDeclarator':
|
|
55
|
-
return [...getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.Node} */
|
|
56
|
-
node.id), ...getNamesFromNode(/** @type {import('@typescript-eslint/types').TSESTree.Node} */
|
|
57
|
-
node.init)].filter(Boolean);
|
|
58
|
-
default:
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
63
|
-
context,
|
|
64
|
-
jsdoc,
|
|
65
|
-
node,
|
|
66
|
-
report,
|
|
67
|
-
utils
|
|
68
|
-
}) => {
|
|
69
|
-
const /** @type {{aliases: {[key: string]: string[]}, excludedTags: string[], uselessWords: string[]}} */{
|
|
70
|
-
aliases = defaultAliases,
|
|
71
|
-
excludedTags = [],
|
|
72
|
-
uselessWords = defaultUselessWords
|
|
73
|
-
} = context.options[0] || {};
|
|
74
|
-
const nodeNames = getNamesFromNode(node);
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @param {string} text
|
|
78
|
-
* @param {string} extraName
|
|
79
|
-
* @returns {boolean}
|
|
80
|
-
*/
|
|
81
|
-
const descriptionIsRedundant = (text, extraName = '') => {
|
|
82
|
-
const textTrimmed = text.trim();
|
|
83
|
-
return Boolean(textTrimmed) && !(0, _areDocsInformative.areDocsInformative)(textTrimmed, [extraName, nodeNames].filter(Boolean).join(' '), {
|
|
84
|
-
aliases,
|
|
85
|
-
uselessWords
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
const {
|
|
89
|
-
description,
|
|
90
|
-
lastDescriptionLine
|
|
91
|
-
} = utils.getDescription();
|
|
92
|
-
let descriptionReported = false;
|
|
93
|
-
for (const tag of jsdoc.tags) {
|
|
94
|
-
if (excludedTags.includes(tag.tag)) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (descriptionIsRedundant(tag.description, tag.name)) {
|
|
98
|
-
utils.reportJSDoc('This tag description only repeats the name it describes.', tag);
|
|
99
|
-
}
|
|
100
|
-
descriptionReported ||= tag.description === description && /** @type {import('comment-parser').Spec & {line: import('../iterateJsdoc.js').Integer}} */
|
|
101
|
-
tag.line === lastDescriptionLine;
|
|
102
|
-
}
|
|
103
|
-
if (!descriptionReported && descriptionIsRedundant(description)) {
|
|
104
|
-
report('This description only repeats the name it describes.');
|
|
105
|
-
}
|
|
106
|
-
}, {
|
|
107
|
-
iterateAllJsdocs: true,
|
|
108
|
-
meta: {
|
|
109
|
-
docs: {
|
|
110
|
-
description: 'This rule reports doc comments that only restate their attached name.',
|
|
111
|
-
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/informative-docs.md#repos-sticky-header'
|
|
112
|
-
},
|
|
113
|
-
schema: [{
|
|
114
|
-
additionalProperties: false,
|
|
115
|
-
properties: {
|
|
116
|
-
aliases: {
|
|
117
|
-
description: `The \`aliases\` option allows indicating words as synonyms (aliases) of each other.
|
|
118
|
-
|
|
119
|
-
For example, with \`{ aliases: { emoji: ["smiley", "winkey"] } }\`, the following comment would be considered uninformative:
|
|
120
|
-
|
|
121
|
-
\`\`\`js
|
|
122
|
-
/** A smiley/winkey. */
|
|
123
|
-
let emoji;
|
|
124
|
-
\`\`\`
|
|
125
|
-
|
|
126
|
-
The default \`aliases\` option is:
|
|
127
|
-
|
|
128
|
-
\`\`\`json
|
|
129
|
-
{
|
|
130
|
-
"a": ["an", "our"]
|
|
131
|
-
}
|
|
132
|
-
\`\`\``,
|
|
133
|
-
patternProperties: {
|
|
134
|
-
'.*': {
|
|
135
|
-
items: {
|
|
136
|
-
type: 'string'
|
|
137
|
-
},
|
|
138
|
-
type: 'array'
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
excludedTags: {
|
|
143
|
-
description: `Tags that should not be checked for valid contents.
|
|
144
|
-
|
|
145
|
-
For example, with \`{ excludedTags: ["category"] }\`, the following comment would not be considered uninformative:
|
|
146
|
-
|
|
147
|
-
\`\`\`js
|
|
148
|
-
/** @category Types */
|
|
149
|
-
function computeTypes(node) {
|
|
150
|
-
// ...
|
|
151
|
-
}
|
|
152
|
-
\`\`\`
|
|
153
|
-
|
|
154
|
-
No tags are excluded by default.`,
|
|
155
|
-
items: {
|
|
156
|
-
type: 'string'
|
|
157
|
-
},
|
|
158
|
-
type: 'array'
|
|
159
|
-
},
|
|
160
|
-
uselessWords: {
|
|
161
|
-
description: `Words that are ignored when searching for one that adds meaning.
|
|
162
|
-
|
|
163
|
-
For example, with \`{ uselessWords: ["our"] }\`, the following comment would be considered uninformative:
|
|
164
|
-
|
|
165
|
-
\`\`\`js
|
|
166
|
-
/** Our text. */
|
|
167
|
-
let text;
|
|
168
|
-
\`\`\`
|
|
169
|
-
|
|
170
|
-
The default \`uselessWords\` option is:
|
|
171
|
-
|
|
172
|
-
\`\`\`json
|
|
173
|
-
["a", "an", "i", "in", "of", "s", "the"]
|
|
174
|
-
\`\`\``,
|
|
175
|
-
items: {
|
|
176
|
-
type: 'string'
|
|
177
|
-
},
|
|
178
|
-
type: 'array'
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
type: 'object'
|
|
182
|
-
}],
|
|
183
|
-
type: 'suggestion'
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
module.exports = exports.default;
|
|
187
|
-
//# sourceMappingURL=informativeDocs.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"informativeDocs.cjs","names":["iterateJsdoc","areDocsInformative"],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n areDocsInformative,\n} from 'are-docs-informative';\n\nconst defaultAliases = {\n a: [\n 'an', 'our',\n ],\n};\n\nconst defaultUselessWords = [\n 'a', 'an', 'i', 'in', 'of', 's', 'the',\n];\n\n/**\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node\n * @returns {string[]}\n */\nconst getNamesFromNode = (node) => {\n switch (node?.type) {\n case 'AccessorProperty':\n case 'MethodDefinition':\n case 'PropertyDefinition':\n case 'TSAbstractAccessorProperty':\n case 'TSAbstractMethodDefinition':\n case 'TSAbstractPropertyDefinition':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node.parent\n ).parent,\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n ),\n ];\n\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSMethodSignature':\n case 'TSModuleDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */\n (node).id,\n );\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ExportNamedDeclaration} */\n (node).declaration,\n );\n case 'Identifier':\n return [\n node.name,\n ];\n case 'Property':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n );\n case 'VariableDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.declarations[0]),\n );\n case 'VariableDeclarator':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.id),\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.init),\n ),\n ].filter(Boolean);\n default:\n return [];\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const /** @type {{aliases: {[key: string]: string[]}, excludedTags: string[], uselessWords: string[]}} */ {\n aliases = defaultAliases,\n excludedTags = [],\n uselessWords = defaultUselessWords,\n } = context.options[0] || {};\n const nodeNames = getNamesFromNode(node);\n\n /**\n * @param {string} text\n * @param {string} extraName\n * @returns {boolean}\n */\n const descriptionIsRedundant = (text, extraName = '') => {\n const textTrimmed = text.trim();\n return Boolean(textTrimmed) && !areDocsInformative(textTrimmed, [\n extraName, nodeNames,\n ].filter(Boolean).join(' '), {\n aliases,\n uselessWords,\n });\n };\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n let descriptionReported = false;\n\n for (const tag of jsdoc.tags) {\n if (excludedTags.includes(tag.tag)) {\n continue;\n }\n\n if (descriptionIsRedundant(tag.description, tag.name)) {\n utils.reportJSDoc(\n 'This tag description only repeats the name it describes.',\n tag,\n );\n }\n\n descriptionReported ||= tag.description === description &&\n /** @type {import('comment-parser').Spec & {line: import('../iterateJsdoc.js').Integer}} */\n (tag).line === lastDescriptionLine;\n }\n\n if (!descriptionReported && descriptionIsRedundant(description)) {\n report('This description only repeats the name it describes.');\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'This rule reports doc comments that only restate their attached name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/informative-docs.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n description: `The \\`aliases\\` option allows indicating words as synonyms (aliases) of each other.\n\nFor example, with \\`{ aliases: { emoji: [\"smiley\", \"winkey\"] } }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** A smiley/winkey. */\nlet emoji;\n\\`\\`\\`\n\nThe default \\`aliases\\` option is:\n\n\\`\\`\\`json\n{\n \"a\": [\"an\", \"our\"]\n}\n\\`\\`\\``,\n patternProperties: {\n '.*': {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n },\n excludedTags: {\n description: `Tags that should not be checked for valid contents.\n\nFor example, with \\`{ excludedTags: [\"category\"] }\\`, the following comment would not be considered uninformative:\n\n\\`\\`\\`js\n/** @category Types */\nfunction computeTypes(node) {\n // ...\n}\n\\`\\`\\`\n\nNo tags are excluded by default.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n description: `Words that are ignored when searching for one that adds meaning.\n\nFor example, with \\`{ uselessWords: [\"our\"] }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** Our text. */\nlet text;\n\\`\\`\\`\n\nThe default \\`uselessWords\\` option is:\n\n\\`\\`\\`json\n[\"a\", \"an\", \"i\", \"in\", \"of\", \"s\", \"the\"]\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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uE;MACzE,GAAG,EAAE;IACP,CAAC;IACD,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,OAAO,EAAE;UACP,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,iBAAiB,EAAE;YACjB,IAAI,EAAE;cACJ,KAAK,EAAE;gBACL,IAAI,EAAE;cACR,CAAC;cACD,IAAI,EAAE;YACR;UACF;QACF,CAAC;QACD,YAAY,EAAE;UACZ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;UACrB,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,YAAY,EAAE;UACZ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
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 }; }
|
|
9
|
-
/**
|
|
10
|
-
* Punctuators that begin a logical group should not require a line before it skipped. Specifically
|
|
11
|
-
* `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a
|
|
12
|
-
* declaration (like a variable or a type alias).
|
|
13
|
-
*/
|
|
14
|
-
const startPunctuators = new Set(['(', '=', '[', '{']);
|
|
15
|
-
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
16
|
-
context,
|
|
17
|
-
jsdocNode,
|
|
18
|
-
report,
|
|
19
|
-
sourceCode,
|
|
20
|
-
utils
|
|
21
|
-
}) => {
|
|
22
|
-
const {
|
|
23
|
-
checkBlockStarts,
|
|
24
|
-
excludedTags = ['type'],
|
|
25
|
-
ignoreSameLine = true,
|
|
26
|
-
ignoreSingleLines = true,
|
|
27
|
-
lines = 1
|
|
28
|
-
} = context.options[0] || {};
|
|
29
|
-
if (utils.hasATag(excludedTags)) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
const tokensBefore = sourceCode.getTokensBefore(jsdocNode, {
|
|
33
|
-
includeComments: true
|
|
34
|
-
});
|
|
35
|
-
const tokenBefore = tokensBefore.at(-1);
|
|
36
|
-
if (!tokenBefore || tokenBefore.type === 'Punctuator' && !checkBlockStarts && startPunctuators.has(tokenBefore.value)) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (tokenBefore.loc?.end?.line + lines >= (/** @type {number} */
|
|
40
|
-
jsdocNode.loc?.start?.line)) {
|
|
41
|
-
const startLine = jsdocNode.loc?.start?.line;
|
|
42
|
-
const sameLine = tokenBefore.loc?.end?.line === startLine;
|
|
43
|
-
if (sameLine && ignoreSameLine) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** @type {import('eslint').Rule.ReportFixer} */
|
|
51
|
-
const fix = fixer => {
|
|
52
|
-
let indent = '';
|
|
53
|
-
if (sameLine) {
|
|
54
|
-
const spaceDiff = /** @type {number} */jsdocNode.loc?.start?.column - (/** @type {number} */tokenBefore.loc?.end?.column);
|
|
55
|
-
// @ts-expect-error Should be a comment
|
|
56
|
-
indent = /** @type {import('estree').Comment} */jsdocNode.value.match(/^\*\n([\t ]*) \*/v)?.[1]?.slice(spaceDiff);
|
|
57
|
-
if (!indent) {
|
|
58
|
-
/** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */
|
|
59
|
-
let tokenPrior = tokenBefore;
|
|
60
|
-
let startColumn;
|
|
61
|
-
while (tokenPrior && tokenPrior?.loc?.start?.line === startLine) {
|
|
62
|
-
startColumn = tokenPrior.loc?.start?.column;
|
|
63
|
-
tokenPrior = tokensBefore.pop();
|
|
64
|
-
}
|
|
65
|
-
indent = ' '.repeat(/* c8 ignore next */
|
|
66
|
-
/** @type {number} */startColumn ? startColumn - 1 : 0);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return fixer.insertTextAfter(/** @type {import('eslint').AST.Token} */
|
|
70
|
-
tokenBefore, '\n'.repeat(lines) + (sameLine ? '\n' + indent : ''));
|
|
71
|
-
};
|
|
72
|
-
report(`Required ${lines} line(s) before JSDoc block`, fix);
|
|
73
|
-
}
|
|
74
|
-
}, {
|
|
75
|
-
iterateAllJsdocs: true,
|
|
76
|
-
meta: {
|
|
77
|
-
docs: {
|
|
78
|
-
description: 'Enforces minimum number of newlines before JSDoc comment blocks',
|
|
79
|
-
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/lines-before-block.md#repos-sticky-header'
|
|
80
|
-
},
|
|
81
|
-
fixable: 'code',
|
|
82
|
-
schema: [{
|
|
83
|
-
additionalProperties: false,
|
|
84
|
-
properties: {
|
|
85
|
-
checkBlockStarts: {
|
|
86
|
-
description: `Whether to additionally check the start of blocks, such as classes or functions.
|
|
87
|
-
Defaults to \`false\`.`,
|
|
88
|
-
type: 'boolean'
|
|
89
|
-
},
|
|
90
|
-
excludedTags: {
|
|
91
|
-
description: `An array of tags whose presence in the JSDoc block will prevent the
|
|
92
|
-
application of the rule. Defaults to \`['type']\` (i.e., if \`@type\` is present,
|
|
93
|
-
lines before the block will not be added).`,
|
|
94
|
-
items: {
|
|
95
|
-
type: 'string'
|
|
96
|
-
},
|
|
97
|
-
type: 'array'
|
|
98
|
-
},
|
|
99
|
-
ignoreSameLine: {
|
|
100
|
-
description: `This option excludes cases where the JSDoc block occurs on the same line as a
|
|
101
|
-
preceding code or comment. Defaults to \`true\`.`,
|
|
102
|
-
type: 'boolean'
|
|
103
|
-
},
|
|
104
|
-
ignoreSingleLines: {
|
|
105
|
-
description: `This option excludes cases where the JSDoc block is only one line long.
|
|
106
|
-
Defaults to \`true\`.`,
|
|
107
|
-
type: 'boolean'
|
|
108
|
-
},
|
|
109
|
-
lines: {
|
|
110
|
-
description: 'The minimum number of lines to require. Defaults to 1.',
|
|
111
|
-
type: 'integer'
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
type: 'object'
|
|
115
|
-
}],
|
|
116
|
-
type: 'suggestion'
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
module.exports = exports.default;
|
|
120
|
-
//# sourceMappingURL=linesBeforeBlock.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"linesBeforeBlock.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/linesBeforeBlock.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * Punctuators that begin a logical group should not require a line before it skipped. Specifically\n * `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a\n * declaration (like a variable or a type alias).\n */\nconst startPunctuators = new Set([\n '(', '=', '[', '{',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const {\n checkBlockStarts,\n excludedTags = [\n 'type',\n ],\n ignoreSameLine = true,\n ignoreSingleLines = true,\n lines = 1,\n } = context.options[0] || {};\n\n if (utils.hasATag(excludedTags)) {\n return;\n }\n\n const tokensBefore = sourceCode.getTokensBefore(jsdocNode, {\n includeComments: true,\n });\n const tokenBefore = tokensBefore.at(-1);\n if (\n !tokenBefore || (\n tokenBefore.type === 'Punctuator' &&\n !checkBlockStarts &&\n startPunctuators.has(tokenBefore.value)\n )\n ) {\n return;\n }\n\n if (tokenBefore.loc?.end?.line + lines >=\n /** @type {number} */\n (jsdocNode.loc?.start?.line)\n ) {\n const startLine = jsdocNode.loc?.start?.line;\n const sameLine = tokenBefore.loc?.end?.line === startLine;\n\n if (sameLine && ignoreSameLine) {\n return;\n }\n\n if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) {\n return;\n }\n\n /** @type {import('eslint').Rule.ReportFixer} */\n const fix = (fixer) => {\n let indent = '';\n if (sameLine) {\n const spaceDiff = /** @type {number} */ (jsdocNode.loc?.start?.column) -\n /** @type {number} */ (tokenBefore.loc?.end?.column);\n // @ts-expect-error Should be a comment\n indent = /** @type {import('estree').Comment} */ (\n jsdocNode\n ).value.match(/^\\*\\n([\\t ]*) \\*/v)?.[1]?.slice(spaceDiff);\n if (!indent) {\n /** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */\n let tokenPrior = tokenBefore;\n let startColumn;\n while (tokenPrior && tokenPrior?.loc?.start?.line === startLine) {\n startColumn = tokenPrior.loc?.start?.column;\n tokenPrior = tokensBefore.pop();\n }\n\n indent = ' '.repeat(\n /* c8 ignore next */\n /** @type {number} */ (startColumn ? startColumn - 1 : 0),\n );\n }\n }\n\n return fixer.insertTextAfter(\n /** @type {import('eslint').AST.Token} */\n (tokenBefore),\n '\\n'.repeat(lines) +\n (sameLine ? '\\n' + indent : ''),\n );\n };\n\n report(`Required ${lines} line(s) before JSDoc block`, fix);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces minimum number of newlines before JSDoc comment blocks',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/lines-before-block.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkBlockStarts: {\n description: `Whether to additionally check the start of blocks, such as classes or functions.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n excludedTags: {\n description: `An array of tags whose presence in the JSDoc block will prevent the\napplication of the rule. Defaults to \\`['type']\\` (i.e., if \\`@type\\` is present,\nlines before the block will not be added).`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ignoreSameLine: {\n description: `This option excludes cases where the JSDoc block occurs on the same line as a\npreceding code or comment. Defaults to \\`true\\`.`,\n type: 'boolean',\n },\n ignoreSingleLines: {\n description: `This option excludes cases where the JSDoc block is only one line long.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n lines: {\n description: 'The minimum number of lines to require. Defaults to 1.',\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|