eslint-plugin-jsdoc 39.3.5 → 39.3.12
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 +273 -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 +44 -207
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +72 -221
- 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 +9 -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":";;;;;;AAAA;AAGA;AACA;AAA2C;AAE3C,MAAM;EACJA,IAAI,EAAEC;AACR,CAAC,GAAGC,yBAAU;AAEd,MAAMC,qBAAqB,GAAG,CAACC,KAAK,EAAEC,GAAG,EAAEC,cAAc,KAAK;EAC5D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIC,WAAW;EACf,IAAIC,YAAY;EAChB,MAAMC,iBAAiB,GAAGL,KAAK,CAACM,oBAAoB,CAACL,GAAG,CAACA,GAAG,CAAC;EAC7D,IAAII,iBAAiB,EAAE;IACrBF,WAAW,GAAG,CACZ,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CACnD;IACDC,YAAY,GAAG,CACb,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CACrC;EACH,CAAC,MAAM;IACLD,WAAW,GAAG,CACZ,eAAe,EAAE,SAAS,EAAE,UAAU,CACvC;IACDC,YAAY,GAAG,CACb,KAAK,EAAE,MAAM,EAAE,aAAa,CAC7B;EACH;EAEA,MAAM;IACJG;EACF,CAAC,GAAGN,GAAG,CAACO,MAAM,CAAC,CAAC,CAAC;EAEjB,MAAMC,eAAe,GAAG,CAACC,GAAG,EAAEC,OAAO,KAAK;IACxC,MAAMC,SAAS,GAAGF,GAAG,GAAG,CAAC;IAEzB,OAAOP,WAAW,CAACU,KAAK,CAACD,SAAS,CAAC,CAACE,IAAI,CAAC,CAACC,UAAU,EAAEC,QAAQ,KAAK;MACjE,MAAMC,WAAW,GAAGb,YAAY,CAACQ,SAAS,GAAGI,QAAQ,CAAC;MAEtD,MAAME,YAAY,GAAGX,MAAM,CAACQ,UAAU,CAAC;MAEvC,MAAMI,GAAG,GAAGD,YAAY;MAExB,IAAIP,OAAO,EAAE;QACXA,OAAO,CAAC,CAACQ,GAAG,EAAEF,WAAW,CAAC;MAC5B;MAEA,OAAOE,GAAG,KAAKR,OAAO,IAAI,CAACM,WAAW,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC;;EAED;EACA;EACA;EACA;EACA,MAAMG,EAAE,GAAG,CAACjB,WAAW,CAACW,IAAI,CAAC,CAACC,UAAU,EAAEL,GAAG,KAAK;IAChD,MAAMO,WAAW,GAAGb,YAAY,CAACM,GAAG,CAAC;IACrC,MAAMW,cAAc,GAAGd,MAAM,CAACU,WAAW,CAAC;IAC1C,MAAMK,aAAa,GAAGf,MAAM,CAACQ,UAAU,CAAC;IACxC,MAAMQ,OAAO,GAAG,CAAArB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGa,UAAU,CAAC,KAAI,CAAC;;IAEjD;;IAEA;IACA,OAAOO,aAAa,CAACE,MAAM,KAAKD,OAAO,IAAID,aAAa,CAACE,MAAM,KAAK,CAAC;IAEnE;IACA;IACAF,aAAa,IAAI,CAACD,cAAc,IAAIZ,eAAe,CAACC,GAAG,CAAC;EAC5D,CAAC,CAAC;EACF,IAAIU,EAAE,EAAE;IACN;EACF;EAEA,MAAMK,GAAG,GAAG,MAAM;IAChB,KAAK,MAAM,CACTf,GAAG,EACHK,UAAU,CACX,IAAIZ,WAAW,CAACuB,OAAO,EAAE,EAAE;MAC1B,MAAMT,WAAW,GAAGb,YAAY,CAACM,GAAG,CAAC;MACrC,MAAMW,cAAc,GAAGd,MAAM,CAACU,WAAW,CAAC;MAE1C,IAAII,cAAc,EAAE;QAClB,MAAME,OAAO,GAAG,CAAArB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGa,UAAU,CAAC,KAAI,CAAC;QACjDR,MAAM,CAACQ,UAAU,CAAC,GAAG,EAAE,CAACY,QAAQ,CAACJ,OAAO,EAAE,GAAG,CAAC;QAC9Cd,eAAe,CAACC,GAAG,EAAE,CAACkB,QAAQ,EAAEC,UAAU,KAAK;UAC7C,IAAID,QAAQ,EAAE;YACZrB,MAAM,CAACsB,UAAU,CAAC,GAAG,EAAE;UACzB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACLtB,MAAM,CAACQ,UAAU,CAAC,GAAG,EAAE;MACzB;IACF;IAEAf,KAAK,CAAC8B,MAAM,CAAC7B,GAAG,EAAEM,MAAM,CAAC;EAC3B,CAAC;EAEDP,KAAK,CAAC+B,WAAW,CAAC,+CAA+C,EAAE9B,GAAG,EAAEwB,GAAG,EAAE,IAAI,CAAC;AACpF,CAAC;AAED,MAAMO,cAAc,GAAG,CAAC;EACtB9B,cAAc;EACd+B,MAAM;EACNC,KAAK;EACLC,SAAS;EACTC,oCAAoC;EACpCC,MAAM;EACNC,IAAI;EACJtC;AACF,CAAC,KAAK;EACJ,MAAMuC,SAAS,GAAG1C,WAAW,CAC3B,IAAA2C,uBAAc,EAAC;IACbtC,cAAc;IACd+B,MAAM;IACNG,oCAAoC;IACpCE;EACF,CAAC,CAAC,CACH;EACD,MAAMG,gBAAgB,GAAGF,SAAS,CAACL,KAAK,CAAC;EAEzC,MAAMQ,OAAO,GAAG,IAAI,GAAGP,SAAS,CAACQ,KAAK,GAAG,IAAI;EAC7C,MAAMC,SAAS,GAAG5C,KAAK,CAAC6C,SAAS,CAACJ,gBAAgB,CAAC,CAChDK,SAAS,EAAE;EAEd,IAAIJ,OAAO,KAAKE,SAAS,EAAE;IACzBP,MAAM,CACJ,2CAA2C,EAC1CU,KAAK,IAAK;MACT,OAAOA,KAAK,CAACC,WAAW,CAACb,SAAS,EAAES,SAAS,CAAC;IAChD,CAAC,CACF;EACH;AACF,CAAC;AAAC,eAEa,IAAAK,qBAAY,EAAC,CAAC;EAC3BhB,MAAM;EACNC,KAAK;EACLC,SAAS;EACTE,MAAM;EACNa,OAAO;EACPlD;AACF,CAAC,KAAK;EACJ,MAAM;IACJsC,IAAI,EAAEa,cAAc,GAAG,CACrB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CACpE;IACDf,oCAAoC;IACpClC;EACF,CAAC,GAAGgD,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,IAAIF,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;IACnC;IACA,IAAI,CAACjB,SAAS,CAACQ,KAAK,CAACU,QAAQ,CAAC,IAAI,CAAC,EAAE;MACnC;IACF;IAEArB,cAAc,CAAC;MACb9B,cAAc;MACd+B,MAAM;MACNC,KAAK;MACLC,SAAS;MACTC,oCAAoC;MACpCC,MAAM;MACNC,IAAI,EAAEa,cAAc;MACpBnD;IACF,CAAC,CAAC;IAEF;EACF;EAEA,MAAMsD,SAAS,GAAGtD,KAAK,CAACuD,cAAc,CAACJ,cAAc,CAAC;EACtD,KAAK,MAAMlD,GAAG,IAAIqD,SAAS,EAAE;IAC3BvD,qBAAqB,CAACC,KAAK,EAAEC,GAAG,EAAEC,cAAc,CAAC;EACnD;AACF,CAAC,EAAE;EACDsD,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,iDAAiD;MAC9DC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,YAAY;IACrBC,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,CACJ,QAAQ,EAAE,OAAO,CAClB;MACDC,IAAI,EAAE;IACR,CAAC,EACD;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVhE,cAAc,EAAE;UACd+D,oBAAoB,EAAE,KAAK;UAC3BC,UAAU,EAAE;YACVC,aAAa,EAAE;cACbH,IAAI,EAAE;YACR,CAAC;YACDI,QAAQ,EAAE;cACRJ,IAAI,EAAE;YACR,CAAC;YACDK,OAAO,EAAE;cACPL,IAAI,EAAE;YACR,CAAC;YACDM,QAAQ,EAAE;cACRN,IAAI,EAAE;YACR;UACF;QACF,CAAC;QACD5B,oCAAoC,EAAE;UACpCmC,OAAO,EAAE,KAAK;UACdP,IAAI,EAAE;QACR,CAAC;QACD1B,IAAI,EAAE;UACJkC,KAAK,EAAE;YACLR,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
|
|
@@ -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,55 @@ 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;
|
|
34
31
|
|
|
32
|
+
// eslint-disable-next-line complexity
|
|
35
33
|
return paramTags.some(([, tag], index) => {
|
|
36
34
|
let tagsIndex;
|
|
37
35
|
const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {
|
|
38
36
|
tagsIndex = tgsIndex;
|
|
39
37
|
return tg.name === tag.name && idx !== index;
|
|
40
38
|
});
|
|
41
|
-
|
|
42
39
|
if (dupeTagInfo) {
|
|
43
40
|
utils.reportJSDoc(`Duplicate @${targetTagName} "${tag.name}"`, dupeTagInfo[1], enableFixer ? () => {
|
|
44
41
|
utils.removeTag(tagsIndex);
|
|
45
42
|
} : null);
|
|
46
43
|
return true;
|
|
47
44
|
}
|
|
48
|
-
|
|
49
45
|
if (tag.name.includes('.')) {
|
|
50
46
|
dotted++;
|
|
51
47
|
return false;
|
|
52
48
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
let functionParameterName = functionParameterNames[index - dotted];
|
|
50
|
+
if (functionParameterName === 'this') {
|
|
51
|
+
functionParameterName = functionParameterNames[index - dotted + 1];
|
|
52
|
+
}
|
|
56
53
|
if (!functionParameterName) {
|
|
57
54
|
if (allowExtraTrailingParamDocs) {
|
|
58
55
|
return false;
|
|
59
56
|
}
|
|
60
|
-
|
|
61
57
|
report(`@${targetTagName} "${tag.name}" does not match an existing function parameter.`, null, tag);
|
|
62
58
|
return true;
|
|
63
59
|
}
|
|
64
|
-
|
|
65
60
|
if (Array.isArray(functionParameterName)) {
|
|
66
61
|
if (!checkDestructured) {
|
|
67
62
|
return false;
|
|
68
63
|
}
|
|
69
|
-
|
|
70
64
|
if (tag.type && tag.type.search(checkTypesRegex) === -1) {
|
|
71
65
|
return false;
|
|
72
66
|
}
|
|
73
|
-
|
|
74
67
|
const [parameterName, {
|
|
75
68
|
names: properties,
|
|
76
69
|
hasPropertyRest,
|
|
77
70
|
rests,
|
|
78
71
|
annotationParamName
|
|
79
72
|
}] = functionParameterName;
|
|
80
|
-
|
|
81
73
|
if (annotationParamName !== undefined) {
|
|
82
74
|
const name = tag.name.trim();
|
|
83
|
-
|
|
84
75
|
if (name !== annotationParamName) {
|
|
85
76
|
report(`@${targetTagName} "${name}" does not match parameter name "${annotationParamName}"`, null, tag);
|
|
86
77
|
}
|
|
87
78
|
}
|
|
88
|
-
|
|
89
79
|
const tagName = parameterName === undefined ? tag.name.trim() : parameterName;
|
|
90
80
|
const expectedNames = properties.map(name => {
|
|
91
81
|
return `${tagName}.${name}`;
|
|
@@ -98,23 +88,19 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
98
88
|
});
|
|
99
89
|
const missingProperties = [];
|
|
100
90
|
const notCheckingNames = [];
|
|
101
|
-
|
|
102
91
|
for (const [idx, name] of expectedNames.entries()) {
|
|
103
92
|
if (notCheckingNames.some(notCheckingName => {
|
|
104
93
|
return name.startsWith(notCheckingName);
|
|
105
94
|
})) {
|
|
106
95
|
continue;
|
|
107
96
|
}
|
|
108
|
-
|
|
109
97
|
const actualNameIdx = actualNames.findIndex(actualName => {
|
|
110
98
|
return utils.comparePaths(name)(actualName);
|
|
111
99
|
});
|
|
112
|
-
|
|
113
100
|
if (actualNameIdx === -1) {
|
|
114
101
|
if (!checkRestProperty && rests[idx]) {
|
|
115
102
|
continue;
|
|
116
103
|
}
|
|
117
|
-
|
|
118
104
|
const missingIndex = actualNames.findIndex(actualName => {
|
|
119
105
|
return utils.pathDoesNotBeginWith(name, actualName);
|
|
120
106
|
});
|
|
@@ -129,9 +115,7 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
129
115
|
notCheckingNames.push(name);
|
|
130
116
|
}
|
|
131
117
|
}
|
|
132
|
-
|
|
133
118
|
const hasMissing = missingProperties.length;
|
|
134
|
-
|
|
135
119
|
if (hasMissing) {
|
|
136
120
|
for (const {
|
|
137
121
|
tagPlacement,
|
|
@@ -140,34 +124,26 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
140
124
|
report(`Missing @${targetTagName} "${missingProperty}"`, null, tagPlacement);
|
|
141
125
|
}
|
|
142
126
|
}
|
|
143
|
-
|
|
144
127
|
if (!hasPropertyRest || checkRestProperty) {
|
|
145
128
|
const extraProperties = [];
|
|
146
|
-
|
|
147
129
|
for (const [idx, name] of actualNames.entries()) {
|
|
148
130
|
const match = name.startsWith(tag.name.trim() + '.');
|
|
149
|
-
|
|
150
131
|
if (match && !expectedNames.some(utils.comparePaths(name)) && !utils.comparePaths(name)(tag.name) && (!disableExtraPropertyReporting || properties.some(prop => {
|
|
151
132
|
return prop.split('.').length >= name.split('.').length - 1;
|
|
152
133
|
}))) {
|
|
153
134
|
extraProperties.push([name, paramTags[idx][1]]);
|
|
154
135
|
}
|
|
155
136
|
}
|
|
156
|
-
|
|
157
137
|
if (extraProperties.length) {
|
|
158
138
|
for (const [extraProperty, tg] of extraProperties) {
|
|
159
139
|
report(`@${targetTagName} "${extraProperty}" does not exist on ${tag.name}`, null, tg);
|
|
160
140
|
}
|
|
161
|
-
|
|
162
141
|
return true;
|
|
163
142
|
}
|
|
164
143
|
}
|
|
165
|
-
|
|
166
144
|
return hasMissing;
|
|
167
145
|
}
|
|
168
|
-
|
|
169
146
|
let funcParamName;
|
|
170
|
-
|
|
171
147
|
if (typeof functionParameterName === 'object') {
|
|
172
148
|
const {
|
|
173
149
|
name
|
|
@@ -176,7 +152,6 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
176
152
|
} else {
|
|
177
153
|
funcParamName = functionParameterName;
|
|
178
154
|
}
|
|
179
|
-
|
|
180
155
|
if (funcParamName !== tag.name.trim()) {
|
|
181
156
|
// Todo: Improve for array or object child items
|
|
182
157
|
const actualNames = paramTagsNonNested.map(([, {
|
|
@@ -186,20 +161,20 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
186
161
|
});
|
|
187
162
|
const expectedNames = functionParameterNames.map((item, idx) => {
|
|
188
163
|
var _item$;
|
|
189
|
-
|
|
190
164
|
if (item !== null && item !== void 0 && (_item$ = item[1]) !== null && _item$ !== void 0 && _item$.names) {
|
|
191
165
|
return actualNames[idx];
|
|
192
166
|
}
|
|
193
|
-
|
|
194
167
|
return item;
|
|
168
|
+
}).filter(item => {
|
|
169
|
+
return item !== 'this';
|
|
195
170
|
}).join(', ');
|
|
196
171
|
report(`Expected @${targetTagName} names to be "${expectedNames}". Got "${actualNames.join(', ')}".`, null, tag);
|
|
197
172
|
return true;
|
|
198
173
|
}
|
|
199
|
-
|
|
200
174
|
return false;
|
|
201
175
|
});
|
|
202
176
|
};
|
|
177
|
+
|
|
203
178
|
/**
|
|
204
179
|
* @param {string} targetTagName
|
|
205
180
|
* @param {boolean} _allowExtraTrailingParamDocs
|
|
@@ -208,8 +183,6 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
208
183
|
* @param {Function} report
|
|
209
184
|
* @returns {boolean}
|
|
210
185
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
186
|
const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs, jsdocParameterNames, jsdoc, report) => {
|
|
214
187
|
let lastRealParameter;
|
|
215
188
|
return jsdocParameterNames.some(({
|
|
@@ -217,19 +190,15 @@ const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs,
|
|
|
217
190
|
idx
|
|
218
191
|
}) => {
|
|
219
192
|
const isPropertyPath = jsdocParameterName.includes('.');
|
|
220
|
-
|
|
221
193
|
if (isPropertyPath) {
|
|
222
194
|
if (!lastRealParameter) {
|
|
223
195
|
report(`@${targetTagName} path declaration ("${jsdocParameterName}") appears before any real parameter.`, null, jsdoc.tags[idx]);
|
|
224
196
|
return true;
|
|
225
197
|
}
|
|
226
|
-
|
|
227
198
|
let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));
|
|
228
|
-
|
|
229
199
|
if (pathRootNodeName.endsWith('[]')) {
|
|
230
200
|
pathRootNodeName = pathRootNodeName.slice(0, -2);
|
|
231
201
|
}
|
|
232
|
-
|
|
233
202
|
if (pathRootNodeName !== lastRealParameter) {
|
|
234
203
|
report(`@${targetTagName} path declaration ("${jsdocParameterName}") root node name ("${pathRootNodeName}") ` + `does not match previous real parameter name ("${lastRealParameter}").`, null, jsdoc.tags[idx]);
|
|
235
204
|
return true;
|
|
@@ -237,11 +206,9 @@ const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs,
|
|
|
237
206
|
} else {
|
|
238
207
|
lastRealParameter = jsdocParameterName;
|
|
239
208
|
}
|
|
240
|
-
|
|
241
209
|
return false;
|
|
242
210
|
});
|
|
243
211
|
};
|
|
244
|
-
|
|
245
212
|
var _default = (0, _iterateJsdoc.default)(({
|
|
246
213
|
context,
|
|
247
214
|
jsdoc,
|
|
@@ -259,21 +226,17 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
259
226
|
} = context.options[0] || {};
|
|
260
227
|
const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);
|
|
261
228
|
const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');
|
|
262
|
-
|
|
263
229
|
if (!jsdocParameterNamesDeep.length) {
|
|
264
230
|
return;
|
|
265
231
|
}
|
|
266
|
-
|
|
267
232
|
const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);
|
|
268
233
|
const targetTagName = utils.getPreferredTagName({
|
|
269
234
|
tagName: 'param'
|
|
270
235
|
});
|
|
271
236
|
const isError = validateParameterNames(targetTagName, allowExtraTrailingParamDocs, checkDestructured, checkRestProperty, checkTypesRegex, disableExtraPropertyReporting, enableFixer, functionParameterNames, jsdoc, utils, report);
|
|
272
|
-
|
|
273
237
|
if (isError || !checkDestructured) {
|
|
274
238
|
return;
|
|
275
239
|
}
|
|
276
|
-
|
|
277
240
|
validateParameterNamesDeep(targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report);
|
|
278
241
|
}, {
|
|
279
242
|
meta: {
|
|
@@ -312,7 +275,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
312
275
|
type: 'suggestion'
|
|
313
276
|
}
|
|
314
277
|
});
|
|
315
|
-
|
|
316
278
|
exports.default = _default;
|
|
317
279
|
module.exports = exports.default;
|
|
318
280
|
//# 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","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 let functionParameterName = functionParameterNames[index - dotted];\n if (functionParameterName === 'this') {\n functionParameterName = functionParameterNames[index - dotted + 1];\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
|