eslint-plugin-jsdoc 63.0.10 → 63.0.11

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 (173) hide show
  1. package/dist/WarnSettings.cjs +1 -8
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/alignTransform.cjs +6 -10
  4. package/dist/alignTransform.cjs.map +1 -1
  5. package/dist/buildForbidRuleDefinition.cjs +3 -10
  6. package/dist/buildForbidRuleDefinition.cjs.map +1 -1
  7. package/dist/buildRejectOrPreferRuleDefinition.cjs +7 -14
  8. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
  9. package/dist/defaultTagOrder.cjs +1 -8
  10. package/dist/defaultTagOrder.cjs.map +1 -1
  11. package/dist/exportParser.cjs +6 -14
  12. package/dist/exportParser.cjs.map +1 -1
  13. package/dist/generateDocs.cjs +36 -44
  14. package/dist/generateDocs.cjs.map +1 -1
  15. package/dist/generateOptions.cjs +15 -18
  16. package/dist/generateOptions.cjs.map +1 -1
  17. package/dist/generateRule.cjs +24 -24
  18. package/dist/generateRule.cjs.map +1 -1
  19. package/dist/generateRuleTypes.cjs +6 -9
  20. package/dist/generateRuleTypes.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.cjs +1 -8
  22. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  23. package/dist/getJsdocProcessorPlugin.cjs +20 -28
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/index-cjs.cjs +152 -159
  26. package/dist/index-cjs.cjs.map +1 -1
  27. package/dist/index-esm.cjs +16 -27
  28. package/dist/index-esm.cjs.map +1 -1
  29. package/dist/index.cjs +159 -172
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/iterateJsdoc.cjs +22 -32
  32. package/dist/iterateJsdoc.cjs.map +1 -1
  33. package/dist/jsdocUtils.cjs +18 -86
  34. package/dist/jsdocUtils.cjs.map +1 -1
  35. package/dist/rules/checkAccess.cjs +2 -10
  36. package/dist/rules/checkAccess.cjs.map +1 -1
  37. package/dist/rules/checkAlignment.cjs +2 -10
  38. package/dist/rules/checkAlignment.cjs.map +1 -1
  39. package/dist/rules/checkExamples.cjs +6 -15
  40. package/dist/rules/checkExamples.cjs.map +1 -1
  41. package/dist/rules/checkIndentation.cjs +2 -9
  42. package/dist/rules/checkIndentation.cjs.map +1 -1
  43. package/dist/rules/checkLineAlignment.cjs +6 -14
  44. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  45. package/dist/rules/checkParamNames.cjs +2 -9
  46. package/dist/rules/checkParamNames.cjs.map +1 -1
  47. package/dist/rules/checkPropertyNames.cjs +2 -9
  48. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  49. package/dist/rules/checkSyntax.cjs +2 -10
  50. package/dist/rules/checkSyntax.cjs.map +1 -1
  51. package/dist/rules/checkTagNames.cjs +4 -11
  52. package/dist/rules/checkTagNames.cjs.map +1 -1
  53. package/dist/rules/checkTemplateNames.cjs +12 -21
  54. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  55. package/dist/rules/checkTypes.cjs +4 -10
  56. package/dist/rules/checkTypes.cjs.map +1 -1
  57. package/dist/rules/checkValues.cjs +9 -17
  58. package/dist/rules/checkValues.cjs.map +1 -1
  59. package/dist/rules/convertToJsdocComments.cjs +13 -19
  60. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  61. package/dist/rules/emptyTags.cjs +2 -10
  62. package/dist/rules/emptyTags.cjs.map +1 -1
  63. package/dist/rules/escapeInlineTags.cjs +2 -10
  64. package/dist/rules/escapeInlineTags.cjs.map +1 -1
  65. package/dist/rules/implementsOnClasses.cjs +2 -10
  66. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  67. package/dist/rules/importsAsDependencies.cjs +12 -20
  68. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  69. package/dist/rules/informativeDocs.cjs +4 -12
  70. package/dist/rules/informativeDocs.cjs.map +1 -1
  71. package/dist/rules/linesBeforeBlock.cjs +2 -9
  72. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  73. package/dist/rules/matchDescription.cjs +2 -9
  74. package/dist/rules/matchDescription.cjs.map +1 -1
  75. package/dist/rules/matchName.cjs +2 -10
  76. package/dist/rules/matchName.cjs.map +1 -1
  77. package/dist/rules/multilineBlocks.cjs +2 -9
  78. package/dist/rules/multilineBlocks.cjs.map +1 -1
  79. package/dist/rules/noBadBlocks.cjs +4 -11
  80. package/dist/rules/noBadBlocks.cjs.map +1 -1
  81. package/dist/rules/noBlankBlockDescriptions.cjs +2 -10
  82. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  83. package/dist/rules/noBlankBlocks.cjs +2 -10
  84. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  85. package/dist/rules/noDefaults.cjs +2 -10
  86. package/dist/rules/noDefaults.cjs.map +1 -1
  87. package/dist/rules/noMissingSyntax.cjs +2 -9
  88. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  89. package/dist/rules/noMultiAsterisks.cjs +2 -10
  90. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  91. package/dist/rules/noRestrictedSyntax.cjs +2 -9
  92. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  93. package/dist/rules/noTypes.cjs +2 -9
  94. package/dist/rules/noTypes.cjs.map +1 -1
  95. package/dist/rules/noUndefinedTypes.cjs +13 -21
  96. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  97. package/dist/rules/preferImportTag.cjs +21 -28
  98. package/dist/rules/preferImportTag.cjs.map +1 -1
  99. package/dist/rules/requireAsteriskPrefix.cjs +2 -10
  100. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  101. package/dist/rules/requireDescription.cjs +2 -9
  102. package/dist/rules/requireDescription.cjs.map +1 -1
  103. package/dist/rules/requireDescriptionCompleteSentence.cjs +7 -15
  104. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  105. package/dist/rules/requireExample.cjs +2 -10
  106. package/dist/rules/requireExample.cjs.map +1 -1
  107. package/dist/rules/requireFileOverview.cjs +2 -10
  108. package/dist/rules/requireFileOverview.cjs.map +1 -1
  109. package/dist/rules/requireHyphenBeforeParamDescription.cjs +2 -10
  110. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  111. package/dist/rules/requireJsdoc.cjs +17 -25
  112. package/dist/rules/requireJsdoc.cjs.map +1 -1
  113. package/dist/rules/requireParam.cjs +2 -9
  114. package/dist/rules/requireParam.cjs.map +1 -1
  115. package/dist/rules/requireParamDescription.cjs +2 -10
  116. package/dist/rules/requireParamDescription.cjs.map +1 -1
  117. package/dist/rules/requireParamName.cjs +2 -10
  118. package/dist/rules/requireParamName.cjs.map +1 -1
  119. package/dist/rules/requireParamType.cjs +2 -10
  120. package/dist/rules/requireParamType.cjs.map +1 -1
  121. package/dist/rules/requireProperty.cjs +2 -10
  122. package/dist/rules/requireProperty.cjs.map +1 -1
  123. package/dist/rules/requirePropertyDescription.cjs +2 -10
  124. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  125. package/dist/rules/requirePropertyName.cjs +2 -10
  126. package/dist/rules/requirePropertyName.cjs.map +1 -1
  127. package/dist/rules/requirePropertyType.cjs +2 -10
  128. package/dist/rules/requirePropertyType.cjs.map +1 -1
  129. package/dist/rules/requireRejects.cjs +2 -9
  130. package/dist/rules/requireRejects.cjs.map +1 -1
  131. package/dist/rules/requireReturns.cjs +4 -11
  132. package/dist/rules/requireReturns.cjs.map +1 -1
  133. package/dist/rules/requireReturnsCheck.cjs +8 -15
  134. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  135. package/dist/rules/requireReturnsDescription.cjs +2 -10
  136. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  137. package/dist/rules/requireReturnsType.cjs +2 -10
  138. package/dist/rules/requireReturnsType.cjs.map +1 -1
  139. package/dist/rules/requireTags.cjs +2 -9
  140. package/dist/rules/requireTags.cjs.map +1 -1
  141. package/dist/rules/requireTemplate.cjs +5 -13
  142. package/dist/rules/requireTemplate.cjs.map +1 -1
  143. package/dist/rules/requireThrows.cjs +2 -9
  144. package/dist/rules/requireThrows.cjs.map +1 -1
  145. package/dist/rules/requireYields.cjs +2 -9
  146. package/dist/rules/requireYields.cjs.map +1 -1
  147. package/dist/rules/requireYieldsCheck.cjs +2 -9
  148. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  149. package/dist/rules/sortTags.cjs +4 -12
  150. package/dist/rules/sortTags.cjs.map +1 -1
  151. package/dist/rules/tagLines.cjs +2 -9
  152. package/dist/rules/tagLines.cjs.map +1 -1
  153. package/dist/rules/textEscaping.cjs +2 -9
  154. package/dist/rules/textEscaping.cjs.map +1 -1
  155. package/dist/rules/tsMethodSignatureStyle.cjs +10 -18
  156. package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
  157. package/dist/rules/tsNoEmptyObjectType.cjs +5 -13
  158. package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
  159. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +8 -16
  160. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
  161. package/dist/rules/tsPreferFunctionType.cjs +8 -16
  162. package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
  163. package/dist/rules/typeFormatting.cjs +9 -17
  164. package/dist/rules/typeFormatting.cjs.map +1 -1
  165. package/dist/rules/validTypes.cjs +10 -18
  166. package/dist/rules/validTypes.cjs.map +1 -1
  167. package/dist/tagNames.cjs +4 -9
  168. package/dist/tagNames.cjs.map +1 -1
  169. package/dist/utils/hasReturnValue.cjs +1 -8
  170. package/dist/utils/hasReturnValue.cjs.map +1 -1
  171. package/package.json +21 -21
  172. package/src/rules/checkTemplateNames.js +0 -1
  173. package/src/rules/requireJsdoc.js +0 -1
@@ -1,24 +1,17 @@
1
- "use strict";
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+ import { parse, traverse, tryParse } from '@es-joy/jsdoccomment';
3
+ import * as resolve from '@es-joy/resolve.exports';
4
+ import { readFileSync } from 'node:fs';
5
+ import { isBuiltin as isBuiltinModule } from 'node:module';
6
+ import { join } from 'node:path';
2
7
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- var _jsdoccomment = require("@es-joy/jsdoccomment");
9
- var resolve = _interopRequireWildcard(require("@es-joy/resolve.exports"));
10
- var _nodeFs = require("node:fs");
11
- var _nodeModule = require("node:module");
12
- var _nodePath = require("node:path");
13
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
8
  /**
16
9
  * @type {Set<string>|null}
17
10
  */
18
11
  let deps;
19
12
  const setDeps = function () {
20
13
  try {
21
- const pkg = JSON.parse((0, _nodeFs.readFileSync)((0, _nodePath.join)(process.cwd(), './package.json'), 'utf8'));
14
+ const pkg = JSON.parse(readFileSync(join(process.cwd(), './package.json'), 'utf8'));
22
15
  deps = new Set([...(pkg.dependencies ? /* c8 ignore next 2 */
23
16
  Object.keys(pkg.dependencies) : []), ...(pkg.devDependencies ? /* c8 ignore next 2 */
24
17
  Object.keys(pkg.devDependencies) : [])]);
@@ -33,7 +26,7 @@ const setDeps = function () {
33
26
  }
34
27
  };
35
28
  const moduleCheck = new Map();
36
- var _default = exports.default = (0, _iterateJsdoc.default)(({
29
+ export default iterateJsdoc(({
37
30
  jsdoc,
38
31
  settings,
39
32
  utils
@@ -52,13 +45,13 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
52
45
  for (const tag of jsdoc.tags) {
53
46
  let typeAst;
54
47
  try {
55
- typeAst = mode === 'permissive' ? (0, _jsdoccomment.tryParse)(tag.type) : (0, _jsdoccomment.parse)(tag.type, mode);
48
+ typeAst = mode === 'permissive' ? tryParse(tag.type) : parse(tag.type, mode);
56
49
  } catch {
57
50
  continue;
58
51
  }
59
52
 
60
53
  // eslint-disable-next-line no-loop-func -- Safe
61
- (0, _jsdoccomment.traverse)(typeAst, nde => {
54
+ traverse(typeAst, nde => {
62
55
  /* c8 ignore next 3 -- TS guard */
63
56
  if (deps === null) {
64
57
  return;
@@ -68,14 +61,14 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
68
61
  if (/^[.\/]/v.test(mod)) {
69
62
  return;
70
63
  }
71
- if ((0, _nodeModule.isBuiltin)(mod)) {
64
+ if (isBuiltinModule(mod)) {
72
65
  // mod = '@types/node';
73
66
  // moduleCheck.set(mod, !deps.has(mod));
74
67
  return;
75
68
  } else if (!moduleCheck.has(mod)) {
76
69
  let pkg;
77
70
  try {
78
- pkg = JSON.parse((0, _nodeFs.readFileSync)((0, _nodePath.join)(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'));
71
+ pkg = JSON.parse(readFileSync(join(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'));
79
72
  } catch {
80
73
  // Ignore
81
74
  }
@@ -100,5 +93,4 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
100
93
  type: 'suggestion'
101
94
  }
102
95
  });
103
- module.exports = exports.default;
104
96
  //# sourceMappingURL=importsAsDependencies.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"importsAsDependencies.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","resolve","_interopRequireWildcard","_nodeFs","_nodeModule","_nodePath","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","deps","setDeps","pkg","JSON","parse","readFileSync","join","process","cwd","Set","dependencies","keys","devDependencies","error","console","log","moduleCheck","Map","_default","exports","iterateJsdoc","jsdoc","settings","utils","undefined","mode","tag","tags","typeAst","tryParse","type","traverse","nde","mod","element","value","replace","test","isBuiltinModule","types","typings","reportJSDoc","iterateAllJsdocs","meta","docs","description","url","module"],"sources":["../../src/rules/importsAsDependencies.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport * as resolve from '@es-joy/resolve.exports';\nimport {\n readFileSync,\n} from 'node:fs';\nimport {\n isBuiltin as isBuiltinModule,\n} from 'node:module';\nimport {\n join,\n} from 'node:path';\n\n/**\n * @type {Set<string>|null}\n */\nlet deps;\n\nconst setDeps = function () {\n try {\n const pkg = JSON.parse(\n readFileSync(join(process.cwd(), './package.json'), 'utf8'),\n );\n deps = new Set([\n ...(pkg.dependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.dependencies) :\n []),\n ...(pkg.devDependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.devDependencies) :\n []),\n ]);\n /* c8 ignore next -- our package.json exists */\n } catch (error) {\n /* c8 ignore next -- our package.json exists */\n deps = null;\n /* c8 ignore next 4 -- our package.json exists */\n /* eslint-disable no-console -- Inform user */\n console.log(error);\n /* eslint-enable no-console -- Inform user */\n }\n};\n\nconst moduleCheck = new Map();\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n if (deps === undefined) {\n setDeps();\n }\n\n /* c8 ignore next 3 -- our package.json exists */\n if (deps === null) {\n return;\n }\n\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n let typeAst;\n try {\n typeAst = mode === 'permissive' ? tryParse(tag.type) : parse(tag.type, mode);\n } catch {\n continue;\n }\n\n // eslint-disable-next-line no-loop-func -- Safe\n traverse(typeAst, (nde) => {\n /* c8 ignore next 3 -- TS guard */\n if (deps === null) {\n return;\n }\n\n if (nde.type === 'JsdocTypeImport') {\n let mod = nde.element.value.replace(\n /^(@[^\\/]+\\/[^\\/]+|[^\\/]+).*$/v, '$1',\n );\n\n if ((/^[.\\/]/v).test(mod)) {\n return;\n }\n\n if (isBuiltinModule(mod)) {\n // mod = '@types/node';\n // moduleCheck.set(mod, !deps.has(mod));\n return;\n } else if (!moduleCheck.has(mod)) {\n let pkg;\n try {\n pkg = JSON.parse(\n readFileSync(join(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'),\n );\n } catch {\n // Ignore\n }\n\n if (!pkg || (!pkg.types && !pkg.typings && !resolve.types(pkg))) {\n mod = `@types/${mod}`;\n }\n\n moduleCheck.set(mod, !deps.has(mod));\n }\n\n if (moduleCheck.get(mod)) {\n utils.reportJSDoc(\n 'import points to package which is not found in dependencies',\n tag,\n );\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies`',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/imports-as-dependencies.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"importsAsDependencies.cjs","names":[],"sources":["../../src/rules/importsAsDependencies.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport * as resolve from '@es-joy/resolve.exports';\nimport {\n readFileSync,\n} from 'node:fs';\nimport {\n isBuiltin as isBuiltinModule,\n} from 'node:module';\nimport {\n join,\n} from 'node:path';\n\n/**\n * @type {Set<string>|null}\n */\nlet deps;\n\nconst setDeps = function () {\n try {\n const pkg = JSON.parse(\n readFileSync(join(process.cwd(), './package.json'), 'utf8'),\n );\n deps = new Set([\n ...(pkg.dependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.dependencies) :\n []),\n ...(pkg.devDependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.devDependencies) :\n []),\n ]);\n /* c8 ignore next -- our package.json exists */\n } catch (error) {\n /* c8 ignore next -- our package.json exists */\n deps = null;\n /* c8 ignore next 4 -- our package.json exists */\n /* eslint-disable no-console -- Inform user */\n console.log(error);\n /* eslint-enable no-console -- Inform user */\n }\n};\n\nconst moduleCheck = new Map();\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n if (deps === undefined) {\n setDeps();\n }\n\n /* c8 ignore next 3 -- our package.json exists */\n if (deps === null) {\n return;\n }\n\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n let typeAst;\n try {\n typeAst = mode === 'permissive' ? tryParse(tag.type) : parse(tag.type, mode);\n } catch {\n continue;\n }\n\n // eslint-disable-next-line no-loop-func -- Safe\n traverse(typeAst, (nde) => {\n /* c8 ignore next 3 -- TS guard */\n if (deps === null) {\n return;\n }\n\n if (nde.type === 'JsdocTypeImport') {\n let mod = nde.element.value.replace(\n /^(@[^\\/]+\\/[^\\/]+|[^\\/]+).*$/v, '$1',\n );\n\n if ((/^[.\\/]/v).test(mod)) {\n return;\n }\n\n if (isBuiltinModule(mod)) {\n // mod = '@types/node';\n // moduleCheck.set(mod, !deps.has(mod));\n return;\n } else if (!moduleCheck.has(mod)) {\n let pkg;\n try {\n pkg = JSON.parse(\n readFileSync(join(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'),\n );\n } catch {\n // Ignore\n }\n\n if (!pkg || (!pkg.types && !pkg.typings && !resolve.types(pkg))) {\n mod = `@types/${mod}`;\n }\n\n moduleCheck.set(mod, !deps.has(mod));\n }\n\n if (moduleCheck.get(mod)) {\n utils.reportJSDoc(\n 'import points to package which is not found in dependencies',\n tag,\n );\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies`',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/imports-as-dependencies.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB;AAC7C,SACE,KAAK,EACL,QAAQ,EACR,QAAQ,QACH,sBAAsB;AAC7B,OAAO,KAAK,OAAO,MAAM,yBAAyB;AAClD,SACE,YAAY,QACP,SAAS;AAChB,SACE,SAAS,IAAI,eAAe,QACvB,aAAa;AACpB,SACE,IAAI,QACC,WAAW;;AAElB;AACA;AACA;AACA,IAAI,IAAI;AAER,MAAM,OAAO,GAAG,YAAY;EAC1B,IAAI;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAC5D,CAAC;IACD,IAAI,GAAG,IAAI,GAAG,CAAC,CACb,IAAI,GAAG,CAAC,YAAY,GAClB;IACA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAC7B,EAAE,CAAC,EACL,IAAI,GAAG,CAAC,eAAe,GACrB;IACA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAChC,EAAE,CAAC,CACN,CAAC;IACJ;EACA,CAAC,CAAC,OAAO,KAAK,EAAE;IACd;IACA,IAAI,GAAG,IAAI;IACX;IACA;IACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAClB;EACF;AACF,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC;AAE7B,eAAe,YAAY,CAAC,CAAC;EAC3B,KAAK;EACL,QAAQ;EACR;AACF,CAAC,KAAK;EACJ,IAAI,IAAI,KAAK,SAAS,EAAE;IACtB,OAAO,CAAC,CAAC;EACX;;EAEA;EACA,IAAI,IAAI,KAAK,IAAI,EAAE;IACjB;EACF;EAEA,MAAM;IACJ;EACF,CAAC,GAAG,QAAQ;EAEZ,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;IAC5B,IAAI,OAAO;IACX,IAAI;MACF,OAAO,GAAG,IAAI,KAAK,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9E,CAAC,CAAC,MAAM;MACN;IACF;;IAEA;IACA,QAAQ,CAAC,OAAO,EAAG,GAAG,IAAK;MACzB;MACA,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB;MACF;MAEA,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE;QAClC,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CACjC,+BAA+B,EAAE,IACnC,CAAC;QAED,IAAK,SAAS,CAAE,IAAI,CAAC,GAAG,CAAC,EAAE;UACzB;QACF;QAEA,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;UACxB;UACA;UACA;QACF,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;UAChC,IAAI,GAAG;UACP,IAAI;YACF,GAAG,GAAG,IAAI,CAAC,KAAK,CACd,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,MAAM,CACjF,CAAC;UACH,CAAC,CAAC,MAAM;YACN;UAAA;UAGF,IAAI,CAAC,GAAG,IAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAE,EAAE;YAC/D,GAAG,GAAG,UAAU,GAAG,EAAE;UACvB;UAEA,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC;QAEA,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;UACxB,KAAK,CAAC,WAAW,CACf,6DAA6D,EAC7D,GACF,CAAC;QACH;MACF;IACF,CAAC,CAAC;EACJ;AACF,CAAC,EAAE;EACD,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,sHAAsH;MACnI,GAAG,EAAE;IACP,CAAC;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,12 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- var _areDocsInformative = require("are-docs-informative");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+ import { areDocsInformative } from 'are-docs-informative';
10
3
  const defaultAliases = {
11
4
  a: ['an', 'our']
12
5
  };
@@ -59,7 +52,7 @@ const getNamesFromNode = node => {
59
52
  return [];
60
53
  }
61
54
  };
62
- var _default = exports.default = (0, _iterateJsdoc.default)(({
55
+ export default iterateJsdoc(({
63
56
  context,
64
57
  jsdoc,
65
58
  node,
@@ -80,7 +73,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
80
73
  */
81
74
  const descriptionIsRedundant = (text, extraName = '') => {
82
75
  const textTrimmed = text.trim();
83
- return Boolean(textTrimmed) && !(0, _areDocsInformative.areDocsInformative)(textTrimmed, [extraName, nodeNames].filter(Boolean).join(' '), {
76
+ return Boolean(textTrimmed) && !areDocsInformative(textTrimmed, [extraName, nodeNames].filter(Boolean).join(' '), {
84
77
  aliases,
85
78
  uselessWords
86
79
  });
@@ -183,5 +176,4 @@ The default \`uselessWords\` option is:
183
176
  type: 'suggestion'
184
177
  }
185
178
  });
186
- module.exports = exports.default;
187
179
  //# sourceMappingURL=informativeDocs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"informativeDocs.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_areDocsInformative","e","__esModule","default","defaultAliases","a","defaultUselessWords","getNamesFromNode","node","type","parent","key","id","declaration","name","declarations","init","filter","Boolean","_default","exports","iterateJsdoc","context","jsdoc","report","utils","aliases","excludedTags","uselessWords","options","nodeNames","descriptionIsRedundant","text","extraName","textTrimmed","trim","areDocsInformative","join","description","lastDescriptionLine","getDescription","descriptionReported","tag","tags","includes","reportJSDoc","line","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","patternProperties","items","module"],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\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/**\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\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSMethodSignature':\n case 'TSModuleDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */\n (node).id,\n );\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ExportNamedDeclaration} */\n (node).declaration,\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\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const /** @type {{aliases: {[key: string]: string[]}, excludedTags: string[], uselessWords: string[]}} */ {\n aliases = defaultAliases,\n excludedTags = [],\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 (excludedTags.includes(tag.tag)) {\n continue;\n }\n\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/blob/main/docs/rules/informative-docs.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n description: `The \\`aliases\\` option allows indicating words as synonyms (aliases) of each other.\n\nFor example, with \\`{ aliases: { emoji: [\"smiley\", \"winkey\"] } }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** A smiley/winkey. */\nlet emoji;\n\\`\\`\\`\n\nThe default \\`aliases\\` option is:\n\n\\`\\`\\`json\n{\n \"a\": [\"an\", \"our\"]\n}\n\\`\\`\\``,\n patternProperties: {\n '.*': {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n },\n excludedTags: {\n description: `Tags that should not be checked for valid contents.\n\nFor example, with \\`{ excludedTags: [\"category\"] }\\`, the following comment would not be considered uninformative:\n\n\\`\\`\\`js\n/** @category Types */\nfunction computeTypes(node) {\n // ...\n}\n\\`\\`\\`\n\nNo tags are excluded by default.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n description: `Words that are ignored when searching for one that adds meaning.\n\nFor example, with \\`{ uselessWords: [\"our\"] }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** Our text. */\nlet text;\n\\`\\`\\`\n\nThe default \\`uselessWords\\` option is:\n\n\\`\\`\\`json\n[\"a\", \"an\", \"i\", \"in\", \"of\", \"s\", \"the\"]\n\\`\\`\\``,\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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","ignoreList":[]}
1
+ {"version":3,"file":"informativeDocs.cjs","names":[],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\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/**\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\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSMethodSignature':\n case 'TSModuleDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */\n (node).id,\n );\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ExportNamedDeclaration} */\n (node).declaration,\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\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const /** @type {{aliases: {[key: string]: string[]}, excludedTags: string[], uselessWords: string[]}} */ {\n aliases = defaultAliases,\n excludedTags = [],\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 (excludedTags.includes(tag.tag)) {\n continue;\n }\n\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/blob/main/docs/rules/informative-docs.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n description: `The \\`aliases\\` option allows indicating words as synonyms (aliases) of each other.\n\nFor example, with \\`{ aliases: { emoji: [\"smiley\", \"winkey\"] } }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** A smiley/winkey. */\nlet emoji;\n\\`\\`\\`\n\nThe default \\`aliases\\` option is:\n\n\\`\\`\\`json\n{\n \"a\": [\"an\", \"our\"]\n}\n\\`\\`\\``,\n patternProperties: {\n '.*': {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n },\n excludedTags: {\n description: `Tags that should not be checked for valid contents.\n\nFor example, with \\`{ excludedTags: [\"category\"] }\\`, the following comment would not be considered uninformative:\n\n\\`\\`\\`js\n/** @category Types */\nfunction computeTypes(node) {\n // ...\n}\n\\`\\`\\`\n\nNo tags are excluded by default.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n description: `Words that are ignored when searching for one that adds meaning.\n\nFor example, with \\`{ uselessWords: [\"our\"] }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** Our text. */\nlet text;\n\\`\\`\\`\n\nThe default \\`uselessWords\\` option is:\n\n\\`\\`\\`json\n[\"a\", \"an\", \"i\", \"in\", \"of\", \"s\", \"the\"]\n\\`\\`\\``,\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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,WAAW,EACT,uEAAuE;MACzE,GAAG,EAAE;IACP,CAAC;IACD,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,OAAO,EAAE;UACP,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,iBAAiB,EAAE;YACjB,IAAI,EAAE;cACJ,KAAK,EAAE;gBACL,IAAI,EAAE;cACR,CAAC;cACD,IAAI,EAAE;YACR;UACF;QACF,CAAC;QACD,YAAY,EAAE;UACZ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;UACrB,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,YAAY,EAAE;UACZ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,18 +1,12 @@
1
- "use strict";
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
3
  /**
10
4
  * Punctuators that begin a logical group should not require a line before it skipped. Specifically
11
5
  * `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a
12
6
  * declaration (like a variable or a type alias).
13
7
  */
14
8
  const startPunctuators = new Set(['(', '=', '[', '{']);
15
- var _default = exports.default = (0, _iterateJsdoc.default)(({
9
+ export default iterateJsdoc(({
16
10
  context,
17
11
  jsdocNode,
18
12
  report,
@@ -116,5 +110,4 @@ Defaults to \`true\`.`,
116
110
  type: 'suggestion'
117
111
  }
118
112
  });
119
- module.exports = exports.default;
120
113
  //# sourceMappingURL=linesBeforeBlock.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"linesBeforeBlock.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","startPunctuators","Set","_default","exports","iterateJsdoc","context","jsdocNode","report","sourceCode","utils","checkBlockStarts","excludedTags","ignoreSameLine","ignoreSingleLines","lines","options","hasATag","tokensBefore","getTokensBefore","includeComments","tokenBefore","at","type","has","value","loc","end","line","start","startLine","sameLine","fix","fixer","indent","spaceDiff","column","match","slice","tokenPrior","startColumn","pop","repeat","insertTextAfter","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/linesBeforeBlock.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * Punctuators that begin a logical group should not require a line before it skipped. Specifically\n * `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a\n * declaration (like a variable or a type alias).\n */\nconst startPunctuators = new Set([\n '(', '=', '[', '{',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const {\n checkBlockStarts,\n excludedTags = [\n 'type',\n ],\n ignoreSameLine = true,\n ignoreSingleLines = true,\n lines = 1,\n } = context.options[0] || {};\n\n if (utils.hasATag(excludedTags)) {\n return;\n }\n\n const tokensBefore = sourceCode.getTokensBefore(jsdocNode, {\n includeComments: true,\n });\n const tokenBefore = tokensBefore.at(-1);\n if (\n !tokenBefore || (\n tokenBefore.type === 'Punctuator' &&\n !checkBlockStarts &&\n startPunctuators.has(tokenBefore.value)\n )\n ) {\n return;\n }\n\n if (tokenBefore.loc?.end?.line + lines >=\n /** @type {number} */\n (jsdocNode.loc?.start?.line)\n ) {\n const startLine = jsdocNode.loc?.start?.line;\n const sameLine = tokenBefore.loc?.end?.line === startLine;\n\n if (sameLine && ignoreSameLine) {\n return;\n }\n\n if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) {\n return;\n }\n\n /** @type {import('eslint').Rule.ReportFixer} */\n const fix = (fixer) => {\n let indent = '';\n if (sameLine) {\n const spaceDiff = /** @type {number} */ (jsdocNode.loc?.start?.column) -\n /** @type {number} */ (tokenBefore.loc?.end?.column);\n // @ts-expect-error Should be a comment\n indent = /** @type {import('estree').Comment} */ (\n jsdocNode\n ).value.match(/^\\*\\n([\\t ]*) \\*/v)?.[1]?.slice(spaceDiff);\n if (!indent) {\n /** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */\n let tokenPrior = tokenBefore;\n let startColumn;\n while (tokenPrior && tokenPrior?.loc?.start?.line === startLine) {\n startColumn = tokenPrior.loc?.start?.column;\n tokenPrior = tokensBefore.pop();\n }\n\n indent = ' '.repeat(\n /* c8 ignore next */\n /** @type {number} */ (startColumn ? startColumn - 1 : 0),\n );\n }\n }\n\n return fixer.insertTextAfter(\n /** @type {import('eslint').AST.Token} */\n (tokenBefore),\n '\\n'.repeat(lines) +\n (sameLine ? '\\n' + indent : ''),\n );\n };\n\n report(`Required ${lines} line(s) before JSDoc block`, fix);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces minimum number of newlines before JSDoc comment blocks',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/lines-before-block.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkBlockStarts: {\n description: `Whether to additionally check the start of blocks, such as classes or functions.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n excludedTags: {\n description: `An array of tags whose presence in the JSDoc block will prevent the\napplication of the rule. Defaults to \\`['type']\\` (i.e., if \\`@type\\` is present,\nlines before the block will not be added).`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ignoreSameLine: {\n description: `This option excludes cases where the JSDoc block occurs on the same line as a\npreceding code or comment. Defaults to \\`true\\`.`,\n type: 'boolean',\n },\n ignoreSingleLines: {\n description: `This option excludes cases where the JSDoc block is only one line long.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n lines: {\n description: 'The minimum number of lines to require. Defaults to 1.',\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"linesBeforeBlock.cjs","names":[],"sources":["../../src/rules/linesBeforeBlock.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * Punctuators that begin a logical group should not require a line before it skipped. Specifically\n * `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a\n * declaration (like a variable or a type alias).\n */\nconst startPunctuators = new Set([\n '(', '=', '[', '{',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const {\n checkBlockStarts,\n excludedTags = [\n 'type',\n ],\n ignoreSameLine = true,\n ignoreSingleLines = true,\n lines = 1,\n } = context.options[0] || {};\n\n if (utils.hasATag(excludedTags)) {\n return;\n }\n\n const tokensBefore = sourceCode.getTokensBefore(jsdocNode, {\n includeComments: true,\n });\n const tokenBefore = tokensBefore.at(-1);\n if (\n !tokenBefore || (\n tokenBefore.type === 'Punctuator' &&\n !checkBlockStarts &&\n startPunctuators.has(tokenBefore.value)\n )\n ) {\n return;\n }\n\n if (tokenBefore.loc?.end?.line + lines >=\n /** @type {number} */\n (jsdocNode.loc?.start?.line)\n ) {\n const startLine = jsdocNode.loc?.start?.line;\n const sameLine = tokenBefore.loc?.end?.line === startLine;\n\n if (sameLine && ignoreSameLine) {\n return;\n }\n\n if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) {\n return;\n }\n\n /** @type {import('eslint').Rule.ReportFixer} */\n const fix = (fixer) => {\n let indent = '';\n if (sameLine) {\n const spaceDiff = /** @type {number} */ (jsdocNode.loc?.start?.column) -\n /** @type {number} */ (tokenBefore.loc?.end?.column);\n // @ts-expect-error Should be a comment\n indent = /** @type {import('estree').Comment} */ (\n jsdocNode\n ).value.match(/^\\*\\n([\\t ]*) \\*/v)?.[1]?.slice(spaceDiff);\n if (!indent) {\n /** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */\n let tokenPrior = tokenBefore;\n let startColumn;\n while (tokenPrior && tokenPrior?.loc?.start?.line === startLine) {\n startColumn = tokenPrior.loc?.start?.column;\n tokenPrior = tokensBefore.pop();\n }\n\n indent = ' '.repeat(\n /* c8 ignore next */\n /** @type {number} */ (startColumn ? startColumn - 1 : 0),\n );\n }\n }\n\n return fixer.insertTextAfter(\n /** @type {import('eslint').AST.Token} */\n (tokenBefore),\n '\\n'.repeat(lines) +\n (sameLine ? '\\n' + indent : ''),\n );\n };\n\n report(`Required ${lines} line(s) before JSDoc block`, fix);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces minimum number of newlines before JSDoc comment blocks',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/lines-before-block.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkBlockStarts: {\n description: `Whether to additionally check the start of blocks, such as classes or functions.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n excludedTags: {\n description: `An array of tags whose presence in the JSDoc block will prevent the\napplication of the rule. Defaults to \\`['type']\\` (i.e., if \\`@type\\` is present,\nlines before the block will not be added).`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ignoreSameLine: {\n description: `This option excludes cases where the JSDoc block occurs on the same line as a\npreceding code or comment. Defaults to \\`true\\`.`,\n type: 'boolean',\n },\n ignoreSingleLines: {\n description: `This option excludes cases where the JSDoc block is only one line long.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n lines: {\n description: 'The minimum number of lines to require. Defaults to 1.',\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,5 @@
1
- "use strict";
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
3
  // If supporting Node >= 10, we could loosen the default to this for the
10
4
  // initial letter: \\p{Upper}
11
5
  const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$';
@@ -18,7 +12,7 @@ const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s
18
12
  const stringOrDefault = (value, userDefault) => {
19
13
  return typeof value === 'string' ? value : userDefault || matchDescriptionDefault;
20
14
  };
21
- var _default = exports.default = (0, _iterateJsdoc.default)(({
15
+ export default iterateJsdoc(({
22
16
  context,
23
17
  jsdoc,
24
18
  report,
@@ -352,5 +346,4 @@ is \`xyz\`).`,
352
346
  type: 'suggestion'
353
347
  }
354
348
  });
355
- module.exports = exports.default;
356
349
  //# sourceMappingURL=matchDescription.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchDescription.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","matchDescriptionDefault","stringOrDefault","value","userDefault","_default","exports","iterateJsdoc","context","jsdoc","report","utils","mainDescription","matchDescription","message","nonemptyTags","tags","options","validateDescription","desc","tag","mainDescriptionMatch","errorMessage","match","Object","hasOwn","tagValue","tagName","regex","getRegexFromString","test","line","source","number","description","getDescription","hasNoTag","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","keys","length","hasOptionTag","Boolean","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","replace","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum","module"],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\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]*[.?!`\\\\p{RGI_Emoji}]\\\\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 context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n nonemptyTags = true,\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 /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasNoTag = (tagName) => {\n return !tags[tagName];\n };\n\n for (const tag of [\n 'description',\n 'summary',\n 'file',\n 'classdesc',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasNoTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n }\n\n if (nonemptyTags) {\n for (const tag of [\n 'copyright',\n 'example',\n 'see',\n 'todo',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n\n if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) {\n report(\n 'JSDoc description must not be empty.',\n null,\n matchingJsdocTag,\n );\n }\n });\n }\n }\n\n if (!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 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(/^[\\- ]*/v, '')\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/blob/main/docs/rules/match-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n description: `Set this to an array of strings representing the AST context (or an object with\noptional \\`context\\` and \\`comment\\` properties) where you wish the rule to be applied (e.g.,\n\\`ClassDeclaration\\` for ES6 classes).\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want the rule to apply to any\nJSDoc block throughout your files.\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\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 description: `If you wish to override the main block description without changing the\ndefault \\`match-description\\` (which can cascade to the \\`tags\\` with \\`true\\`),\nyou may use \\`mainDescription\\`:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {\n mainDescription: '[A-Z].*\\\\\\\\.',\n tags: {\n param: true,\n returns: true\n }\n }]\n}\n\\`\\`\\`\n\nThere is no need to add \\`mainDescription: true\\`, as by default, the main\nblock description (and only the main block description) is linted, though you\nmay disable checking it by setting it to \\`false\\`.\n\nYou may also provide an object with \\`message\\`:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {\n mainDescription: {\n message: 'Capitalize first word of JSDoc block descriptions',\n match: '[A-Z].*\\\\\\\\.'\n },\n tags: {\n param: true,\n returns: true\n }\n }]\n}\n\\`\\`\\``,\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 description: `You can supply your own expression to override the default, passing a\n\\`matchDescription\\` string on the options object.\n\nDefaults to using (only) the \\`v\\` flag, so\nto add your own flags, encapsulate your expression as a string, but like a\nliteral, e.g., \\`/[A-Z].*\\\\./vi\\`.\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\\\\\\\.'}]\n}\n\\`\\`\\``,\n format: 'regex',\n type: 'string',\n },\n message: {\n description: `You may provide a custom default message by using the following format:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {\n message: 'The default description should begin with a capital letter.'\n }]\n}\n\\`\\`\\`\n\nThis can be overridden per tag or for the main block description by setting\n\\`message\\` within \\`tags\\` or \\`mainDescription\\`, respectively.`,\n type: 'string',\n },\n nonemptyTags: {\n description: `If not set to \\`false\\`, will enforce that the following tags have at least\nsome content:\n\n- \\`@copyright\\`\n- \\`@example\\`\n- \\`@see\\`\n- \\`@todo\\`\n\nIf you supply your own tag description for any of the above tags in \\`tags\\`,\nyour description will take precedence.`,\n type: 'boolean',\n },\n tags: {\n description: `If you want different regular expressions to apply to tags, you may use\nthe \\`tags\\` option object:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {tags: {\n param: '\\\\\\\\- [A-Z].*\\\\\\\\.',\n returns: '[A-Z].*\\\\\\\\.'\n }}]\n}\n\\`\\`\\`\n\nIn place of a string, you can also add \\`true\\` to indicate that a particular\ntag should be linted with the \\`matchDescription\\` value (or the default).\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {tags: {\n param: true,\n returns: true\n }}]\n}\n\\`\\`\\`\n\nAlternatively, you may supply an object with a \\`message\\` property to indicate\nthe error message for that tag.\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {tags: {\n param: {message: 'Begin with a hyphen', match: '\\\\\\\\- [A-Z].*\\\\\\\\.'},\n returns: {message: 'Capitalize for returns (the default)', match: true}\n }}]\n}\n\\`\\`\\`\n\nThe tags \\`@param\\`/\\`@arg\\`/\\`@argument\\` and \\`@property\\`/\\`@prop\\` will be properly\nparsed to ensure that the matched \"description\" text includes only the text\nafter the name.\n\nAll other tags will treat the text following the tag name, a space, and\nan optional curly-bracketed type expression (and another space) as part of\nits \"description\" (e.g., for \\`@returns {someType} some description\\`, the\ndescription is \\`some description\\` while for \\`@some-tag xyz\\`, the description\nis \\`xyz\\`).`,\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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tB,WAAW,EAAE,wDAAwD;MACrEuB,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACR3B,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;UAClD4B,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEC,IAAI,EAAE;YACR,CAAC,EACD;cACEL,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVK,OAAO,EAAE;kBACPD,IAAI,EAAE;gBACR,CAAC;gBACDxD,OAAO,EAAE;kBACPwD,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDpD,eAAe,EAAE;UACfsB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACKgC,KAAK,EAAE,CACL;YACEC,MAAM,EAAE,OAAO;YACfH,IAAI,EAAE;UACR,CAAC,EACD;YACEA,IAAI,EAAE;UACR,CAAC,EACD;YACEL,oBAAoB,EAAE,KAAK;YAC3BC,UAAU,EAAE;cACVrC,KAAK,EAAE;gBACL2C,KAAK,EAAE,CACL;kBACEC,MAAM,EAAE,OAAO;kBACfH,IAAI,EAAE;gBACR,CAAC,EACD;kBACEA,IAAI,EAAE;gBACR,CAAC;cAEL,CAAC;cACDlD,OAAO,EAAE;gBACPkD,IAAI,EAAE;cACR;YACF,CAAC;YACDA,IAAI,EAAE;UACR,CAAC;QAEL,CAAC;QACDnD,gBAAgB,EAAE;UAChBqB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACKiC,MAAM,EAAE,OAAO;UACfH,IAAI,EAAE;QACR,CAAC;QACDlD,OAAO,EAAE;UACPoB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;UACtD8B,IAAI,EAAE;QACR,CAAC;QACDjD,YAAY,EAAE;UACZmB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;UAC3B8B,IAAI,EAAE;QACR,CAAC;QACDhD,IAAI,EAAE;UACJkB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;UACDkC,iBAAiB,EAAE;YACjB,IAAI,EAAE;cACJF,KAAK,EAAE,CACL;gBACEC,MAAM,EAAE,OAAO;gBACfH,IAAI,EAAE;cACR,CAAC,EACD;gBACEK,IAAI,EAAE,CACJ,IAAI,CACL;gBACDL,IAAI,EAAE;cACR,CAAC,EACD;gBACEL,oBAAoB,EAAE,KAAK;gBAC3BC,UAAU,EAAE;kBACVrC,KAAK,EAAE;oBACL2C,KAAK,EAAE,CACL;sBACEC,MAAM,EAAE,OAAO;sBACfH,IAAI,EAAE;oBACR,CAAC,EACD;sBACEK,IAAI,EAAE,CACJ,IAAI,CACL;sBACDL,IAAI,EAAE;oBACR,CAAC;kBAEL,CAAC;kBACDlD,OAAO,EAAE;oBACPkD,IAAI,EAAE;kBACR;gBACF,CAAC;gBACDA,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAM,MAAA,CAAAhE,OAAA,GAAAA,OAAA,CAAAN,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"matchDescription.cjs","names":[],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\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]*[.?!`\\\\p{RGI_Emoji}]\\\\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 context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n nonemptyTags = true,\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 /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasNoTag = (tagName) => {\n return !tags[tagName];\n };\n\n for (const tag of [\n 'description',\n 'summary',\n 'file',\n 'classdesc',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasNoTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n }\n\n if (nonemptyTags) {\n for (const tag of [\n 'copyright',\n 'example',\n 'see',\n 'todo',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n\n if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) {\n report(\n 'JSDoc description must not be empty.',\n null,\n matchingJsdocTag,\n );\n }\n });\n }\n }\n\n if (!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 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(/^[\\- ]*/v, '')\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/blob/main/docs/rules/match-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n description: `Set this to an array of strings representing the AST context (or an object with\noptional \\`context\\` and \\`comment\\` properties) where you wish the rule to be applied (e.g.,\n\\`ClassDeclaration\\` for ES6 classes).\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want the rule to apply to any\nJSDoc block throughout your files.\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\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 description: `If you wish to override the main block description without changing the\ndefault \\`match-description\\` (which can cascade to the \\`tags\\` with \\`true\\`),\nyou may use \\`mainDescription\\`:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {\n mainDescription: '[A-Z].*\\\\\\\\.',\n tags: {\n param: true,\n returns: true\n }\n }]\n}\n\\`\\`\\`\n\nThere is no need to add \\`mainDescription: true\\`, as by default, the main\nblock description (and only the main block description) is linted, though you\nmay disable checking it by setting it to \\`false\\`.\n\nYou may also provide an object with \\`message\\`:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {\n mainDescription: {\n message: 'Capitalize first word of JSDoc block descriptions',\n match: '[A-Z].*\\\\\\\\.'\n },\n tags: {\n param: true,\n returns: true\n }\n }]\n}\n\\`\\`\\``,\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 description: `You can supply your own expression to override the default, passing a\n\\`matchDescription\\` string on the options object.\n\nDefaults to using (only) the \\`v\\` flag, so\nto add your own flags, encapsulate your expression as a string, but like a\nliteral, e.g., \\`/[A-Z].*\\\\./vi\\`.\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\\\\\\\.'}]\n}\n\\`\\`\\``,\n format: 'regex',\n type: 'string',\n },\n message: {\n description: `You may provide a custom default message by using the following format:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {\n message: 'The default description should begin with a capital letter.'\n }]\n}\n\\`\\`\\`\n\nThis can be overridden per tag or for the main block description by setting\n\\`message\\` within \\`tags\\` or \\`mainDescription\\`, respectively.`,\n type: 'string',\n },\n nonemptyTags: {\n description: `If not set to \\`false\\`, will enforce that the following tags have at least\nsome content:\n\n- \\`@copyright\\`\n- \\`@example\\`\n- \\`@see\\`\n- \\`@todo\\`\n\nIf you supply your own tag description for any of the above tags in \\`tags\\`,\nyour description will take precedence.`,\n type: 'boolean',\n },\n tags: {\n description: `If you want different regular expressions to apply to tags, you may use\nthe \\`tags\\` option object:\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {tags: {\n param: '\\\\\\\\- [A-Z].*\\\\\\\\.',\n returns: '[A-Z].*\\\\\\\\.'\n }}]\n}\n\\`\\`\\`\n\nIn place of a string, you can also add \\`true\\` to indicate that a particular\ntag should be linted with the \\`matchDescription\\` value (or the default).\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {tags: {\n param: true,\n returns: true\n }}]\n}\n\\`\\`\\`\n\nAlternatively, you may supply an object with a \\`message\\` property to indicate\nthe error message for that tag.\n\n\\`\\`\\`js\n{\n 'jsdoc/match-description': ['error', {tags: {\n param: {message: 'Begin with a hyphen', match: '\\\\\\\\- [A-Z].*\\\\\\\\.'},\n returns: {message: 'Capitalize for returns (the default)', match: true}\n }}]\n}\n\\`\\`\\`\n\nThe tags \\`@param\\`/\\`@arg\\`/\\`@argument\\` and \\`@property\\`/\\`@prop\\` will be properly\nparsed to ensure that the matched \"description\" text includes only the text\nafter the name.\n\nAll other tags will treat the text following the tag name, a space, and\nan optional curly-bracketed type expression (and another space) as part of\nits \"description\" (e.g., for \\`@returns {someType} some description\\`, the\ndescription is \\`some description\\` while for \\`@some-tag xyz\\`, the description\nis \\`xyz\\`).`,\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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R;cACF,CAAC;cACD,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,eAAe,EAAE;UACf,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE,CACL;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE;UACR,CAAC,EACD;YACE,IAAI,EAAE;UACR,CAAC,EACD;YACE,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;cACV,KAAK,EAAE;gBACL,KAAK,EAAE,CACL;kBACE,MAAM,EAAE,OAAO;kBACf,IAAI,EAAE;gBACR,CAAC,EACD;kBACE,IAAI,EAAE;gBACR,CAAC;cAEL,CAAC;cACD,OAAO,EAAE;gBACP,IAAI,EAAE;cACR;YACF,CAAC;YACD,IAAI,EAAE;UACR,CAAC;QAEL,CAAC;QACD,gBAAgB,EAAE;UAChB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,MAAM,EAAE,OAAO;UACf,IAAI,EAAE;QACR,CAAC;QACD,OAAO,EAAE;UACP,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;UACtD,IAAI,EAAE;QACR,CAAC;QACD,YAAY,EAAE;UACZ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;UAC3B,IAAI,EAAE;QACR,CAAC;QACD,IAAI,EAAE;UACJ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;UACD,iBAAiB,EAAE;YACjB,IAAI,EAAE;cACJ,KAAK,EAAE,CACL;gBACE,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE;cACR,CAAC,EACD;gBACE,IAAI,EAAE,CACJ,IAAI,CACL;gBACD,IAAI,EAAE;cACR,CAAC,EACD;gBACE,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;kBACV,KAAK,EAAE;oBACL,KAAK,EAAE,CACL;sBACE,MAAM,EAAE,OAAO;sBACf,IAAI,EAAE;oBACR,CAAC,EACD;sBACE,IAAI,EAAE,CACJ,IAAI,CACL;sBACD,IAAI,EAAE;oBACR,CAAC;kBAEL,CAAC;kBACD,OAAO,EAAE;oBACP,IAAI,EAAE;kBACR;gBACF,CAAC;gBACD,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,12 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- var _default = exports.default = (0, _iterateJsdoc.default)(({
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+ export default iterateJsdoc(({
10
3
  context,
11
4
  info: {
12
5
  lastIndex
@@ -156,5 +149,4 @@ will replace the matched \`disallowName\` text.`,
156
149
  type: 'suggestion'
157
150
  }
158
151
  });
159
- module.exports = exports.default;
160
152
  //# sourceMappingURL=matchName.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchName.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","info","lastIndex","jsdoc","report","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","tagName","name","replace","allowed","test","disallowed","hasRegex","fixer","src","source","tokens","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","comment","required","module"],"sources":["../../src/rules/matchName.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n info: {\n lastIndex,\n },\n jsdoc,\n report,\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 tagName = tag.name.replace(/^\\[/v, '').replace(/(=.*)?\\]$/v, '');\n const allowed = !allowNameRegex || allowNameRegex.test(tagName);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tagName);\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 \"${tagName}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tagName}\".`;\n } else {\n message = `Prohibited context for \"${tagName}\".`;\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: tagName,\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/blob/main/docs/rules/match-name.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n match: {\n description: `\\`match\\` is a required option containing an array of objects which determine\nthe conditions whereby a name is reported as being problematic.\n\nThese objects can have any combination of the following groups of optional\nproperties, all of which act to confine one another.\n\nNote that \\`comment\\`, even if targeting a specific tag, is used to match the\nwhole block. So if a \\`comment\\` finds its specific tag, it may still apply\nfixes found by the likes of \\`disallowName\\` even when a different tag has the\ndisallowed name. An alternative is to ensure that \\`comment\\` finds the specific\ntag of the desired tag and/or name and no \\`disallowName\\` (or \\`allowName\\`) is\nsupplied. In such a case, only one error will be reported, but no fixer will\nbe applied, however.`,\n items: {\n additionalProperties: false,\n properties: {\n allowName: {\n description: `Indicates which names are allowed for the given tag (or \\`*\\`).\nAccepts a string regular expression (optionally wrapped between two\n\\`/\\` delimiters followed by optional flags) used to match the name.`,\n type: 'string',\n },\n comment: {\n description: 'As with `context` but AST for the JSDoc block comment and types.',\n type: 'string',\n },\n context: {\n description: `AST to confine the allowing or disallowing to JSDoc blocks\nassociated with a particular context. See the\n[\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\n type: 'string',\n },\n disallowName: {\n description: 'As with `allowName` but indicates names that are not allowed.',\n type: 'string',\n },\n message: {\n description: 'An optional custom message to use when there is a match.',\n type: 'string',\n },\n replacement: {\n description: `If \\`disallowName\\` is supplied and this value is present, it\nwill replace the matched \\`disallowName\\` text.`,\n type: 'string',\n },\n tags: {\n description: `This array should include tag names or \\`*\\` to indicate the\n match will apply for all tags (except as confined by any context\n properties). If \\`*\\` is not used, then these rules will only apply to\n the specified tags. If \\`tags\\` is omitted, then \\`*\\` is assumed.`,\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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","ignoreList":[]}
1
+ {"version":3,"file":"matchName.cjs","names":[],"sources":["../../src/rules/matchName.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n info: {\n lastIndex,\n },\n jsdoc,\n report,\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 tagName = tag.name.replace(/^\\[/v, '').replace(/(=.*)?\\]$/v, '');\n const allowed = !allowNameRegex || allowNameRegex.test(tagName);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tagName);\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 \"${tagName}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tagName}\".`;\n } else {\n message = `Prohibited context for \"${tagName}\".`;\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: tagName,\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/blob/main/docs/rules/match-name.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n match: {\n description: `\\`match\\` is a required option containing an array of objects which determine\nthe conditions whereby a name is reported as being problematic.\n\nThese objects can have any combination of the following groups of optional\nproperties, all of which act to confine one another.\n\nNote that \\`comment\\`, even if targeting a specific tag, is used to match the\nwhole block. So if a \\`comment\\` finds its specific tag, it may still apply\nfixes found by the likes of \\`disallowName\\` even when a different tag has the\ndisallowed name. An alternative is to ensure that \\`comment\\` finds the specific\ntag of the desired tag and/or name and no \\`disallowName\\` (or \\`allowName\\`) is\nsupplied. In such a case, only one error will be reported, but no fixer will\nbe applied, however.`,\n items: {\n additionalProperties: false,\n properties: {\n allowName: {\n description: `Indicates which names are allowed for the given tag (or \\`*\\`).\nAccepts a string regular expression (optionally wrapped between two\n\\`/\\` delimiters followed by optional flags) used to match the name.`,\n type: 'string',\n },\n comment: {\n description: 'As with `context` but AST for the JSDoc block comment and types.',\n type: 'string',\n },\n context: {\n description: `AST to confine the allowing or disallowing to JSDoc blocks\nassociated with a particular context. See the\n[\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\n type: 'string',\n },\n disallowName: {\n description: 'As with `allowName` but indicates names that are not allowed.',\n type: 'string',\n },\n message: {\n description: 'An optional custom message to use when there is a match.',\n type: 'string',\n },\n replacement: {\n description: `If \\`disallowName\\` is supplied and this value is present, it\nwill replace the matched \\`disallowName\\` text.`,\n type: 'string',\n },\n tags: {\n description: `This array should include tag names or \\`*\\` to indicate the\n match will apply for all tags (except as confined by any context\n properties). If \\`*\\` is not used, then these rules will only apply to\n the specified tags. If \\`tags\\` is omitted, then \\`*\\` is assumed.`,\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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","ignoreList":[]}
@@ -1,11 +1,5 @@
1
- "use strict";
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
3
  /**
10
4
  * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc
11
5
  * @param {import('../iterateJsdoc.js').Utils} utils
@@ -121,7 +115,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) =>
121
115
  }
122
116
  return false;
123
117
  };
124
- var _default = exports.default = (0, _iterateJsdoc.default)(({
118
+ export default iterateJsdoc(({
125
119
  context,
126
120
  jsdoc,
127
121
  utils
@@ -427,5 +421,4 @@ Defaults to \`['lends', 'type']\`.`,
427
421
  type: 'suggestion'
428
422
  }
429
423
  });
430
- module.exports = exports.default;
431
424
  //# sourceMappingURL=multilineBlocks.cjs.map