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.
Files changed (124) hide show
  1. package/README.md +281 -52
  2. package/dist/WarnSettings.js +0 -5
  3. package/dist/WarnSettings.js.map +1 -1
  4. package/dist/alignTransform.js +69 -61
  5. package/dist/alignTransform.js.map +1 -1
  6. package/dist/bin/generateRule.js +7 -26
  7. package/dist/bin/generateRule.js.map +1 -1
  8. package/dist/defaultTagOrder.js +30 -14
  9. package/dist/defaultTagOrder.js.map +1 -1
  10. package/dist/exportParser.js +34 -143
  11. package/dist/exportParser.js.map +1 -1
  12. package/dist/generateRule.js +7 -26
  13. package/dist/generateRule.js.map +1 -1
  14. package/dist/getDefaultTagStructureForMode.js +189 -93
  15. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  16. package/dist/index.js +0 -51
  17. package/dist/index.js.map +1 -1
  18. package/dist/iterateJsdoc.js +43 -206
  19. package/dist/iterateJsdoc.js.map +1 -1
  20. package/dist/jsdocUtils.js +71 -220
  21. package/dist/jsdocUtils.js.map +1 -1
  22. package/dist/rules/checkAccess.js +0 -8
  23. package/dist/rules/checkAccess.js.map +1 -1
  24. package/dist/rules/checkAlignment.js +0 -8
  25. package/dist/rules/checkAlignment.js.map +1 -1
  26. package/dist/rules/checkExamples.js +25 -63
  27. package/dist/rules/checkExamples.js.map +1 -1
  28. package/dist/rules/checkIndentation.js +0 -7
  29. package/dist/rules/checkIndentation.js.map +1 -1
  30. package/dist/rules/checkLineAlignment.js +9 -30
  31. package/dist/rules/checkLineAlignment.js.map +1 -1
  32. package/dist/rules/checkParamNames.js +11 -47
  33. package/dist/rules/checkParamNames.js.map +1 -1
  34. package/dist/rules/checkPropertyNames.js +1 -18
  35. package/dist/rules/checkPropertyNames.js.map +1 -1
  36. package/dist/rules/checkSyntax.js +2 -5
  37. package/dist/rules/checkSyntax.js.map +1 -1
  38. package/dist/rules/checkTagNames.js +0 -18
  39. package/dist/rules/checkTagNames.js.map +1 -1
  40. package/dist/rules/checkTypes.js +17 -46
  41. package/dist/rules/checkTypes.js.map +1 -1
  42. package/dist/rules/checkValues.js +0 -18
  43. package/dist/rules/checkValues.js.map +1 -1
  44. package/dist/rules/emptyTags.js +6 -11
  45. package/dist/rules/emptyTags.js.map +1 -1
  46. package/dist/rules/implementsOnClasses.js +0 -6
  47. package/dist/rules/implementsOnClasses.js.map +1 -1
  48. package/dist/rules/matchDescription.js +0 -20
  49. package/dist/rules/matchDescription.js.map +1 -1
  50. package/dist/rules/matchName.js +2 -17
  51. package/dist/rules/matchName.js.map +1 -1
  52. package/dist/rules/multilineBlocks.js +10 -34
  53. package/dist/rules/multilineBlocks.js.map +1 -1
  54. package/dist/rules/newlineAfterDescription.js +0 -8
  55. package/dist/rules/newlineAfterDescription.js.map +1 -1
  56. package/dist/rules/noBadBlocks.js +2 -16
  57. package/dist/rules/noBadBlocks.js.map +1 -1
  58. package/dist/rules/noDefaults.js +0 -7
  59. package/dist/rules/noDefaults.js.map +1 -1
  60. package/dist/rules/noMissingSyntax.js +2 -16
  61. package/dist/rules/noMissingSyntax.js.map +1 -1
  62. package/dist/rules/noMultiAsterisks.js +2 -16
  63. package/dist/rules/noMultiAsterisks.js.map +1 -1
  64. package/dist/rules/noRestrictedSyntax.js +3 -9
  65. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  66. package/dist/rules/noTypes.js +0 -7
  67. package/dist/rules/noTypes.js.map +1 -1
  68. package/dist/rules/noUndefinedTypes.js +13 -34
  69. package/dist/rules/noUndefinedTypes.js.map +1 -1
  70. package/dist/rules/requireAsteriskPrefix.js +2 -26
  71. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  72. package/dist/rules/requireDescription.js +0 -17
  73. package/dist/rules/requireDescription.js.map +1 -1
  74. package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
  75. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  76. package/dist/rules/requireExample.js +0 -9
  77. package/dist/rules/requireExample.js.map +1 -1
  78. package/dist/rules/requireFileOverview.js +0 -16
  79. package/dist/rules/requireFileOverview.js.map +1 -1
  80. package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
  81. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  82. package/dist/rules/requireJsdoc.js +13 -58
  83. package/dist/rules/requireJsdoc.js.map +1 -1
  84. package/dist/rules/requireParam.js +6 -53
  85. package/dist/rules/requireParam.js.map +1 -1
  86. package/dist/rules/requireParamDescription.js +0 -4
  87. package/dist/rules/requireParamDescription.js.map +1 -1
  88. package/dist/rules/requireParamName.js +0 -4
  89. package/dist/rules/requireParamName.js.map +1 -1
  90. package/dist/rules/requireParamType.js +0 -4
  91. package/dist/rules/requireParamType.js.map +1 -1
  92. package/dist/rules/requireProperty.js +0 -9
  93. package/dist/rules/requireProperty.js.map +1 -1
  94. package/dist/rules/requirePropertyDescription.js +0 -4
  95. package/dist/rules/requirePropertyDescription.js.map +1 -1
  96. package/dist/rules/requirePropertyName.js +0 -4
  97. package/dist/rules/requirePropertyName.js.map +1 -1
  98. package/dist/rules/requirePropertyType.js +0 -4
  99. package/dist/rules/requirePropertyType.js.map +1 -1
  100. package/dist/rules/requireReturns.js +13 -23
  101. package/dist/rules/requireReturns.js.map +1 -1
  102. package/dist/rules/requireReturnsCheck.js +12 -20
  103. package/dist/rules/requireReturnsCheck.js.map +1 -1
  104. package/dist/rules/requireReturnsDescription.js +0 -6
  105. package/dist/rules/requireReturnsDescription.js.map +1 -1
  106. package/dist/rules/requireReturnsType.js +0 -4
  107. package/dist/rules/requireReturnsType.js.map +1 -1
  108. package/dist/rules/requireThrows.js +6 -15
  109. package/dist/rules/requireThrows.js.map +1 -1
  110. package/dist/rules/requireYields.js +13 -29
  111. package/dist/rules/requireYields.js.map +1 -1
  112. package/dist/rules/requireYieldsCheck.js +8 -29
  113. package/dist/rules/requireYieldsCheck.js.map +1 -1
  114. package/dist/rules/sortTags.js +17 -30
  115. package/dist/rules/sortTags.js.map +1 -1
  116. package/dist/rules/tagLines.js +0 -26
  117. package/dist/rules/tagLines.js.map +1 -1
  118. package/dist/rules/validTypes.js +22 -53
  119. package/dist/rules/validTypes.js.map +1 -1
  120. package/dist/tagNames.js +7 -4
  121. package/dist/tagNames.js.map +1 -1
  122. package/dist/utils/hasReturnValue.js +22 -66
  123. package/dist/utils/hasReturnValue.js.map +1 -1
  124. 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
- }; // If checking alignment on multiple lines, need to check other `source`
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; // There will be extra alignment if...
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
- return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 || // 2. There is a (single) space, no immediate content, and yet another
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; // eslint-disable-next-line complexity
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
- const functionParameterName = functionParameterNames[index - dotted];
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":";;;;;;AAAA;AAA2C;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,sBAAsB,GAAG,CAC7BC,aAAa,EACbC,2BAA2B,EAC3BC,iBAAiB,EACjBC,iBAAiB,EACjBC,eAAe,EACfC,6BAA6B,EAC7BC,WAAW,EACXC,sBAAsB,EAAEC,KAAK,EAAEC,KAAK,EAAEC,MAAM,KACzC;EACH,MAAMC,SAAS,GAAGC,MAAM,CAACC,OAAO,CAACL,KAAK,CAACM,IAAI,CAAC,CAACC,MAAM,CAAC,CAAC,GACjDC,GAAG,CACN,KAAK;IACJ,OAAOA,GAAG,CAACA,GAAG,KAAKhB,aAAa;EAClC,CAAC,CAAC;EACF,MAAMiB,kBAAkB,GAAGN,SAAS,CAACI,MAAM,CAAC,CAAC,GACzCC,GAAG,CACN,KAAK;IACJ,OAAO,CAACA,GAAG,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC;EAChC,CAAC,CAAC;EAEF,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,UAAU,GAAG,CAAC;;EAElB;EACA,OAAOV,SAAS,CAACW,IAAI,CAAC,CAAC,GACnBN,GAAG,CACN,EAAEO,KAAK,KAAK;IACX,IAAIC,SAAS;IACb,MAAMC,WAAW,GAAGd,SAAS,CAACe,IAAI,CAAC,CAAC,CAClCC,QAAQ,EACRC,EAAE,CACH,EAAEC,GAAG,KAAK;MACTL,SAAS,GAAGG,QAAQ;MAEpB,OAAOC,EAAE,CAACV,IAAI,KAAKF,GAAG,CAACE,IAAI,IAAIW,GAAG,KAAKN,KAAK;IAC9C,CAAC,CAAC;IACF,IAAIE,WAAW,EAAE;MACfhB,KAAK,CAACqB,WAAW,CAAE,cAAa9B,aAAc,KAAIgB,GAAG,CAACE,IAAK,GAAE,EAAEO,WAAW,CAAC,CAAC,CAAC,EAAEnB,WAAW,GAAG,MAAM;QACjGG,KAAK,CAACsB,SAAS,CAACP,SAAS,CAAC;MAC5B,CAAC,GAAG,IAAI,CAAC;MAET,OAAO,IAAI;IACb;IAEA,IAAIR,GAAG,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAC1BC,MAAM,EAAE;MAER,OAAO,KAAK;IACd;IAEA,IAAIY,qBAAqB,GAAGzB,sBAAsB,CAACgB,KAAK,GAAGH,MAAM,GAAGC,UAAU,CAAC;IAC/E,IAAIW,qBAAqB,KAAK,MAAM,EAAE;MACpC,EAAEX,UAAU;MACZW,qBAAqB,GAAGzB,sBAAsB,CAACgB,KAAK,GAAGH,MAAM,GAAGC,UAAU,CAAC;IAC7E;IAEA,IAAI,CAACW,qBAAqB,EAAE;MAC1B,IAAI/B,2BAA2B,EAAE;QAC/B,OAAO,KAAK;MACd;MAEAS,MAAM,CACH,IAAGV,aAAc,KAAIgB,GAAG,CAACE,IAAK,kDAAiD,EAChF,IAAI,EACJF,GAAG,CACJ;MAED,OAAO,IAAI;IACb;IAEA,IAAIiB,KAAK,CAACC,OAAO,CAACF,qBAAqB,CAAC,EAAE;MACxC,IAAI,CAAC9B,iBAAiB,EAAE;QACtB,OAAO,KAAK;MACd;MAEA,IAAIc,GAAG,CAACmB,IAAI,IAAInB,GAAG,CAACmB,IAAI,CAACC,MAAM,CAAChC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;QACvD,OAAO,KAAK;MACd;MAEA,MAAM,CACJiC,aAAa,EACb;QACEC,KAAK,EAAEC,UAAU;QACjBC,eAAe;QACfC,KAAK;QACLC;MACF,CAAC,CACF,GAAGV,qBAAqB;MACzB,IAAIU,mBAAmB,KAAKC,SAAS,EAAE;QACrC,MAAMzB,IAAI,GAAGF,GAAG,CAACE,IAAI,CAAC0B,IAAI,EAAE;QAC5B,IAAI1B,IAAI,KAAKwB,mBAAmB,EAAE;UAChChC,MAAM,CAAE,IAAGV,aAAc,KAAIkB,IAAK,oCAAmCwB,mBAAoB,GAAE,EAAE,IAAI,EAAE1B,GAAG,CAAC;QACzG;MACF;MAEA,MAAM6B,OAAO,GAAGR,aAAa,KAAKM,SAAS,GAAG3B,GAAG,CAACE,IAAI,CAAC0B,IAAI,EAAE,GAAGP,aAAa;MAC7E,MAAMS,aAAa,GAAGP,UAAU,CAACQ,GAAG,CAAE7B,IAAI,IAAK;QAC7C,OAAQ,GAAE2B,OAAQ,IAAG3B,IAAK,EAAC;MAC7B,CAAC,CAAC;MACF,MAAM8B,WAAW,GAAGrC,SAAS,CAACoC,GAAG,CAAC,CAAC,GAC/BE,QAAQ,CACX,KAAK;QACJ,OAAOA,QAAQ,CAAC/B,IAAI,CAAC0B,IAAI,EAAE;MAC7B,CAAC,CAAC;MACF,MAAMM,WAAW,GAAGvC,SAAS,CAACoC,GAAG,CAAC,CAAC,GAC/BE,QAAQ,CACX,KAAK;QACJ,OAAOA,QAAQ,CAACd,IAAI;MACtB,CAAC,CAAC;MAEF,MAAMgB,iBAAiB,GAAG,EAAE;MAC5B,MAAMC,gBAAgB,GAAG,EAAE;MAE3B,KAAK,MAAM,CACTvB,GAAG,EACHX,IAAI,CACL,IAAI4B,aAAa,CAACjC,OAAO,EAAE,EAAE;QAC5B,IAAIuC,gBAAgB,CAAC9B,IAAI,CAAE+B,eAAe,IAAK;UAC7C,OAAOnC,IAAI,CAACoC,UAAU,CAACD,eAAe,CAAC;QACzC,CAAC,CAAC,EAAE;UACF;QACF;QAEA,MAAME,aAAa,GAAGP,WAAW,CAACQ,SAAS,CAAEC,UAAU,IAAK;UAC1D,OAAOhD,KAAK,CAACiD,YAAY,CAACxC,IAAI,CAAC,CAACuC,UAAU,CAAC;QAC7C,CAAC,CAAC;QACF,IAAIF,aAAa,KAAK,CAAC,CAAC,EAAE;UACxB,IAAI,CAACpD,iBAAiB,IAAIsC,KAAK,CAACZ,GAAG,CAAC,EAAE;YACpC;UACF;UAEA,MAAM8B,YAAY,GAAGX,WAAW,CAACQ,SAAS,CAAEC,UAAU,IAAK;YACzD,OAAOhD,KAAK,CAACmD,oBAAoB,CAAC1C,IAAI,EAAEuC,UAAU,CAAC;UACrD,CAAC,CAAC;UACF,MAAMI,IAAI,GAAG7C,GAAG,CAAC8C,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,IAAIJ,YAAY,GAAG,CAAC,CAAC,GAAGA,YAAY,GAAGX,WAAW,CAACgB,MAAM,CAAC;UAC/Fb,iBAAiB,CAACc,IAAI,CAAC;YACrB/C,IAAI;YACJgD,YAAY,EAAE;cACZL,IAAI,EAAEA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAGA;YACzB;UACF,CAAC,CAAC;QACJ,CAAC,MAAM,IAAIX,WAAW,CAACK,aAAa,CAAC,CAACnB,MAAM,CAAChC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI8C,WAAW,CAACK,aAAa,CAAC,KAAK,EAAE,EAAE;UACzGH,gBAAgB,CAACa,IAAI,CAAC/C,IAAI,CAAC;QAC7B;MACF;MAEA,MAAMiD,UAAU,GAAGhB,iBAAiB,CAACa,MAAM;MAC3C,IAAIG,UAAU,EAAE;QACd,KAAK,MAAM;UACTD,YAAY;UACZhD,IAAI,EAAEkD;QACR,CAAC,IAAIjB,iBAAiB,EAAE;UACtBzC,MAAM,CAAE,YAAWV,aAAc,KAAIoE,eAAgB,GAAE,EAAE,IAAI,EAAEF,YAAY,CAAC;QAC9E;MACF;MAEA,IAAI,CAAC1B,eAAe,IAAIrC,iBAAiB,EAAE;QACzC,MAAMkE,eAAe,GAAG,EAAE;QAC1B,KAAK,MAAM,CACTxC,GAAG,EACHX,IAAI,CACL,IAAI8B,WAAW,CAACnC,OAAO,EAAE,EAAE;UAC1B,MAAMyD,KAAK,GAAGpD,IAAI,CAACoC,UAAU,CAACtC,GAAG,CAACE,IAAI,CAAC0B,IAAI,EAAE,GAAG,GAAG,CAAC;UACpD,IACE0B,KAAK,IAAI,CAACxB,aAAa,CAACxB,IAAI,CAC1Bb,KAAK,CAACiD,YAAY,CAACxC,IAAI,CAAC,CACzB,IAAI,CAACT,KAAK,CAACiD,YAAY,CAACxC,IAAI,CAAC,CAACF,GAAG,CAACE,IAAI,CAAC,KACvC,CAACb,6BAA6B,IAAIkC,UAAU,CAACjB,IAAI,CAAEiD,IAAI,IAAK;YAC3D,OAAOA,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAACR,MAAM,IAAI9C,IAAI,CAACsD,KAAK,CAAC,GAAG,CAAC,CAACR,MAAM,GAAG,CAAC;UAC7D,CAAC,CAAC,CAAC,EACH;YACAK,eAAe,CAACJ,IAAI,CAAC,CACnB/C,IAAI,EAAEP,SAAS,CAACkB,GAAG,CAAC,CAAC,CAAC,CAAC,CACxB,CAAC;UACJ;QACF;QAEA,IAAIwC,eAAe,CAACL,MAAM,EAAE;UAC1B,KAAK,MAAM,CACTS,aAAa,EACb7C,EAAE,CACH,IAAIyC,eAAe,EAAE;YACpB3D,MAAM,CAAE,IAAGV,aAAc,KAAIyE,aAAc,uBAAsBzD,GAAG,CAACE,IAAK,EAAC,EAAE,IAAI,EAAEU,EAAE,CAAC;UACxF;UAEA,OAAO,IAAI;QACb;MACF;MAEA,OAAOuC,UAAU;IACnB;IAEA,IAAIO,aAAa;IACjB,IAAI,OAAO1C,qBAAqB,KAAK,QAAQ,EAAE;MAC7C,MAAM;QACJd;MACF,CAAC,GAAGc,qBAAqB;MACzB0C,aAAa,GAAGxD,IAAI;IACtB,CAAC,MAAM;MACLwD,aAAa,GAAG1C,qBAAqB;IACvC;IAEA,IAAI0C,aAAa,KAAK1D,GAAG,CAACE,IAAI,CAAC0B,IAAI,EAAE,EAAE;MACrC;MACA,MAAMI,WAAW,GAAG/B,kBAAkB,CAAC8B,GAAG,CAAC,CAAC,GACxC;QACA7B;MACF,CAAC,CACF,KAAK;QACJ,OAAOA,IAAI,CAAC0B,IAAI,EAAE;MACpB,CAAC,CAAC;MACF,MAAME,aAAa,GAAGvC,sBAAsB,CAACwC,GAAG,CAAC,CAAC4B,IAAI,EAAE9C,GAAG,KAAK;QAAA;QAC9D,IAAI8C,IAAI,aAAJA,IAAI,yBAAJA,IAAI,CAAG,CAAC,CAAC,mCAAT,OAAWrC,KAAK,EAAE;UACpB,OAAOU,WAAW,CAACnB,GAAG,CAAC;QACzB;QAEA,OAAO8C,IAAI;MACb,CAAC,CAAC,CAAC5D,MAAM,CAAE4D,IAAI,IAAK;QAClB,OAAOA,IAAI,KAAK,MAAM;MACxB,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;MAEblE,MAAM,CACH,aAAYV,aAAc,iBAAgB8C,aAAc,WAAUE,WAAW,CAAC4B,IAAI,CAAC,IAAI,CAAE,IAAG,EAC7F,IAAI,EACJ5D,GAAG,CACJ;MAED,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM6D,0BAA0B,GAAG,CACjC7E,aAAa,EAAE8E,4BAA4B,EAC3CC,mBAAmB,EAAEvE,KAAK,EAAEE,MAAM,KAC/B;EACH,IAAIsE,iBAAiB;EAErB,OAAOD,mBAAmB,CAACzD,IAAI,CAAC,CAAC;IAC/BJ,IAAI,EAAE+D,kBAAkB;IACxBpD;EACF,CAAC,KAAK;IACJ,MAAMqD,cAAc,GAAGD,kBAAkB,CAAC9D,QAAQ,CAAC,GAAG,CAAC;IAEvD,IAAI+D,cAAc,EAAE;MAClB,IAAI,CAACF,iBAAiB,EAAE;QACtBtE,MAAM,CAAE,IAAGV,aAAc,uBAAsBiF,kBAAmB,uCAAsC,EAAE,IAAI,EAAEzE,KAAK,CAACM,IAAI,CAACe,GAAG,CAAC,CAAC;QAEhI,OAAO,IAAI;MACb;MAEA,IAAIsD,gBAAgB,GAAGF,kBAAkB,CAACG,KAAK,CAAC,CAAC,EAAEH,kBAAkB,CAACI,OAAO,CAAC,GAAG,CAAC,CAAC;MAEnF,IAAIF,gBAAgB,CAACG,QAAQ,CAAC,IAAI,CAAC,EAAE;QACnCH,gBAAgB,GAAGA,gBAAgB,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAClD;MAEA,IAAID,gBAAgB,KAAKH,iBAAiB,EAAE;QAC1CtE,MAAM,CACH,IAAGV,aAAc,uBAAsBiF,kBAAmB,uBAAsBE,gBAAiB,KAAI,GACrG,iDAAgDH,iBAAkB,KAAI,EACvE,IAAI,EACJxE,KAAK,CAACM,IAAI,CAACe,GAAG,CAAC,CAChB;QAED,OAAO,IAAI;MACb;IACF,CAAC,MAAM;MACLmD,iBAAiB,GAAGC,kBAAkB;IACxC;IAEA,OAAO,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;AAAC,eAEa,IAAAM,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPhF,KAAK;EACLE,MAAM;EACND;AACF,CAAC,KAAK;EACJ,MAAM;IACJR,2BAA2B;IAC3BC,iBAAiB,GAAG,IAAI;IACxBC,iBAAiB,GAAG,KAAK;IACzBsF,iBAAiB,GAAG,gEAAgE;IACpFnF,WAAW,GAAG,KAAK;IACnBoF,0BAA0B,GAAG,KAAK;IAClCrF,6BAA6B,GAAG;EAClC,CAAC,GAAGmF,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAMvF,eAAe,GAAGK,KAAK,CAACmF,kBAAkB,CAACH,iBAAiB,CAAC;EAEnE,MAAMI,uBAAuB,GAAGpF,KAAK,CAACqF,gBAAgB,CAAC,OAAO,CAAC;EAC/D,IAAI,CAACD,uBAAuB,CAAC7B,MAAM,EAAE;IACnC;EACF;EAEA,MAAMzD,sBAAsB,GAAGE,KAAK,CAACsF,yBAAyB,CAACL,0BAA0B,CAAC;EAC1F,MAAM1F,aAAa,GAAGS,KAAK,CAACuF,mBAAmB,CAAC;IAC9CnD,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAMoD,OAAO,GAAGlG,sBAAsB,CACpCC,aAAa,EACbC,2BAA2B,EAC3BC,iBAAiB,EACjBC,iBAAiB,EACjBC,eAAe,EACfC,6BAA6B,EAC7BC,WAAW,EACXC,sBAAsB,EACtBC,KAAK,EACLC,KAAK,EACLC,MAAM,CACP;EAED,IAAIuF,OAAO,IAAI,CAAC/F,iBAAiB,EAAE;IACjC;EACF;EAEA2E,0BAA0B,CACxB7E,aAAa,EAAEC,2BAA2B,EAAE4F,uBAAuB,EAAErF,KAAK,EAAEE,MAAM,CACnF;AACH,CAAC,EAAE;EACDwF,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,gFAAgF;MAC7FC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BjE,UAAU,EAAE;QACVtC,2BAA2B,EAAE;UAC3BkC,IAAI,EAAE;QACR,CAAC;QACDjC,iBAAiB,EAAE;UACjBiC,IAAI,EAAE;QACR,CAAC;QACDhC,iBAAiB,EAAE;UACjBgC,IAAI,EAAE;QACR,CAAC;QACDsD,iBAAiB,EAAE;UACjBtD,IAAI,EAAE;QACR,CAAC;QACD9B,6BAA6B,EAAE;UAC7B8B,IAAI,EAAE;QACR,CAAC;QACD7B,WAAW,EAAE;UACX6B,IAAI,EAAE;QACR,CAAC;QACDuD,0BAA0B,EAAE;UAC1BvD,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} 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