eslint-plugin-jsdoc 44.2.3 → 44.2.5

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 (120) hide show
  1. package/dist/WarnSettings.js +0 -1
  2. package/dist/WarnSettings.js.map +1 -1
  3. package/dist/alignTransform.js +87 -5
  4. package/dist/alignTransform.js.map +1 -1
  5. package/dist/bin/generateRule.js +4 -3
  6. package/dist/bin/generateRule.js.map +1 -1
  7. package/dist/exportParser.js +272 -71
  8. package/dist/exportParser.js.map +1 -1
  9. package/dist/generateRule.js +4 -3
  10. package/dist/generateRule.js.map +1 -1
  11. package/dist/iterateJsdoc.js +921 -357
  12. package/dist/iterateJsdoc.js.map +1 -1
  13. package/dist/jsdocUtils.js +270 -168
  14. package/dist/jsdocUtils.js.map +1 -1
  15. package/dist/rules/checkAlignment.js +6 -0
  16. package/dist/rules/checkAlignment.js.map +1 -1
  17. package/dist/rules/checkExamples.js +73 -9
  18. package/dist/rules/checkExamples.js.map +1 -1
  19. package/dist/rules/checkIndentation.js +12 -2
  20. package/dist/rules/checkIndentation.js.map +1 -1
  21. package/dist/rules/checkLineAlignment.js +71 -7
  22. package/dist/rules/checkLineAlignment.js.map +1 -1
  23. package/dist/rules/checkParamNames.js +29 -11
  24. package/dist/rules/checkParamNames.js.map +1 -1
  25. package/dist/rules/checkPropertyNames.js +13 -7
  26. package/dist/rules/checkPropertyNames.js.map +1 -1
  27. package/dist/rules/checkTagNames.js +45 -9
  28. package/dist/rules/checkTagNames.js.map +1 -1
  29. package/dist/rules/checkTypes.js +98 -41
  30. package/dist/rules/checkTypes.js.map +1 -1
  31. package/dist/rules/checkValues.js +7 -7
  32. package/dist/rules/checkValues.js.map +1 -1
  33. package/dist/rules/emptyTags.js +8 -1
  34. package/dist/rules/emptyTags.js.map +1 -1
  35. package/dist/rules/informativeDocs.js +27 -8
  36. package/dist/rules/informativeDocs.js.map +1 -1
  37. package/dist/rules/matchDescription.js +18 -1
  38. package/dist/rules/matchDescription.js.map +1 -1
  39. package/dist/rules/matchName.js +2 -2
  40. package/dist/rules/matchName.js.map +1 -1
  41. package/dist/rules/multilineBlocks.js +12 -1
  42. package/dist/rules/multilineBlocks.js.map +1 -1
  43. package/dist/rules/noBadBlocks.js +4 -6
  44. package/dist/rules/noBadBlocks.js.map +1 -1
  45. package/dist/rules/noBlankBlockDescriptions.js +2 -0
  46. package/dist/rules/noBlankBlockDescriptions.js.map +1 -1
  47. package/dist/rules/noMissingSyntax.js +53 -16
  48. package/dist/rules/noMissingSyntax.js.map +1 -1
  49. package/dist/rules/noMultiAsterisks.js +1 -6
  50. package/dist/rules/noMultiAsterisks.js.map +1 -1
  51. package/dist/rules/noRestrictedSyntax.js +12 -5
  52. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  53. package/dist/rules/noTypes.js +3 -0
  54. package/dist/rules/noTypes.js.map +1 -1
  55. package/dist/rules/noUndefinedTypes.js +65 -27
  56. package/dist/rules/noUndefinedTypes.js.map +1 -1
  57. package/dist/rules/requireAsteriskPrefix.js +20 -0
  58. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  59. package/dist/rules/requireDescription.js +6 -2
  60. package/dist/rules/requireDescription.js.map +1 -1
  61. package/dist/rules/requireDescriptionCompleteSentence.js +75 -12
  62. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  63. package/dist/rules/requireFileOverview.js +9 -4
  64. package/dist/rules/requireFileOverview.js.map +1 -1
  65. package/dist/rules/requireHyphenBeforeParamDescription.js +21 -7
  66. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  67. package/dist/rules/requireJsdoc.js +150 -29
  68. package/dist/rules/requireJsdoc.js.map +1 -1
  69. package/dist/rules/requireParam.js +116 -10
  70. package/dist/rules/requireParam.js.map +1 -1
  71. package/dist/rules/requireProperty.js +1 -1
  72. package/dist/rules/requireProperty.js.map +1 -1
  73. package/dist/rules/requireReturns.js +2 -3
  74. package/dist/rules/requireReturns.js.map +1 -1
  75. package/dist/rules/requireReturnsCheck.js +9 -2
  76. package/dist/rules/requireReturnsCheck.js.map +1 -1
  77. package/dist/rules/requireThrows.js +2 -3
  78. package/dist/rules/requireThrows.js.map +1 -1
  79. package/dist/rules/requireYields.js +9 -3
  80. package/dist/rules/requireYields.js.map +1 -1
  81. package/dist/rules/requireYieldsCheck.js +19 -5
  82. package/dist/rules/requireYieldsCheck.js.map +1 -1
  83. package/dist/rules/sortTags.js +67 -9
  84. package/dist/rules/sortTags.js.map +1 -1
  85. package/dist/rules/tagLines.js +22 -3
  86. package/dist/rules/tagLines.js.map +1 -1
  87. package/dist/rules/textEscaping.js +18 -4
  88. package/dist/rules/textEscaping.js.map +1 -1
  89. package/dist/rules/validTypes.js +26 -9
  90. package/dist/rules/validTypes.js.map +1 -1
  91. package/dist/tagNames.js +0 -2
  92. package/dist/tagNames.js.map +1 -1
  93. package/dist/utils/hasReturnValue.js +77 -48
  94. package/dist/utils/hasReturnValue.js.map +1 -1
  95. package/docs/rules/check-line-alignment.md +7 -0
  96. package/docs/rules/check-tag-names.md +15 -0
  97. package/docs/rules/no-missing-syntax.md +6 -0
  98. package/docs/rules/no-undefined-types.md +6 -0
  99. package/docs/rules/require-description-complete-sentence.md +525 -289
  100. package/docs/rules/require-description.md +289 -525
  101. package/docs/rules/require-file-overview.md +7 -0
  102. package/docs/rules/require-jsdoc.md +1 -1
  103. package/docs/rules/require-param-description.md +116 -1694
  104. package/docs/rules/require-param-name.md +58 -133
  105. package/docs/rules/require-param-type.md +119 -55
  106. package/docs/rules/require-param.md +1704 -111
  107. package/docs/rules/require-property-description.md +39 -79
  108. package/docs/rules/require-property-name.md +21 -30
  109. package/docs/rules/require-property-type.md +21 -21
  110. package/docs/rules/require-property.md +82 -33
  111. package/docs/rules/require-returns-check.md +636 -747
  112. package/docs/rules/require-returns-description.md +61 -933
  113. package/docs/rules/require-returns-type.md +42 -79
  114. package/docs/rules/require-returns.md +1081 -61
  115. package/docs/rules/require-yields-check.md +238 -517
  116. package/docs/rules/require-yields.md +517 -238
  117. package/docs/rules/valid-types.md +1 -1
  118. package/docs/settings.md +3 -1
  119. package/package.json +10 -9
  120. package/tsconfig.json +2 -3
@@ -4,15 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _areDocsInformative = require("are-docs-informative");
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
8
+ var _areDocsInformative = require("are-docs-informative");
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
10
  const defaultAliases = {
11
11
  a: ['an', 'our']
12
12
  };
13
13
  const defaultUselessWords = ['a', 'an', 'i', 'in', 'of', 's', 'the'];
14
14
 
15
- // eslint-disable-next-line complexity
15
+ /* eslint-disable complexity -- Temporary */
16
+
17
+ /**
18
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node
19
+ * @returns {string[]}
20
+ */
16
21
  const getNamesFromNode = node => {
17
22
  switch (node === null || node === void 0 ? void 0 : node.type) {
18
23
  case 'AccessorProperty':
@@ -21,7 +26,8 @@ const getNamesFromNode = node => {
21
26
  case 'TSAbstractAccessorProperty':
22
27
  case 'TSAbstractMethodDefinition':
23
28
  case 'TSAbstractPropertyDefinition':
24
- return [...getNamesFromNode(node.parent.parent), ...getNamesFromNode(node.key)];
29
+ return [...getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.Node} */node.parent.parent), ...getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.Node} */
30
+ node.key)];
25
31
  case 'ClassDeclaration':
26
32
  case 'ClassExpression':
27
33
  case 'FunctionDeclaration':
@@ -33,19 +39,25 @@ const getNamesFromNode = node => {
33
39
  case 'TSEnumMember':
34
40
  case 'TSInterfaceDeclaration':
35
41
  case 'TSTypeAliasDeclaration':
36
- return getNamesFromNode(node.id);
42
+ return getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */
43
+ node.id);
37
44
  case 'Identifier':
38
45
  return [node.name];
39
46
  case 'Property':
40
- return getNamesFromNode(node.key);
47
+ return getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.Node} */
48
+ node.key);
41
49
  case 'VariableDeclaration':
42
- return getNamesFromNode(node.declarations[0]);
50
+ return getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.Node} */
51
+ node.declarations[0]);
43
52
  case 'VariableDeclarator':
44
- return [...getNamesFromNode(node.id), ...getNamesFromNode(node.init)].filter(Boolean);
53
+ return [...getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.Node} */
54
+ node.id), ...getNamesFromNode( /** @type {import('@typescript-eslint/types').TSESTree.Node} */
55
+ node.init)].filter(Boolean);
45
56
  default:
46
57
  return [];
47
58
  }
48
59
  };
60
+ /* eslint-enable complexity -- Temporary */
49
61
  var _default = (0, _iterateJsdoc.default)(({
50
62
  context,
51
63
  jsdoc,
@@ -58,6 +70,12 @@ var _default = (0, _iterateJsdoc.default)(({
58
70
  uselessWords = defaultUselessWords
59
71
  } = context.options[0] || {};
60
72
  const nodeNames = getNamesFromNode(node);
73
+
74
+ /**
75
+ * @param {string} text
76
+ * @param {string} extraName
77
+ * @returns {boolean}
78
+ */
61
79
  const descriptionIsRedundant = (text, extraName = '') => {
62
80
  const textTrimmed = text.trim();
63
81
  return Boolean(textTrimmed) && !(0, _areDocsInformative.areDocsInformative)(textTrimmed, [extraName, nodeNames].filter(Boolean).join(' '), {
@@ -74,7 +92,8 @@ var _default = (0, _iterateJsdoc.default)(({
74
92
  if (descriptionIsRedundant(tag.description, tag.name)) {
75
93
  utils.reportJSDoc('This tag description only repeats the name it describes.', tag);
76
94
  }
77
- descriptionReported ||= tag.description === description && tag.line === lastDescriptionLine;
95
+ descriptionReported ||= tag.description === description && /** @type {import('comment-parser').Spec & {line: import('../iterateJsdoc.js').Integer}} */
96
+ tag.line === lastDescriptionLine;
78
97
  }
79
98
  if (!descriptionReported && descriptionIsRedundant(description)) {
80
99
  report('This description only repeats the name it describes.');
@@ -1 +1 @@
1
- {"version":3,"file":"informativeDocs.js","names":["_areDocsInformative","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","defaultAliases","a","defaultUselessWords","getNamesFromNode","node","type","parent","key","id","name","declarations","init","filter","Boolean","_default","iterateJsdoc","context","jsdoc","report","utils","aliases","uselessWords","options","nodeNames","descriptionIsRedundant","text","extraName","textTrimmed","trim","areDocsInformative","join","description","lastDescriptionLine","getDescription","descriptionReported","tag","tags","reportJSDoc","line","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import {\n areDocsInformative,\n} from 'are-docs-informative';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst defaultAliases = {\n a: [\n 'an', 'our',\n ],\n};\n\nconst defaultUselessWords = [\n 'a', 'an', 'i', 'in', 'of', 's', 'the',\n];\n\n// eslint-disable-next-line complexity\nconst getNamesFromNode = (node) => {\n switch (node?.type) {\n case 'AccessorProperty':\n case 'MethodDefinition':\n case 'PropertyDefinition':\n case 'TSAbstractAccessorProperty':\n case 'TSAbstractMethodDefinition':\n case 'TSAbstractPropertyDefinition':\n return [\n ...getNamesFromNode(node.parent.parent),\n ...getNamesFromNode(node.key),\n ];\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSModuleDeclaration':\n case 'TSMethodSignature':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(node.id);\n case 'Identifier':\n return [\n node.name,\n ];\n case 'Property':\n return getNamesFromNode(node.key);\n case 'VariableDeclaration':\n return getNamesFromNode(node.declarations[0]);\n case 'VariableDeclarator':\n return [\n ...getNamesFromNode(node.id),\n ...getNamesFromNode(node.init),\n ].filter(Boolean);\n default:\n return [];\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const {\n aliases = defaultAliases,\n uselessWords = defaultUselessWords,\n } = context.options[0] || {};\n const nodeNames = getNamesFromNode(node);\n\n const descriptionIsRedundant = (text, extraName = '') => {\n const textTrimmed = text.trim();\n return Boolean(textTrimmed) && !areDocsInformative(textTrimmed, [\n extraName, nodeNames,\n ].filter(Boolean).join(' '), {\n aliases,\n uselessWords,\n });\n };\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n let descriptionReported = false;\n\n for (const tag of jsdoc.tags) {\n if (descriptionIsRedundant(tag.description, tag.name)) {\n utils.reportJSDoc(\n 'This tag description only repeats the name it describes.',\n tag,\n );\n }\n\n descriptionReported ||= tag.description === description && tag.line === lastDescriptionLine;\n }\n\n if (!descriptionReported && descriptionIsRedundant(description)) {\n report('This description only repeats the name it describes.');\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'This rule reports doc comments that only restate their attached name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#informative-docs',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"informativeDocs.js","names":["_iterateJsdoc","_interopRequireDefault","require","_areDocsInformative","obj","__esModule","default","defaultAliases","a","defaultUselessWords","getNamesFromNode","node","type","parent","key","id","name","declarations","init","filter","Boolean","_default","iterateJsdoc","context","jsdoc","report","utils","aliases","uselessWords","options","nodeNames","descriptionIsRedundant","text","extraName","textTrimmed","trim","areDocsInformative","join","description","lastDescriptionLine","getDescription","descriptionReported","tag","tags","reportJSDoc","line","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\nimport {\n areDocsInformative,\n} from 'are-docs-informative';\n\nconst defaultAliases = {\n a: [\n 'an', 'our',\n ],\n};\n\nconst defaultUselessWords = [\n 'a', 'an', 'i', 'in', 'of', 's', 'the',\n];\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node\n * @returns {string[]}\n */\nconst getNamesFromNode = (node) => {\n switch (node?.type) {\n case 'AccessorProperty':\n case 'MethodDefinition':\n case 'PropertyDefinition':\n case 'TSAbstractAccessorProperty':\n case 'TSAbstractMethodDefinition':\n case 'TSAbstractPropertyDefinition':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node.parent\n ).parent,\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n ),\n ];\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSModuleDeclaration':\n case 'TSMethodSignature':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */\n (node).id,\n );\n case 'Identifier':\n return [\n node.name,\n ];\n case 'Property':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n );\n case 'VariableDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.declarations[0]),\n );\n case 'VariableDeclarator':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.id),\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.init),\n ),\n ].filter(Boolean);\n default:\n return [];\n }\n};\n/* eslint-enable complexity -- Temporary */\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const {\n aliases = defaultAliases,\n uselessWords = defaultUselessWords,\n } = context.options[0] || {};\n const nodeNames = getNamesFromNode(node);\n\n /**\n * @param {string} text\n * @param {string} extraName\n * @returns {boolean}\n */\n const descriptionIsRedundant = (text, extraName = '') => {\n const textTrimmed = text.trim();\n return Boolean(textTrimmed) && !areDocsInformative(textTrimmed, [\n extraName, nodeNames,\n ].filter(Boolean).join(' '), {\n aliases,\n uselessWords,\n });\n };\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n let descriptionReported = false;\n\n for (const tag of jsdoc.tags) {\n if (descriptionIsRedundant(tag.description, tag.name)) {\n utils.reportJSDoc(\n 'This tag description only repeats the name it describes.',\n tag,\n );\n }\n\n descriptionReported ||= tag.description === description &&\n /** @type {import('comment-parser').Spec & {line: import('../iterateJsdoc.js').Integer}} */\n (tag).line === lastDescriptionLine;\n }\n\n if (!descriptionReported && descriptionIsRedundant(description)) {\n report('This description only repeats the name it describes.');\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'This rule reports doc comments that only restate their attached name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#informative-docs',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -9,6 +9,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
9
9
  // If supporting Node >= 10, we could loosen the default to this for the
10
10
  // initial letter: \\p{Upper}
11
11
  const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$';
12
+
13
+ /**
14
+ * @param {string} value
15
+ * @param {string} userDefault
16
+ * @returns {string}
17
+ */
12
18
  const stringOrDefault = (value, userDefault) => {
13
19
  return typeof value === 'string' ? value : userDefault || matchDescriptionDefault;
14
20
  };
@@ -24,6 +30,12 @@ var _default = (0, _iterateJsdoc.default)(({
24
30
  message,
25
31
  tags
26
32
  } = context.options[0] || {};
33
+
34
+ /**
35
+ * @param {string} desc
36
+ * @param {import('comment-parser').Spec} [tag]
37
+ * @returns {void}
38
+ */
27
39
  const validateDescription = (desc, tag) => {
28
40
  let mainDescriptionMatch = mainDescription;
29
41
  let errorMessage = message;
@@ -61,6 +73,11 @@ var _default = (0, _iterateJsdoc.default)(({
61
73
  if (!tags || !Object.keys(tags).length) {
62
74
  return;
63
75
  }
76
+
77
+ /**
78
+ * @param {string} tagName
79
+ * @returns {boolean}
80
+ */
64
81
  const hasOptionTag = tagName => {
65
82
  return Boolean(tags[tagName]);
66
83
  };
@@ -80,7 +97,7 @@ var _default = (0, _iterateJsdoc.default)(({
80
97
  tagsWithoutNames
81
98
  } = utils.getTagsByType(whitelistedTags);
82
99
  tagsWithNames.some(tag => {
83
- const desc = utils.getTagDescription(tag).replace(/^[- ]*/u, '').trim();
100
+ const desc = /** @type {string} */utils.getTagDescription(tag).replace(/^[- ]*/u, '').trim();
84
101
  return validateDescription(desc, tag);
85
102
  });
86
103
  tagsWithoutNames.some(tag => {
@@ -1 +1 @@
1
- {"version":3,"file":"matchDescription.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","matchDescriptionDefault","stringOrDefault","value","userDefault","_default","iterateJsdoc","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","desc","tag","mainDescriptionMatch","errorMessage","match","Object","hasOwn","tagValue","tagName","regex","getRegexFromString","test","line","source","number","description","getDescription","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","replace","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum","exports","module"],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^\\n?([A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]\\\\s*)?$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.hasOwn(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"matchDescription.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","matchDescriptionDefault","stringOrDefault","value","userDefault","_default","iterateJsdoc","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","desc","tag","mainDescriptionMatch","errorMessage","match","Object","hasOwn","tagValue","tagName","regex","getRegexFromString","test","line","source","number","description","getDescription","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","replace","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum","exports","module"],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^\\n?([A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]\\\\s*)?$';\n\n/**\n * @param {string} value\n * @param {string} userDefault\n * @returns {string}\n */\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n /**\n * @param {string} desc\n * @param {import('comment-parser').Spec} [tag]\n * @returns {void}\n */\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.hasOwn(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -28,7 +28,7 @@ var _default = (0, _iterateJsdoc.default)(({
28
28
  disallowName,
29
29
  replacement,
30
30
  tags = ['*']
31
- } = match[lastIndex];
31
+ } = match[/** @type {import('../iterateJsdoc.js').Integer} */lastIndex];
32
32
  const allowNameRegex = allowName && utils.getRegexFromString(allowName);
33
33
  const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);
34
34
  let applicableTags = jsdoc.tags;
@@ -56,7 +56,7 @@ var _default = (0, _iterateJsdoc.default)(({
56
56
  };
57
57
  let {
58
58
  message
59
- } = match[lastIndex];
59
+ } = match[/** @type {import('../iterateJsdoc.js').Integer} */lastIndex];
60
60
  if (!message) {
61
61
  if (hasRegex) {
62
62
  message = disallowed ? `Only allowing names not matching \`${disallowNameRegex}\` but found "${tag.name}".` : `Only allowing names matching \`${allowNameRegex}\` but found "${tag.name}".`;
@@ -1 +1 @@
1
- {"version":3,"file":"matchName.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","report","info","lastIndex","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","allowed","test","name","disallowed","hasRegex","fixer","src","source","tokens","replace","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","comment","required","exports","module"],"sources":["../../src/rules/matchName.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n info: {\n lastIndex,\n },\n utils,\n}) => {\n const {\n match,\n } = context.options[0] || {};\n if (!match) {\n report('Rule `no-restricted-syntax` is missing a `match` option.');\n\n return;\n }\n\n const {\n allowName,\n disallowName,\n replacement,\n tags = [\n '*',\n ],\n } = match[lastIndex];\n\n const allowNameRegex = allowName && utils.getRegexFromString(allowName);\n const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);\n\n let applicableTags = jsdoc.tags;\n if (!tags.includes('*')) {\n applicableTags = utils.getPresentTags(tags);\n }\n\n let reported = false;\n for (const tag of applicableTags) {\n const allowed = !allowNameRegex || allowNameRegex.test(tag.name);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tag.name);\n const hasRegex = allowNameRegex || disallowNameRegex;\n if (hasRegex && allowed && !disallowed) {\n continue;\n }\n\n if (!hasRegex && reported) {\n continue;\n }\n\n const fixer = () => {\n for (const src of tag.source) {\n if (src.tokens.name) {\n src.tokens.name = src.tokens.name.replace(\n disallowNameRegex, replacement,\n );\n break;\n }\n }\n };\n\n let {\n message,\n } = match[lastIndex];\n if (!message) {\n if (hasRegex) {\n message = disallowed ?\n `Only allowing names not matching \\`${disallowNameRegex}\\` but found \"${tag.name}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tag.name}\".`;\n } else {\n message = `Prohibited context for \"${tag.name}\".`;\n }\n }\n\n utils.reportJSDoc(\n message,\n hasRegex ? tag : null,\n\n // We could match up\n disallowNameRegex && replacement !== undefined ?\n fixer :\n null,\n false,\n {\n // Could also supply `context`, `comment`, `tags`\n allowName,\n disallowName,\n name: tag.name,\n },\n );\n if (!hasRegex) {\n reported = true;\n }\n }\n}, {\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-name',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n match: {\n additionalProperties: false,\n items: {\n properties: {\n allowName: {\n type: 'string',\n },\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n disallowName: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n required: [\n 'match',\n ],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C;AAAA,IAAAG,QAAA,GACe,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLC,MAAM;EACNC,IAAI,EAAE;IACJC;EACF,CAAC;EACDC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGN,OAAO,CAACO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5B,IAAI,CAACD,KAAK,EAAE;IACVJ,MAAM,CAAC,0DAA0D,CAAC;IAElE;EACF;EAEA,MAAM;IACJM,SAAS;IACTC,YAAY;IACZC,WAAW;IACXC,IAAI,GAAG,CACL,GAAG;EAEP,CAAC,GAAGL,KAAK,CAACF,SAAS,CAAC;EAEpB,MAAMQ,cAAc,GAAGJ,SAAS,IAAIH,KAAK,CAACQ,kBAAkB,CAACL,SAAS,CAAC;EACvE,MAAMM,iBAAiB,GAAGL,YAAY,IAAIJ,KAAK,CAACQ,kBAAkB,CAACJ,YAAY,CAAC;EAEhF,IAAIM,cAAc,GAAGd,KAAK,CAACU,IAAI;EAC/B,IAAI,CAACA,IAAI,CAACK,QAAQ,CAAC,GAAG,CAAC,EAAE;IACvBD,cAAc,GAAGV,KAAK,CAACY,cAAc,CAACN,IAAI,CAAC;EAC7C;EAEA,IAAIO,QAAQ,GAAG,KAAK;EACpB,KAAK,MAAMC,GAAG,IAAIJ,cAAc,EAAE;IAChC,MAAMK,OAAO,GAAG,CAACR,cAAc,IAAIA,cAAc,CAACS,IAAI,CAACF,GAAG,CAACG,IAAI,CAAC;IAChE,MAAMC,UAAU,GAAGT,iBAAiB,IAAIA,iBAAiB,CAACO,IAAI,CAACF,GAAG,CAACG,IAAI,CAAC;IACxE,MAAME,QAAQ,GAAGZ,cAAc,IAAIE,iBAAiB;IACpD,IAAIU,QAAQ,IAAIJ,OAAO,IAAI,CAACG,UAAU,EAAE;MACtC;IACF;IAEA,IAAI,CAACC,QAAQ,IAAIN,QAAQ,EAAE;MACzB;IACF;IAEA,MAAMO,KAAK,GAAGA,CAAA,KAAM;MAClB,KAAK,MAAMC,GAAG,IAAIP,GAAG,CAACQ,MAAM,EAAE;QAC5B,IAAID,GAAG,CAACE,MAAM,CAACN,IAAI,EAAE;UACnBI,GAAG,CAACE,MAAM,CAACN,IAAI,GAAGI,GAAG,CAACE,MAAM,CAACN,IAAI,CAACO,OAAO,CACvCf,iBAAiB,EAAEJ,WACrB,CAAC;UACD;QACF;MACF;IACF,CAAC;IAED,IAAI;MACFoB;IACF,CAAC,GAAGxB,KAAK,CAACF,SAAS,CAAC;IACpB,IAAI,CAAC0B,OAAO,EAAE;MACZ,IAAIN,QAAQ,EAAE;QACZM,OAAO,GAAGP,UAAU,GACjB,sCAAqCT,iBAAkB,iBAAgBK,GAAG,CAACG,IAAK,IAAG,GACnF,kCAAiCV,cAAe,iBAAgBO,GAAG,CAACG,IAAK,IAAG;MACjF,CAAC,MAAM;QACLQ,OAAO,GAAI,2BAA0BX,GAAG,CAACG,IAAK,IAAG;MACnD;IACF;IAEAjB,KAAK,CAAC0B,WAAW,CACfD,OAAO,EACPN,QAAQ,GAAGL,GAAG,GAAG,IAAI;IAErB;IACAL,iBAAiB,IAAIJ,WAAW,KAAKsB,SAAS,GAC5CP,KAAK,GACL,IAAI,EACN,KAAK,EACL;MACE;MACAjB,SAAS;MACTC,YAAY;MACZa,IAAI,EAAEH,GAAG,CAACG;IACZ,CACF,CAAC;IACD,IAAI,CAACE,QAAQ,EAAE;MACbN,QAAQ,GAAG,IAAI;IACjB;EACF;AACF,CAAC,EAAE;EACDe,YAAY,EAAE,IAAI;EAClBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,iGAAiG;MAC9GC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVnC,KAAK,EAAE;UACLkC,oBAAoB,EAAE,KAAK;UAC3BE,KAAK,EAAE;YACLD,UAAU,EAAE;cACVjC,SAAS,EAAE;gBACTmC,IAAI,EAAE;cACR,CAAC;cACDC,OAAO,EAAE;gBACPD,IAAI,EAAE;cACR,CAAC;cACD3C,OAAO,EAAE;gBACP2C,IAAI,EAAE;cACR,CAAC;cACDlC,YAAY,EAAE;gBACZkC,IAAI,EAAE;cACR,CAAC;cACDb,OAAO,EAAE;gBACPa,IAAI,EAAE;cACR,CAAC;cACDhC,IAAI,EAAE;gBACJ+B,KAAK,EAAE;kBACLC,IAAI,EAAE;gBACR,CAAC;gBACDA,IAAI,EAAE;cACR;YACF,CAAC;YACDA,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDE,QAAQ,EAAE,CACR,OAAO,CACR;MACDF,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAG,OAAA,CAAAjD,OAAA,GAAAC,QAAA;AAAAiD,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAAjD,OAAA"}
1
+ {"version":3,"file":"matchName.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","report","info","lastIndex","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","allowed","test","name","disallowed","hasRegex","fixer","src","source","tokens","replace","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","comment","required","exports","module"],"sources":["../../src/rules/matchName.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n info: {\n lastIndex,\n },\n utils,\n}) => {\n const {\n match,\n } = context.options[0] || {};\n if (!match) {\n report('Rule `no-restricted-syntax` is missing a `match` option.');\n\n return;\n }\n\n const {\n allowName,\n disallowName,\n replacement,\n tags = [\n '*',\n ],\n } = match[/** @type {import('../iterateJsdoc.js').Integer} */ (lastIndex)];\n\n const allowNameRegex = allowName && utils.getRegexFromString(allowName);\n const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);\n\n let applicableTags = jsdoc.tags;\n if (!tags.includes('*')) {\n applicableTags = utils.getPresentTags(tags);\n }\n\n let reported = false;\n for (const tag of applicableTags) {\n const allowed = !allowNameRegex || allowNameRegex.test(tag.name);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tag.name);\n const hasRegex = allowNameRegex || disallowNameRegex;\n if (hasRegex && allowed && !disallowed) {\n continue;\n }\n\n if (!hasRegex && reported) {\n continue;\n }\n\n const fixer = () => {\n for (const src of tag.source) {\n if (src.tokens.name) {\n src.tokens.name = src.tokens.name.replace(\n disallowNameRegex, replacement,\n );\n break;\n }\n }\n };\n\n let {\n message,\n } = match[/** @type {import('../iterateJsdoc.js').Integer} */ (lastIndex)];\n if (!message) {\n if (hasRegex) {\n message = disallowed ?\n `Only allowing names not matching \\`${disallowNameRegex}\\` but found \"${tag.name}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tag.name}\".`;\n } else {\n message = `Prohibited context for \"${tag.name}\".`;\n }\n }\n\n utils.reportJSDoc(\n message,\n hasRegex ? tag : null,\n\n // We could match up\n disallowNameRegex && replacement !== undefined ?\n fixer :\n null,\n false,\n {\n // Could also supply `context`, `comment`, `tags`\n allowName,\n disallowName,\n name: tag.name,\n },\n );\n if (!hasRegex) {\n reported = true;\n }\n }\n}, {\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-name',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n match: {\n additionalProperties: false,\n items: {\n properties: {\n allowName: {\n type: 'string',\n },\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n disallowName: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n required: [\n 'match',\n ],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -31,6 +31,11 @@ var _default = (0, _iterateJsdoc.default)(({
31
31
  tag
32
32
  } = tokens;
33
33
  const sourceLength = jsdoc.source.length;
34
+
35
+ /**
36
+ * @param {string} tagName
37
+ * @returns {boolean}
38
+ */
34
39
  const isInvalidSingleLine = tagName => {
35
40
  return noSingleLineBlocks && (!tagName || !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));
36
41
  };
@@ -78,7 +83,13 @@ var _default = (0, _iterateJsdoc.default)(({
78
83
  delimiter
79
84
  } = line;
80
85
  for (const prop of ['delimiter', 'postDelimiter', 'tag', 'type', 'lineEnd', 'postType', 'postTag', 'name', 'postName', 'description']) {
81
- finalLineTokens[prop] = '';
86
+ finalLineTokens[
87
+ /**
88
+ * @type {"delimiter"|"postDelimiter"|"tag"|"type"|
89
+ * "lineEnd"|"postType"|"postTag"|"name"|
90
+ * "postName"|"description"}
91
+ */
92
+ prop] = '';
82
93
  }
83
94
  utils.addLine(jsdoc.source.length - 1, {
84
95
  ...line,
@@ -1 +1 @@
1
- {"version":3,"file":"multilineBlocks.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","anyOf","enum","items","exports","module"],"sources":["../../src/rules/multilineBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = [\n 'lends', 'type',\n ],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[prop] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n tag: tg,\n type: typ,\n name: nme,\n lineEnd,\n postType,\n postName,\n postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"multilineBlocks.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","anyOf","enum","items","exports","module"],"sources":["../../src/rules/multilineBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = [\n 'lends', 'type',\n ],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[\n /**\n * @type {\"delimiter\"|\"postDelimiter\"|\"tag\"|\"type\"|\n * \"lineEnd\"|\"postType\"|\"postTag\"|\"name\"|\n * \"postName\"|\"description\"}\n */ (\n prop\n )\n ] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n tag: tg,\n type: typ,\n name: nme,\n lineEnd,\n postType,\n postName,\n postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _commentParser = require("comment-parser");
8
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
8
+ var _commentParser = require("comment-parser");
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
10
  // Neither a single nor 3+ asterisks are valid jsdoc per
11
11
  // https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code
@@ -22,7 +22,7 @@ var _default = (0, _iterateJsdoc.default)(({
22
22
  preventAllMultiAsteriskBlocks = false
23
23
  } = {}] = context.options;
24
24
  let extraAsterisks = false;
25
- const nonJsdocNodes = allComments.filter(comment => {
25
+ const nonJsdocNodes = /** @type {import('estree').Node[]} */allComments.filter(comment => {
26
26
  const commentText = sourceCode.getText(comment);
27
27
  let sliceIndex = 2;
28
28
  if (!commentRegexp.test(commentText)) {
@@ -37,9 +37,7 @@ var _default = (0, _iterateJsdoc.default)(({
37
37
  return true;
38
38
  }
39
39
  }
40
- const [{
41
- tags = {}
42
- } = {}] = (0, _commentParser.parse)(`${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`);
40
+ const tags = ((0, _commentParser.parse)(`${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`)[0] || {}).tags ?? [];
43
41
  return tags.length && !tags.some(({
44
42
  tag
45
43
  }) => {
@@ -50,7 +48,7 @@ var _default = (0, _iterateJsdoc.default)(({
50
48
  return;
51
49
  }
52
50
  for (const node of nonJsdocNodes) {
53
- const report = makeReport(context, node);
51
+ const report = /** @type {import('../iterateJsdoc.js').MakeReport} */makeReport(context, node);
54
52
 
55
53
  // eslint-disable-next-line no-loop-func
56
54
  const fix = /** @type {import('eslint').Rule.ReportFixer} */fixer => {
@@ -1 +1 @@
1
- {"version":3,"file":"noBadBlocks.js","names":["_commentParser","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","commentRegexp","extraAsteriskCommentRegexp","_default","iterateJsdoc","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","_extraAsteriskComment","multiline","exec","length","tags","commentParser","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","exports","module"],"sources":["../../src/rules/noBadBlocks.js"],"sourcesContent":["import {\n parse as commentParser,\n} from 'comment-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// Neither a single nor 3+ asterisks are valid jsdoc per\n// https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code\nconst commentRegexp = /^\\/\\*(?!\\*)/u;\nconst extraAsteriskCommentRegexp = /^\\/\\*{3,}/u;\n\nexport default iterateJsdoc(({\n context,\n sourceCode,\n allComments,\n makeReport,\n}) => {\n const [\n {\n ignore = [\n 'ts-check',\n 'ts-expect-error',\n 'ts-ignore',\n 'ts-nocheck',\n ],\n preventAllMultiAsteriskBlocks = false,\n } = {},\n ] = context.options;\n\n let extraAsterisks = false;\n const nonJsdocNodes = allComments.filter((comment) => {\n const commentText = sourceCode.getText(comment);\n let sliceIndex = 2;\n if (!commentRegexp.test(commentText)) {\n const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0];\n if (!multiline) {\n return false;\n }\n\n sliceIndex = multiline.length;\n extraAsterisks = true;\n if (preventAllMultiAsteriskBlocks) {\n return true;\n }\n }\n\n const [\n {\n tags = {},\n } = {},\n ] = commentParser(\n `${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`,\n );\n\n return tags.length && !tags.some(({\n tag,\n }) => {\n return ignore.includes(tag);\n });\n });\n\n if (!nonJsdocNodes.length) {\n return;\n }\n\n for (const node of nonJsdocNodes) {\n const report = makeReport(context, node);\n\n // eslint-disable-next-line no-loop-func\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n const text = sourceCode.getText(node);\n\n return fixer.replaceText(\n node,\n extraAsterisks ?\n text.replace(extraAsteriskCommentRegexp, '/**') :\n text.replace('/*', '/**'),\n );\n };\n\n report('Expected JSDoc-like comment to begin with two asterisks.', fix);\n }\n}, {\n checkFile: true,\n meta: {\n docs: {\n description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-bad-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n ignore: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n preventAllMultiAsteriskBlocks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"noBadBlocks.js","names":["_iterateJsdoc","_interopRequireDefault","require","_commentParser","obj","__esModule","default","commentRegexp","extraAsteriskCommentRegexp","_default","iterateJsdoc","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","_extraAsteriskComment","multiline","exec","length","tags","commentParser","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","exports","module"],"sources":["../../src/rules/noBadBlocks.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\nimport {\n parse as commentParser,\n} from 'comment-parser';\n\n// Neither a single nor 3+ asterisks are valid jsdoc per\n// https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code\nconst commentRegexp = /^\\/\\*(?!\\*)/u;\nconst extraAsteriskCommentRegexp = /^\\/\\*{3,}/u;\n\nexport default iterateJsdoc(({\n context,\n sourceCode,\n allComments,\n makeReport,\n}) => {\n const [\n {\n ignore = [\n 'ts-check',\n 'ts-expect-error',\n 'ts-ignore',\n 'ts-nocheck',\n ],\n preventAllMultiAsteriskBlocks = false,\n } = {},\n ] = context.options;\n\n let extraAsterisks = false;\n const nonJsdocNodes = /** @type {import('estree').Node[]} */ (\n allComments\n ).filter((comment) => {\n const commentText = sourceCode.getText(comment);\n let sliceIndex = 2;\n if (!commentRegexp.test(commentText)) {\n const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0];\n if (!multiline) {\n return false;\n }\n\n sliceIndex = multiline.length;\n extraAsterisks = true;\n if (preventAllMultiAsteriskBlocks) {\n return true;\n }\n }\n\n const tags = (commentParser(\n `${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`,\n )[0] || {}).tags ?? [];\n\n return tags.length && !tags.some(({\n tag,\n }) => {\n return ignore.includes(tag);\n });\n });\n\n if (!nonJsdocNodes.length) {\n return;\n }\n\n for (const node of nonJsdocNodes) {\n const report = /** @type {import('../iterateJsdoc.js').MakeReport} */ (\n makeReport\n )(context, node);\n\n // eslint-disable-next-line no-loop-func\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n const text = sourceCode.getText(node);\n\n return fixer.replaceText(\n node,\n extraAsterisks ?\n text.replace(extraAsteriskCommentRegexp, '/**') :\n text.replace('/*', '/**'),\n );\n };\n\n report('Expected JSDoc-like comment to begin with two asterisks.', fix);\n }\n}, {\n checkFile: true,\n meta: {\n docs: {\n description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-bad-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n ignore: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n preventAllMultiAsteriskBlocks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
@@ -36,6 +36,8 @@ var _default = (0, _iterateJsdoc.default)(({
36
36
  return [
37
37
  // Keep the starting line
38
38
  {
39
+ number: 0,
40
+ source: '',
39
41
  tokens: seedTokens({
40
42
  ...info,
41
43
  description: ''
@@ -1 +1 @@
1
- {"version":3,"file":"noBlankBlockDescriptions.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","anyWhitespaceLines","atLeastTwoLinesWhitespace","_default","iterateJsdoc","jsdoc","utils","description","descriptions","lastDescriptionLine","getDescription","regex","tags","length","test","reportJSDoc","line","setBlockDescription","info","seedTokens","tokens","iterateAllJsdocs","meta","docs","url","fixable","schema","type","exports","module"],"sources":["../../src/rules/noBlankBlockDescriptions.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst anyWhitespaceLines = /^\\s*$/u;\nconst atLeastTwoLinesWhitespace = /^[ \\t]*\\n[ \\t]*\\n\\s*$/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n}) => {\n const {\n description,\n descriptions,\n lastDescriptionLine,\n } = utils.getDescription();\n\n const regex = jsdoc.tags.length ?\n anyWhitespaceLines :\n atLeastTwoLinesWhitespace;\n\n if (descriptions.length && regex.test(description)) {\n if (jsdoc.tags.length) {\n utils.reportJSDoc(\n 'There should be no blank lines in block descriptions followed by tags.',\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription(() => {\n // Remove all lines\n return [];\n });\n },\n );\n } else {\n utils.reportJSDoc(\n 'There should be no extra blank lines in block descriptions not followed by tags.',\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens) => {\n return [\n // Keep the starting line\n {\n tokens: seedTokens({\n ...info,\n description: '',\n }),\n },\n ];\n });\n },\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Detects and removes extra lines of a blank block description',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-blank-block-descriptions',\n },\n fixable: 'whitespace',\n schema: [],\n type: 'layout',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C,MAAMG,kBAAkB,GAAG,QAAQ;AACnC,MAAMC,yBAAyB,GAAG,wBAAwB;AAAC,IAAAC,QAAA,GAE5C,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,WAAW;IACXC,YAAY;IACZC;EACF,CAAC,GAAGH,KAAK,CAACI,cAAc,CAAC,CAAC;EAE1B,MAAMC,KAAK,GAAGN,KAAK,CAACO,IAAI,CAACC,MAAM,GAC7BZ,kBAAkB,GAClBC,yBAAyB;EAE3B,IAAIM,YAAY,CAACK,MAAM,IAAIF,KAAK,CAACG,IAAI,CAACP,WAAW,CAAC,EAAE;IAClD,IAAIF,KAAK,CAACO,IAAI,CAACC,MAAM,EAAE;MACrBP,KAAK,CAACS,WAAW,CACf,wEAAwE,EACxE;QACEC,IAAI,EAAEP;MACR,CAAC,EACD,MAAM;QACJH,KAAK,CAACW,mBAAmB,CAAC,MAAM;UAC9B;UACA,OAAO,EAAE;QACX,CAAC,CAAC;MACJ,CACF,CAAC;IACH,CAAC,MAAM;MACLX,KAAK,CAACS,WAAW,CACf,kFAAkF,EAClF;QACEC,IAAI,EAAEP;MACR,CAAC,EACD,MAAM;QACJH,KAAK,CAACW,mBAAmB,CAAC,CAACC,IAAI,EAAEC,UAAU,KAAK;UAC9C,OAAO;UACL;UACA;YACEC,MAAM,EAAED,UAAU,CAAC;cACjB,GAAGD,IAAI;cACPX,WAAW,EAAE;YACf,CAAC;UACH,CAAC,CACF;QACH,CAAC,CAAC;MACJ,CACF,CAAC;IACH;EACF;AACF,CAAC,EAAE;EACDc,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJhB,WAAW,EAAE,8DAA8D;MAC3EiB,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,YAAY;IACrBC,MAAM,EAAE,EAAE;IACVC,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAC,OAAA,CAAA5B,OAAA,GAAAG,QAAA;AAAA0B,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAA5B,OAAA"}
1
+ {"version":3,"file":"noBlankBlockDescriptions.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","anyWhitespaceLines","atLeastTwoLinesWhitespace","_default","iterateJsdoc","jsdoc","utils","description","descriptions","lastDescriptionLine","getDescription","regex","tags","length","test","reportJSDoc","line","setBlockDescription","info","seedTokens","number","source","tokens","iterateAllJsdocs","meta","docs","url","fixable","schema","type","exports","module"],"sources":["../../src/rules/noBlankBlockDescriptions.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst anyWhitespaceLines = /^\\s*$/u;\nconst atLeastTwoLinesWhitespace = /^[ \\t]*\\n[ \\t]*\\n\\s*$/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n}) => {\n const {\n description,\n descriptions,\n lastDescriptionLine,\n } = utils.getDescription();\n\n const regex = jsdoc.tags.length ?\n anyWhitespaceLines :\n atLeastTwoLinesWhitespace;\n\n if (descriptions.length && regex.test(description)) {\n if (jsdoc.tags.length) {\n utils.reportJSDoc(\n 'There should be no blank lines in block descriptions followed by tags.',\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription(() => {\n // Remove all lines\n return [];\n });\n },\n );\n } else {\n utils.reportJSDoc(\n 'There should be no extra blank lines in block descriptions not followed by tags.',\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens) => {\n return [\n // Keep the starting line\n {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: '',\n }),\n },\n ];\n });\n },\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Detects and removes extra lines of a blank block description',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-blank-block-descriptions',\n },\n fixable: 'whitespace',\n schema: [],\n type: 'layout',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C,MAAMG,kBAAkB,GAAG,QAAQ;AACnC,MAAMC,yBAAyB,GAAG,wBAAwB;AAAC,IAAAC,QAAA,GAE5C,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,WAAW;IACXC,YAAY;IACZC;EACF,CAAC,GAAGH,KAAK,CAACI,cAAc,CAAC,CAAC;EAE1B,MAAMC,KAAK,GAAGN,KAAK,CAACO,IAAI,CAACC,MAAM,GAC7BZ,kBAAkB,GAClBC,yBAAyB;EAE3B,IAAIM,YAAY,CAACK,MAAM,IAAIF,KAAK,CAACG,IAAI,CAACP,WAAW,CAAC,EAAE;IAClD,IAAIF,KAAK,CAACO,IAAI,CAACC,MAAM,EAAE;MACrBP,KAAK,CAACS,WAAW,CACf,wEAAwE,EACxE;QACEC,IAAI,EAAEP;MACR,CAAC,EACD,MAAM;QACJH,KAAK,CAACW,mBAAmB,CAAC,MAAM;UAC9B;UACA,OAAO,EAAE;QACX,CAAC,CAAC;MACJ,CACF,CAAC;IACH,CAAC,MAAM;MACLX,KAAK,CAACS,WAAW,CACf,kFAAkF,EAClF;QACEC,IAAI,EAAEP;MACR,CAAC,EACD,MAAM;QACJH,KAAK,CAACW,mBAAmB,CAAC,CAACC,IAAI,EAAEC,UAAU,KAAK;UAC9C,OAAO;UACL;UACA;YACEC,MAAM,EAAE,CAAC;YACTC,MAAM,EAAE,EAAE;YACVC,MAAM,EAAEH,UAAU,CAAC;cACjB,GAAGD,IAAI;cACPX,WAAW,EAAE;YACf,CAAC;UACH,CAAC,CACF;QACH,CAAC,CAAC;MACJ,CACF,CAAC;IACH;EACF;AACF,CAAC,EAAE;EACDgB,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJlB,WAAW,EAAE,8DAA8D;MAC3EmB,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,YAAY;IACrBC,MAAM,EAAE,EAAE;IACVC,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAC,OAAA,CAAA9B,OAAA,GAAAG,QAAA;AAAA4B,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAA9B,OAAA"}