eslint-plugin-jsdoc 39.3.6 → 39.3.13
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/README.md +281 -52
- package/dist/WarnSettings.js +0 -5
- package/dist/WarnSettings.js.map +1 -1
- package/dist/alignTransform.js +69 -61
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js +7 -26
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/defaultTagOrder.js +30 -14
- package/dist/defaultTagOrder.js.map +1 -1
- package/dist/exportParser.js +34 -143
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js +7 -26
- package/dist/generateRule.js.map +1 -1
- package/dist/getDefaultTagStructureForMode.js +189 -93
- package/dist/getDefaultTagStructureForMode.js.map +1 -1
- package/dist/index.js +0 -51
- package/dist/index.js.map +1 -1
- package/dist/iterateJsdoc.js +43 -206
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +71 -220
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js +0 -8
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkAlignment.js +0 -8
- package/dist/rules/checkAlignment.js.map +1 -1
- package/dist/rules/checkExamples.js +25 -63
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +0 -7
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +9 -30
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js +11 -47
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js +1 -18
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkSyntax.js +2 -5
- package/dist/rules/checkSyntax.js.map +1 -1
- package/dist/rules/checkTagNames.js +0 -18
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +17 -46
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/checkValues.js +0 -18
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/emptyTags.js +6 -11
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/implementsOnClasses.js +0 -6
- package/dist/rules/implementsOnClasses.js.map +1 -1
- package/dist/rules/matchDescription.js +0 -20
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js +2 -17
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +10 -34
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js +0 -8
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js +2 -16
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js +0 -7
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js +2 -16
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +2 -16
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js +3 -9
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js +0 -7
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +13 -34
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js +2 -26
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js +0 -17
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +0 -9
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js +0 -16
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js +13 -58
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +6 -53
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireParamDescription.js +0 -4
- package/dist/rules/requireParamDescription.js.map +1 -1
- package/dist/rules/requireParamName.js +0 -4
- package/dist/rules/requireParamName.js.map +1 -1
- package/dist/rules/requireParamType.js +0 -4
- package/dist/rules/requireParamType.js.map +1 -1
- package/dist/rules/requireProperty.js +0 -9
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requirePropertyDescription.js +0 -4
- package/dist/rules/requirePropertyDescription.js.map +1 -1
- package/dist/rules/requirePropertyName.js +0 -4
- package/dist/rules/requirePropertyName.js.map +1 -1
- package/dist/rules/requirePropertyType.js +0 -4
- package/dist/rules/requirePropertyType.js.map +1 -1
- package/dist/rules/requireReturns.js +13 -23
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +12 -20
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireReturnsDescription.js +0 -6
- package/dist/rules/requireReturnsDescription.js.map +1 -1
- package/dist/rules/requireReturnsType.js +0 -4
- package/dist/rules/requireReturnsType.js.map +1 -1
- package/dist/rules/requireThrows.js +6 -15
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js +13 -29
- package/dist/rules/requireYields.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js +8 -29
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/dist/rules/sortTags.js +17 -30
- package/dist/rules/sortTags.js.map +1 -1
- package/dist/rules/tagLines.js +0 -26
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js +22 -53
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js +7 -4
- package/dist/tagNames.js.map +1 -1
- package/dist/utils/hasReturnValue.js +22 -66
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/package.json +16 -16
|
@@ -4,19 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _commentParser = require("comment-parser");
|
|
9
|
-
|
|
10
8
|
var _alignTransform = _interopRequireDefault(require("../alignTransform"));
|
|
11
|
-
|
|
12
9
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
13
|
-
|
|
14
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
11
|
const {
|
|
17
12
|
flow: commentFlow
|
|
18
13
|
} = _commentParser.transforms;
|
|
19
|
-
|
|
20
14
|
const checkNotAlignedPerTag = (utils, tag, customSpacings) => {
|
|
21
15
|
/*
|
|
22
16
|
start +
|
|
@@ -35,7 +29,6 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => {
|
|
|
35
29
|
let spacerProps;
|
|
36
30
|
let contentProps;
|
|
37
31
|
const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);
|
|
38
|
-
|
|
39
32
|
if (mightHaveNamepath) {
|
|
40
33
|
spacerProps = ['postDelimiter', 'postTag', 'postType', 'postName'];
|
|
41
34
|
contentProps = ['tag', 'type', 'name', 'description'];
|
|
@@ -43,51 +36,47 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => {
|
|
|
43
36
|
spacerProps = ['postDelimiter', 'postTag', 'postType'];
|
|
44
37
|
contentProps = ['tag', 'type', 'description'];
|
|
45
38
|
}
|
|
46
|
-
|
|
47
39
|
const {
|
|
48
40
|
tokens
|
|
49
41
|
} = tag.source[0];
|
|
50
|
-
|
|
51
42
|
const followedBySpace = (idx, callbck) => {
|
|
52
43
|
const nextIndex = idx + 1;
|
|
53
44
|
return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {
|
|
54
45
|
const contentProp = contentProps[nextIndex + innerIdx];
|
|
55
46
|
const spacePropVal = tokens[spacerProp];
|
|
56
47
|
const ret = spacePropVal;
|
|
57
|
-
|
|
58
48
|
if (callbck) {
|
|
59
49
|
callbck(!ret, contentProp);
|
|
60
50
|
}
|
|
61
|
-
|
|
62
51
|
return ret && (callbck || !contentProp);
|
|
63
52
|
});
|
|
64
|
-
};
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// If checking alignment on multiple lines, need to check other `source`
|
|
65
56
|
// items
|
|
66
57
|
// Go through `post*` spacing properties and exit to indicate problem if
|
|
67
58
|
// extra spacing detected
|
|
68
|
-
|
|
69
|
-
|
|
70
59
|
const ok = !spacerProps.some((spacerProp, idx) => {
|
|
71
60
|
const contentProp = contentProps[idx];
|
|
72
61
|
const contentPropVal = tokens[contentProp];
|
|
73
62
|
const spacerPropVal = tokens[spacerProp];
|
|
74
|
-
const spacing = (customSpacings === null || customSpacings === void 0 ? void 0 : customSpacings[spacerProp]) || 1;
|
|
75
|
-
// 1. The spaces don't match the space it should have (1 or custom spacing) OR
|
|
63
|
+
const spacing = (customSpacings === null || customSpacings === void 0 ? void 0 : customSpacings[spacerProp]) || 1;
|
|
76
64
|
|
|
77
|
-
|
|
65
|
+
// There will be extra alignment if...
|
|
66
|
+
|
|
67
|
+
// 1. The spaces don't match the space it should have (1 or custom spacing) OR
|
|
68
|
+
return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||
|
|
69
|
+
// 2. There is a (single) space, no immediate content, and yet another
|
|
78
70
|
// space is found subsequently (not separated by intervening content)
|
|
79
71
|
spacerPropVal && !contentPropVal && followedBySpace(idx);
|
|
80
72
|
});
|
|
81
|
-
|
|
82
73
|
if (ok) {
|
|
83
74
|
return;
|
|
84
75
|
}
|
|
85
|
-
|
|
86
76
|
const fix = () => {
|
|
87
77
|
for (const [idx, spacerProp] of spacerProps.entries()) {
|
|
88
78
|
const contentProp = contentProps[idx];
|
|
89
79
|
const contentPropVal = tokens[contentProp];
|
|
90
|
-
|
|
91
80
|
if (contentPropVal) {
|
|
92
81
|
const spacing = (customSpacings === null || customSpacings === void 0 ? void 0 : customSpacings[spacerProp]) || 1;
|
|
93
82
|
tokens[spacerProp] = ''.padStart(spacing, ' ');
|
|
@@ -100,13 +89,10 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => {
|
|
|
100
89
|
tokens[spacerProp] = '';
|
|
101
90
|
}
|
|
102
91
|
}
|
|
103
|
-
|
|
104
92
|
utils.setTag(tag, tokens);
|
|
105
93
|
};
|
|
106
|
-
|
|
107
94
|
utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);
|
|
108
95
|
};
|
|
109
|
-
|
|
110
96
|
const checkAlignment = ({
|
|
111
97
|
customSpacings,
|
|
112
98
|
indent,
|
|
@@ -126,14 +112,12 @@ const checkAlignment = ({
|
|
|
126
112
|
const transformedJsdoc = transform(jsdoc);
|
|
127
113
|
const comment = '/*' + jsdocNode.value + '*/';
|
|
128
114
|
const formatted = utils.stringify(transformedJsdoc).trimStart();
|
|
129
|
-
|
|
130
115
|
if (comment !== formatted) {
|
|
131
116
|
report('Expected JSDoc block lines to be aligned.', fixer => {
|
|
132
117
|
return fixer.replaceText(jsdocNode, formatted);
|
|
133
118
|
});
|
|
134
119
|
}
|
|
135
120
|
};
|
|
136
|
-
|
|
137
121
|
var _default = (0, _iterateJsdoc.default)(({
|
|
138
122
|
indent,
|
|
139
123
|
jsdoc,
|
|
@@ -147,13 +131,11 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
147
131
|
preserveMainDescriptionPostDelimiter,
|
|
148
132
|
customSpacings
|
|
149
133
|
} = context.options[1] || {};
|
|
150
|
-
|
|
151
134
|
if (context.options[0] === 'always') {
|
|
152
135
|
// Skip if it contains only a single line.
|
|
153
136
|
if (!jsdocNode.value.includes('\n')) {
|
|
154
137
|
return;
|
|
155
138
|
}
|
|
156
|
-
|
|
157
139
|
checkAlignment({
|
|
158
140
|
customSpacings,
|
|
159
141
|
indent,
|
|
@@ -166,9 +148,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
166
148
|
});
|
|
167
149
|
return;
|
|
168
150
|
}
|
|
169
|
-
|
|
170
151
|
const foundTags = utils.getPresentTags(applicableTags);
|
|
171
|
-
|
|
172
152
|
for (const tag of foundTags) {
|
|
173
153
|
checkNotAlignedPerTag(utils, tag, customSpacings);
|
|
174
154
|
}
|
|
@@ -219,7 +199,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
219
199
|
type: 'layout'
|
|
220
200
|
}
|
|
221
201
|
});
|
|
222
|
-
|
|
223
202
|
exports.default = _default;
|
|
224
203
|
module.exports = exports.default;
|
|
225
204
|
//# sourceMappingURL=checkLineAlignment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkLineAlignment.js","names":["flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","setTag","reportJSDoc","checkAlignment","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","transform","alignTransform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","iterateJsdoc","context","applicableTags","options","includes","foundTags","getPresentTags","iterateAllJsdocs","meta","docs","description","url","fixable","schema","enum","type","additionalProperties","properties","postDelimiter","postName","postTag","postType","default","items"],"sources":["../../src/rules/checkLineAlignment.js"],"sourcesContent":["import {\n transforms,\n} from 'comment-parser';\nimport alignTransform from '../alignTransform';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n let spacerProps;\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n });\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\nconst checkAlignment = ({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' + jsdocNode.value + '*/';\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n indent,\n jsdoc,\n jsdocNode,\n report,\n context,\n utils,\n}) => {\n const {\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return',\n ],\n preserveMainDescriptionPostDelimiter,\n customSpacings,\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!jsdocNode.value.includes('\\n')) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n for (const tag of foundTags) {\n checkNotAlignedPerTag(utils, tag, customSpacings);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-line-alignment',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n properties: {\n postDelimiter: {\n type: 'integer',\n },\n postName: {\n type: 'integer',\n },\n postTag: {\n type: 'integer',\n },\n postType: {\n type: 'integer',\n },\n },\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkLineAlignment.js","names":["flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","setTag","reportJSDoc","checkAlignment","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","transform","alignTransform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","iterateJsdoc","context","applicableTags","options","includes","foundTags","getPresentTags","iterateAllJsdocs","meta","docs","description","url","fixable","schema","enum","type","additionalProperties","properties","postDelimiter","postName","postTag","postType","default","items"],"sources":["../../src/rules/checkLineAlignment.js"],"sourcesContent":["import {\n transforms,\n} from 'comment-parser';\nimport alignTransform from '../alignTransform';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n let spacerProps;\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n });\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\nconst checkAlignment = ({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' + jsdocNode.value + '*/';\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n indent,\n jsdoc,\n jsdocNode,\n report,\n context,\n utils,\n}) => {\n const {\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return',\n ],\n preserveMainDescriptionPostDelimiter,\n customSpacings,\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!jsdocNode.value.includes('\\n')) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n for (const tag of foundTags) {\n checkNotAlignedPerTag(utils, tag, customSpacings);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-line-alignment',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n properties: {\n postDelimiter: {\n type: 'integer',\n },\n postName: {\n type: 'integer',\n },\n postTag: {\n type: 'integer',\n },\n postType: {\n type: 'integer',\n },\n },\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* @param {string} targetTagName
|
|
14
11
|
* @param {boolean} allowExtraTrailingParamDocs
|
|
@@ -30,62 +27,57 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
30
27
|
const paramTagsNonNested = paramTags.filter(([, tag]) => {
|
|
31
28
|
return !tag.name.includes('.');
|
|
32
29
|
});
|
|
33
|
-
let dotted = 0;
|
|
30
|
+
let dotted = 0;
|
|
31
|
+
let thisOffset = 0;
|
|
34
32
|
|
|
33
|
+
// eslint-disable-next-line complexity
|
|
35
34
|
return paramTags.some(([, tag], index) => {
|
|
36
35
|
let tagsIndex;
|
|
37
36
|
const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {
|
|
38
37
|
tagsIndex = tgsIndex;
|
|
39
38
|
return tg.name === tag.name && idx !== index;
|
|
40
39
|
});
|
|
41
|
-
|
|
42
40
|
if (dupeTagInfo) {
|
|
43
41
|
utils.reportJSDoc(`Duplicate @${targetTagName} "${tag.name}"`, dupeTagInfo[1], enableFixer ? () => {
|
|
44
42
|
utils.removeTag(tagsIndex);
|
|
45
43
|
} : null);
|
|
46
44
|
return true;
|
|
47
45
|
}
|
|
48
|
-
|
|
49
46
|
if (tag.name.includes('.')) {
|
|
50
47
|
dotted++;
|
|
51
48
|
return false;
|
|
52
49
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
let functionParameterName = functionParameterNames[index - dotted + thisOffset];
|
|
51
|
+
if (functionParameterName === 'this') {
|
|
52
|
+
++thisOffset;
|
|
53
|
+
functionParameterName = functionParameterNames[index - dotted + thisOffset];
|
|
54
|
+
}
|
|
56
55
|
if (!functionParameterName) {
|
|
57
56
|
if (allowExtraTrailingParamDocs) {
|
|
58
57
|
return false;
|
|
59
58
|
}
|
|
60
|
-
|
|
61
59
|
report(`@${targetTagName} "${tag.name}" does not match an existing function parameter.`, null, tag);
|
|
62
60
|
return true;
|
|
63
61
|
}
|
|
64
|
-
|
|
65
62
|
if (Array.isArray(functionParameterName)) {
|
|
66
63
|
if (!checkDestructured) {
|
|
67
64
|
return false;
|
|
68
65
|
}
|
|
69
|
-
|
|
70
66
|
if (tag.type && tag.type.search(checkTypesRegex) === -1) {
|
|
71
67
|
return false;
|
|
72
68
|
}
|
|
73
|
-
|
|
74
69
|
const [parameterName, {
|
|
75
70
|
names: properties,
|
|
76
71
|
hasPropertyRest,
|
|
77
72
|
rests,
|
|
78
73
|
annotationParamName
|
|
79
74
|
}] = functionParameterName;
|
|
80
|
-
|
|
81
75
|
if (annotationParamName !== undefined) {
|
|
82
76
|
const name = tag.name.trim();
|
|
83
|
-
|
|
84
77
|
if (name !== annotationParamName) {
|
|
85
78
|
report(`@${targetTagName} "${name}" does not match parameter name "${annotationParamName}"`, null, tag);
|
|
86
79
|
}
|
|
87
80
|
}
|
|
88
|
-
|
|
89
81
|
const tagName = parameterName === undefined ? tag.name.trim() : parameterName;
|
|
90
82
|
const expectedNames = properties.map(name => {
|
|
91
83
|
return `${tagName}.${name}`;
|
|
@@ -98,23 +90,19 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
98
90
|
});
|
|
99
91
|
const missingProperties = [];
|
|
100
92
|
const notCheckingNames = [];
|
|
101
|
-
|
|
102
93
|
for (const [idx, name] of expectedNames.entries()) {
|
|
103
94
|
if (notCheckingNames.some(notCheckingName => {
|
|
104
95
|
return name.startsWith(notCheckingName);
|
|
105
96
|
})) {
|
|
106
97
|
continue;
|
|
107
98
|
}
|
|
108
|
-
|
|
109
99
|
const actualNameIdx = actualNames.findIndex(actualName => {
|
|
110
100
|
return utils.comparePaths(name)(actualName);
|
|
111
101
|
});
|
|
112
|
-
|
|
113
102
|
if (actualNameIdx === -1) {
|
|
114
103
|
if (!checkRestProperty && rests[idx]) {
|
|
115
104
|
continue;
|
|
116
105
|
}
|
|
117
|
-
|
|
118
106
|
const missingIndex = actualNames.findIndex(actualName => {
|
|
119
107
|
return utils.pathDoesNotBeginWith(name, actualName);
|
|
120
108
|
});
|
|
@@ -129,9 +117,7 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
129
117
|
notCheckingNames.push(name);
|
|
130
118
|
}
|
|
131
119
|
}
|
|
132
|
-
|
|
133
120
|
const hasMissing = missingProperties.length;
|
|
134
|
-
|
|
135
121
|
if (hasMissing) {
|
|
136
122
|
for (const {
|
|
137
123
|
tagPlacement,
|
|
@@ -140,34 +126,26 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
140
126
|
report(`Missing @${targetTagName} "${missingProperty}"`, null, tagPlacement);
|
|
141
127
|
}
|
|
142
128
|
}
|
|
143
|
-
|
|
144
129
|
if (!hasPropertyRest || checkRestProperty) {
|
|
145
130
|
const extraProperties = [];
|
|
146
|
-
|
|
147
131
|
for (const [idx, name] of actualNames.entries()) {
|
|
148
132
|
const match = name.startsWith(tag.name.trim() + '.');
|
|
149
|
-
|
|
150
133
|
if (match && !expectedNames.some(utils.comparePaths(name)) && !utils.comparePaths(name)(tag.name) && (!disableExtraPropertyReporting || properties.some(prop => {
|
|
151
134
|
return prop.split('.').length >= name.split('.').length - 1;
|
|
152
135
|
}))) {
|
|
153
136
|
extraProperties.push([name, paramTags[idx][1]]);
|
|
154
137
|
}
|
|
155
138
|
}
|
|
156
|
-
|
|
157
139
|
if (extraProperties.length) {
|
|
158
140
|
for (const [extraProperty, tg] of extraProperties) {
|
|
159
141
|
report(`@${targetTagName} "${extraProperty}" does not exist on ${tag.name}`, null, tg);
|
|
160
142
|
}
|
|
161
|
-
|
|
162
143
|
return true;
|
|
163
144
|
}
|
|
164
145
|
}
|
|
165
|
-
|
|
166
146
|
return hasMissing;
|
|
167
147
|
}
|
|
168
|
-
|
|
169
148
|
let funcParamName;
|
|
170
|
-
|
|
171
149
|
if (typeof functionParameterName === 'object') {
|
|
172
150
|
const {
|
|
173
151
|
name
|
|
@@ -176,7 +154,6 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
176
154
|
} else {
|
|
177
155
|
funcParamName = functionParameterName;
|
|
178
156
|
}
|
|
179
|
-
|
|
180
157
|
if (funcParamName !== tag.name.trim()) {
|
|
181
158
|
// Todo: Improve for array or object child items
|
|
182
159
|
const actualNames = paramTagsNonNested.map(([, {
|
|
@@ -186,20 +163,20 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
186
163
|
});
|
|
187
164
|
const expectedNames = functionParameterNames.map((item, idx) => {
|
|
188
165
|
var _item$;
|
|
189
|
-
|
|
190
166
|
if (item !== null && item !== void 0 && (_item$ = item[1]) !== null && _item$ !== void 0 && _item$.names) {
|
|
191
167
|
return actualNames[idx];
|
|
192
168
|
}
|
|
193
|
-
|
|
194
169
|
return item;
|
|
170
|
+
}).filter(item => {
|
|
171
|
+
return item !== 'this';
|
|
195
172
|
}).join(', ');
|
|
196
173
|
report(`Expected @${targetTagName} names to be "${expectedNames}". Got "${actualNames.join(', ')}".`, null, tag);
|
|
197
174
|
return true;
|
|
198
175
|
}
|
|
199
|
-
|
|
200
176
|
return false;
|
|
201
177
|
});
|
|
202
178
|
};
|
|
179
|
+
|
|
203
180
|
/**
|
|
204
181
|
* @param {string} targetTagName
|
|
205
182
|
* @param {boolean} _allowExtraTrailingParamDocs
|
|
@@ -208,8 +185,6 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
208
185
|
* @param {Function} report
|
|
209
186
|
* @returns {boolean}
|
|
210
187
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
188
|
const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs, jsdocParameterNames, jsdoc, report) => {
|
|
214
189
|
let lastRealParameter;
|
|
215
190
|
return jsdocParameterNames.some(({
|
|
@@ -217,19 +192,15 @@ const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs,
|
|
|
217
192
|
idx
|
|
218
193
|
}) => {
|
|
219
194
|
const isPropertyPath = jsdocParameterName.includes('.');
|
|
220
|
-
|
|
221
195
|
if (isPropertyPath) {
|
|
222
196
|
if (!lastRealParameter) {
|
|
223
197
|
report(`@${targetTagName} path declaration ("${jsdocParameterName}") appears before any real parameter.`, null, jsdoc.tags[idx]);
|
|
224
198
|
return true;
|
|
225
199
|
}
|
|
226
|
-
|
|
227
200
|
let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));
|
|
228
|
-
|
|
229
201
|
if (pathRootNodeName.endsWith('[]')) {
|
|
230
202
|
pathRootNodeName = pathRootNodeName.slice(0, -2);
|
|
231
203
|
}
|
|
232
|
-
|
|
233
204
|
if (pathRootNodeName !== lastRealParameter) {
|
|
234
205
|
report(`@${targetTagName} path declaration ("${jsdocParameterName}") root node name ("${pathRootNodeName}") ` + `does not match previous real parameter name ("${lastRealParameter}").`, null, jsdoc.tags[idx]);
|
|
235
206
|
return true;
|
|
@@ -237,11 +208,9 @@ const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs,
|
|
|
237
208
|
} else {
|
|
238
209
|
lastRealParameter = jsdocParameterName;
|
|
239
210
|
}
|
|
240
|
-
|
|
241
211
|
return false;
|
|
242
212
|
});
|
|
243
213
|
};
|
|
244
|
-
|
|
245
214
|
var _default = (0, _iterateJsdoc.default)(({
|
|
246
215
|
context,
|
|
247
216
|
jsdoc,
|
|
@@ -259,21 +228,17 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
259
228
|
} = context.options[0] || {};
|
|
260
229
|
const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);
|
|
261
230
|
const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');
|
|
262
|
-
|
|
263
231
|
if (!jsdocParameterNamesDeep.length) {
|
|
264
232
|
return;
|
|
265
233
|
}
|
|
266
|
-
|
|
267
234
|
const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);
|
|
268
235
|
const targetTagName = utils.getPreferredTagName({
|
|
269
236
|
tagName: 'param'
|
|
270
237
|
});
|
|
271
238
|
const isError = validateParameterNames(targetTagName, allowExtraTrailingParamDocs, checkDestructured, checkRestProperty, checkTypesRegex, disableExtraPropertyReporting, enableFixer, functionParameterNames, jsdoc, utils, report);
|
|
272
|
-
|
|
273
239
|
if (isError || !checkDestructured) {
|
|
274
240
|
return;
|
|
275
241
|
}
|
|
276
|
-
|
|
277
242
|
validateParameterNamesDeep(targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report);
|
|
278
243
|
}, {
|
|
279
244
|
meta: {
|
|
@@ -312,7 +277,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
312
277
|
type: 'suggestion'
|
|
313
278
|
}
|
|
314
279
|
});
|
|
315
|
-
|
|
316
280
|
exports.default = _default;
|
|
317
281
|
module.exports = exports.default;
|
|
318
282
|
//# sourceMappingURL=checkParamNames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkParamNames.js","names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","removeTag","functionParameterName","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","trim","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} enableFixer\n * @param {Array<string>} functionParameterNames\n * @param jsdoc\n * @param utils\n * @param report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n const functionParameterName = functionParameterNames[index - dotted];\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {Array<string>} jsdocParameterNames\n * @param jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkParamNames.js","names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","removeTag","functionParameterName","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","trim","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} enableFixer\n * @param {Array<string>} functionParameterNames\n * @param jsdoc\n * @param utils\n * @param report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {Array<string>} jsdocParameterNames\n * @param jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* @param {string} targetTagName
|
|
14
11
|
* @param {boolean} enableFixer
|
|
@@ -26,25 +23,22 @@ const validatePropertyNames = (targetTagName, enableFixer, jsdoc, utils) => {
|
|
|
26
23
|
tagsIndex = tgsIndex;
|
|
27
24
|
return tg.name === tag.name && idx !== index;
|
|
28
25
|
});
|
|
29
|
-
|
|
30
26
|
if (dupeTagInfo) {
|
|
31
27
|
utils.reportJSDoc(`Duplicate @${targetTagName} "${tag.name}"`, dupeTagInfo[1], enableFixer ? () => {
|
|
32
28
|
utils.removeTag(tagsIndex);
|
|
33
29
|
} : null);
|
|
34
30
|
return true;
|
|
35
31
|
}
|
|
36
|
-
|
|
37
32
|
return false;
|
|
38
33
|
});
|
|
39
34
|
};
|
|
35
|
+
|
|
40
36
|
/**
|
|
41
37
|
* @param {string} targetTagName
|
|
42
38
|
* @param {string[]} jsdocPropertyNames
|
|
43
39
|
* @param jsdoc
|
|
44
40
|
* @param {Function} report
|
|
45
41
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
42
|
const validatePropertyNamesDeep = (targetTagName, jsdocPropertyNames, jsdoc, report) => {
|
|
49
43
|
let lastRealProperty;
|
|
50
44
|
return jsdocPropertyNames.some(({
|
|
@@ -52,19 +46,15 @@ const validatePropertyNamesDeep = (targetTagName, jsdocPropertyNames, jsdoc, rep
|
|
|
52
46
|
idx
|
|
53
47
|
}) => {
|
|
54
48
|
const isPropertyPath = jsdocPropertyName.includes('.');
|
|
55
|
-
|
|
56
49
|
if (isPropertyPath) {
|
|
57
50
|
if (!lastRealProperty) {
|
|
58
51
|
report(`@${targetTagName} path declaration ("${jsdocPropertyName}") appears before any real property.`, null, jsdoc.tags[idx]);
|
|
59
52
|
return true;
|
|
60
53
|
}
|
|
61
|
-
|
|
62
54
|
let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));
|
|
63
|
-
|
|
64
55
|
if (pathRootNodeName.endsWith('[]')) {
|
|
65
56
|
pathRootNodeName = pathRootNodeName.slice(0, -2);
|
|
66
57
|
}
|
|
67
|
-
|
|
68
58
|
if (pathRootNodeName !== lastRealProperty) {
|
|
69
59
|
report(`@${targetTagName} path declaration ("${jsdocPropertyName}") root node name ("${pathRootNodeName}") ` + `does not match previous real property name ("${lastRealProperty}").`, null, jsdoc.tags[idx]);
|
|
70
60
|
return true;
|
|
@@ -72,11 +62,9 @@ const validatePropertyNamesDeep = (targetTagName, jsdocPropertyNames, jsdoc, rep
|
|
|
72
62
|
} else {
|
|
73
63
|
lastRealProperty = jsdocPropertyName;
|
|
74
64
|
}
|
|
75
|
-
|
|
76
65
|
return false;
|
|
77
66
|
});
|
|
78
67
|
};
|
|
79
|
-
|
|
80
68
|
var _default = (0, _iterateJsdoc.default)(({
|
|
81
69
|
context,
|
|
82
70
|
jsdoc,
|
|
@@ -87,20 +75,16 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
87
75
|
enableFixer = false
|
|
88
76
|
} = context.options[0] || {};
|
|
89
77
|
const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');
|
|
90
|
-
|
|
91
78
|
if (!jsdocPropertyNamesDeep.length) {
|
|
92
79
|
return;
|
|
93
80
|
}
|
|
94
|
-
|
|
95
81
|
const targetTagName = utils.getPreferredTagName({
|
|
96
82
|
tagName: 'property'
|
|
97
83
|
});
|
|
98
84
|
const isError = validatePropertyNames(targetTagName, enableFixer, jsdoc, utils);
|
|
99
|
-
|
|
100
85
|
if (isError) {
|
|
101
86
|
return;
|
|
102
87
|
}
|
|
103
|
-
|
|
104
88
|
validatePropertyNamesDeep(targetTagName, jsdocPropertyNamesDeep, jsdoc, report);
|
|
105
89
|
}, {
|
|
106
90
|
iterateAllJsdocs: true,
|
|
@@ -122,7 +106,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
122
106
|
type: 'suggestion'
|
|
123
107
|
}
|
|
124
108
|
});
|
|
125
|
-
|
|
126
109
|
exports.default = _default;
|
|
127
110
|
module.exports = exports.default;
|
|
128
111
|
//# sourceMappingURL=checkPropertyNames.js.map
|