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.
Files changed (124) hide show
  1. package/README.md +273 -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 +44 -207
  19. package/dist/iterateJsdoc.js.map +1 -1
  20. package/dist/jsdocUtils.js +72 -221
  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 +9 -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":";;;;;;;AAAA;;AAGA;;AACA;;;;AAEA,MAAM;EACJA,IAAI,EAAEC;AADF,IAEFC,yBAFJ;;AAIA,MAAMC,qBAAqB,GAAG,CAACC,KAAD,EAAQC,GAAR,EAAaC,cAAb,KAAgC;EAC5D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIC,WAAJ;EACA,IAAIC,YAAJ;EACA,MAAMC,iBAAiB,GAAGL,KAAK,CAACM,oBAAN,CAA2BL,GAAG,CAACA,GAA/B,CAA1B;;EACA,IAAII,iBAAJ,EAAuB;IACrBF,WAAW,GAAG,CACZ,eADY,EACK,SADL,EACgB,UADhB,EAC4B,UAD5B,CAAd;IAGAC,YAAY,GAAG,CACb,KADa,EACN,MADM,EACE,MADF,EACU,aADV,CAAf;EAGD,CAPD,MAOO;IACLD,WAAW,GAAG,CACZ,eADY,EACK,SADL,EACgB,UADhB,CAAd;IAGAC,YAAY,GAAG,CACb,KADa,EACN,MADM,EACE,aADF,CAAf;EAGD;;EAED,MAAM;IACJG;EADI,IAEFN,GAAG,CAACO,MAAJ,CAAW,CAAX,CAFJ;;EAIA,MAAMC,eAAe,GAAG,CAACC,GAAD,EAAMC,OAAN,KAAkB;IACxC,MAAMC,SAAS,GAAGF,GAAG,GAAG,CAAxB;IAEA,OAAOP,WAAW,CAACU,KAAZ,CAAkBD,SAAlB,EAA6BE,IAA7B,CAAkC,CAACC,UAAD,EAAaC,QAAb,KAA0B;MACjE,MAAMC,WAAW,GAAGb,YAAY,CAACQ,SAAS,GAAGI,QAAb,CAAhC;MAEA,MAAME,YAAY,GAAGX,MAAM,CAACQ,UAAD,CAA3B;MAEA,MAAMI,GAAG,GAAGD,YAAZ;;MAEA,IAAIP,OAAJ,EAAa;QACXA,OAAO,CAAC,CAACQ,GAAF,EAAOF,WAAP,CAAP;MACD;;MAED,OAAOE,GAAG,KAAKR,OAAO,IAAI,CAACM,WAAjB,CAAV;IACD,CAZM,CAAP;EAaD,CAhBD,CAtC4D,CAwD5D;EACA;EACA;EACA;;;EACA,MAAMG,EAAE,GAAG,CAACjB,WAAW,CAACW,IAAZ,CAAiB,CAACC,UAAD,EAAaL,GAAb,KAAqB;IAChD,MAAMO,WAAW,GAAGb,YAAY,CAACM,GAAD,CAAhC;IACA,MAAMW,cAAc,GAAGd,MAAM,CAACU,WAAD,CAA7B;IACA,MAAMK,aAAa,GAAGf,MAAM,CAACQ,UAAD,CAA5B;IACA,MAAMQ,OAAO,GAAG,CAAArB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGa,UAAH,CAAd,KAAgC,CAAhD,CAJgD,CAMhD;IAEA;;IACA,OAAOO,aAAa,CAACE,MAAd,KAAyBD,OAAzB,IAAoCD,aAAa,CAACE,MAAd,KAAyB,CAA7D,IAEL;IACA;IACAF,aAAa,IAAI,CAACD,cAAlB,IAAoCZ,eAAe,CAACC,GAAD,CAJrD;EAKD,CAdW,CAAZ;;EAeA,IAAIU,EAAJ,EAAQ;IACN;EACD;;EAED,MAAMK,GAAG,GAAG,MAAM;IAChB,KAAK,MAAM,CACTf,GADS,EAETK,UAFS,CAAX,IAGKZ,WAAW,CAACuB,OAAZ,EAHL,EAG4B;MAC1B,MAAMT,WAAW,GAAGb,YAAY,CAACM,GAAD,CAAhC;MACA,MAAMW,cAAc,GAAGd,MAAM,CAACU,WAAD,CAA7B;;MAEA,IAAII,cAAJ,EAAoB;QAClB,MAAME,OAAO,GAAG,CAAArB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGa,UAAH,CAAd,KAAgC,CAAhD;QACAR,MAAM,CAACQ,UAAD,CAAN,GAAqB,GAAGY,QAAH,CAAYJ,OAAZ,EAAqB,GAArB,CAArB;QACAd,eAAe,CAACC,GAAD,EAAM,CAACkB,QAAD,EAAWC,UAAX,KAA0B;UAC7C,IAAID,QAAJ,EAAc;YACZrB,MAAM,CAACsB,UAAD,CAAN,GAAqB,EAArB;UACD;QACF,CAJc,CAAf;MAKD,CARD,MAQO;QACLtB,MAAM,CAACQ,UAAD,CAAN,GAAqB,EAArB;MACD;IACF;;IAEDf,KAAK,CAAC8B,MAAN,CAAa7B,GAAb,EAAkBM,MAAlB;EACD,CAtBD;;EAwBAP,KAAK,CAAC+B,WAAN,CAAkB,+CAAlB,EAAmE9B,GAAnE,EAAwEwB,GAAxE,EAA6E,IAA7E;AACD,CAxGD;;AA0GA,MAAMO,cAAc,GAAG,CAAC;EACtB9B,cADsB;EAEtB+B,MAFsB;EAGtBC,KAHsB;EAItBC,SAJsB;EAKtBC,oCALsB;EAMtBC,MANsB;EAOtBC,IAPsB;EAQtBtC;AARsB,CAAD,KASjB;EACJ,MAAMuC,SAAS,GAAG1C,WAAW,CAC3B,IAAA2C,uBAAA,EAAe;IACbtC,cADa;IAEb+B,MAFa;IAGbG,oCAHa;IAIbE;EAJa,CAAf,CAD2B,CAA7B;EAQA,MAAMG,gBAAgB,GAAGF,SAAS,CAACL,KAAD,CAAlC;EAEA,MAAMQ,OAAO,GAAG,OAAOP,SAAS,CAACQ,KAAjB,GAAyB,IAAzC;EACA,MAAMC,SAAS,GAAG5C,KAAK,CAAC6C,SAAN,CAAgBJ,gBAAhB,EACfK,SADe,EAAlB;;EAGA,IAAIJ,OAAO,KAAKE,SAAhB,EAA2B;IACzBP,MAAM,CACJ,2CADI,EAEHU,KAAD,IAAW;MACT,OAAOA,KAAK,CAACC,WAAN,CAAkBb,SAAlB,EAA6BS,SAA7B,CAAP;IACD,CAJG,CAAN;EAMD;AACF,CAhCD;;eAkCe,IAAAK,qBAAA,EAAa,CAAC;EAC3BhB,MAD2B;EAE3BC,KAF2B;EAG3BC,SAH2B;EAI3BE,MAJ2B;EAK3Ba,OAL2B;EAM3BlD;AAN2B,CAAD,KAOtB;EACJ,MAAM;IACJsC,IAAI,EAAEa,cAAc,GAAG,CACrB,OADqB,EACZ,KADY,EACL,UADK,EACO,UADP,EACmB,MADnB,EAC2B,SAD3B,EACsC,QADtC,CADnB;IAIJf,oCAJI;IAKJlC;EALI,IAMFgD,OAAO,CAACE,OAAR,CAAgB,CAAhB,KAAsB,EAN1B;;EAQA,IAAIF,OAAO,CAACE,OAAR,CAAgB,CAAhB,MAAuB,QAA3B,EAAqC;IACnC;IACA,IAAI,CAACjB,SAAS,CAACQ,KAAV,CAAgBU,QAAhB,CAAyB,IAAzB,CAAL,EAAqC;MACnC;IACD;;IAEDrB,cAAc,CAAC;MACb9B,cADa;MAEb+B,MAFa;MAGbC,KAHa;MAIbC,SAJa;MAKbC,oCALa;MAMbC,MANa;MAObC,IAAI,EAAEa,cAPO;MAQbnD;IARa,CAAD,CAAd;IAWA;EACD;;EAED,MAAMsD,SAAS,GAAGtD,KAAK,CAACuD,cAAN,CAAqBJ,cAArB,CAAlB;;EACA,KAAK,MAAMlD,GAAX,IAAkBqD,SAAlB,EAA6B;IAC3BvD,qBAAqB,CAACC,KAAD,EAAQC,GAAR,EAAaC,cAAb,CAArB;EACD;AACF,CAxCc,EAwCZ;EACDsD,gBAAgB,EAAE,IADjB;EAEDC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,iDADT;MAEJC,GAAG,EAAE;IAFD,CADF;IAKJC,OAAO,EAAE,YALL;IAMJC,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,CACJ,QADI,EACM,OADN,CADR;MAIEC,IAAI,EAAE;IAJR,CADM,EAON;MACEC,oBAAoB,EAAE,KADxB;MAEEC,UAAU,EAAE;QACVhE,cAAc,EAAE;UACd+D,oBAAoB,EAAE,KADR;UAEdC,UAAU,EAAE;YACVC,aAAa,EAAE;cACbH,IAAI,EAAE;YADO,CADL;YAIVI,QAAQ,EAAE;cACRJ,IAAI,EAAE;YADE,CAJA;YAOVK,OAAO,EAAE;cACPL,IAAI,EAAE;YADC,CAPC;YAUVM,QAAQ,EAAE;cACRN,IAAI,EAAE;YADE;UAVA;QAFE,CADN;QAkBV5B,oCAAoC,EAAE;UACpCmC,OAAO,EAAE,KAD2B;UAEpCP,IAAI,EAAE;QAF8B,CAlB5B;QAsBV1B,IAAI,EAAE;UACJkC,KAAK,EAAE;YACLR,IAAI,EAAE;UADD,CADH;UAIJA,IAAI,EAAE;QAJF;MAtBI,CAFd;MA+BEA,IAAI,EAAE;IA/BR,CAPM,CANJ;IA+CJA,IAAI,EAAE;EA/CF;AAFL,CAxCY,C"}
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,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; // eslint-disable-next-line complexity
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
- const functionParameterName = functionParameterNames[index - dotted];
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