eslint-plugin-jsdoc 44.2.2 → 44.2.4

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 (117) hide show
  1. package/dist/alignTransform.js +86 -4
  2. package/dist/alignTransform.js.map +1 -1
  3. package/dist/exportParser.js +134 -4
  4. package/dist/exportParser.js.map +1 -1
  5. package/dist/getDefaultTagStructureForMode.js +71 -62
  6. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  7. package/dist/index.js +7 -5
  8. package/dist/index.js.map +1 -1
  9. package/dist/iterateJsdoc.js +1081 -111
  10. package/dist/iterateJsdoc.js.map +1 -1
  11. package/dist/jsdocUtils.js +381 -132
  12. package/dist/jsdocUtils.js.map +1 -1
  13. package/dist/rules/checkAlignment.js +6 -0
  14. package/dist/rules/checkAlignment.js.map +1 -1
  15. package/dist/rules/checkExamples.js +70 -6
  16. package/dist/rules/checkExamples.js.map +1 -1
  17. package/dist/rules/checkIndentation.js +11 -1
  18. package/dist/rules/checkIndentation.js.map +1 -1
  19. package/dist/rules/checkLineAlignment.js +69 -5
  20. package/dist/rules/checkLineAlignment.js.map +1 -1
  21. package/dist/rules/checkParamNames.js +12 -7
  22. package/dist/rules/checkParamNames.js.map +1 -1
  23. package/dist/rules/checkPropertyNames.js +13 -7
  24. package/dist/rules/checkPropertyNames.js.map +1 -1
  25. package/dist/rules/checkTagNames.js +45 -5
  26. package/dist/rules/checkTagNames.js.map +1 -1
  27. package/dist/rules/checkTypes.js +97 -36
  28. package/dist/rules/checkTypes.js.map +1 -1
  29. package/dist/rules/checkValues.js +6 -6
  30. package/dist/rules/checkValues.js.map +1 -1
  31. package/dist/rules/emptyTags.js +8 -1
  32. package/dist/rules/emptyTags.js.map +1 -1
  33. package/dist/rules/informativeDocs.js +26 -7
  34. package/dist/rules/informativeDocs.js.map +1 -1
  35. package/dist/rules/matchDescription.js +19 -2
  36. package/dist/rules/matchDescription.js.map +1 -1
  37. package/dist/rules/matchName.js +2 -2
  38. package/dist/rules/matchName.js.map +1 -1
  39. package/dist/rules/multilineBlocks.js +12 -1
  40. package/dist/rules/multilineBlocks.js.map +1 -1
  41. package/dist/rules/noBadBlocks.js +4 -6
  42. package/dist/rules/noBadBlocks.js.map +1 -1
  43. package/dist/rules/noBlankBlockDescriptions.js +2 -0
  44. package/dist/rules/noBlankBlockDescriptions.js.map +1 -1
  45. package/dist/rules/noMissingSyntax.js +58 -15
  46. package/dist/rules/noMissingSyntax.js.map +1 -1
  47. package/dist/rules/noMultiAsterisks.js +1 -6
  48. package/dist/rules/noMultiAsterisks.js.map +1 -1
  49. package/dist/rules/noRestrictedSyntax.js +17 -4
  50. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  51. package/dist/rules/noTypes.js +3 -0
  52. package/dist/rules/noTypes.js.map +1 -1
  53. package/dist/rules/noUndefinedTypes.js +61 -20
  54. package/dist/rules/noUndefinedTypes.js.map +1 -1
  55. package/dist/rules/requireAsteriskPrefix.js +20 -0
  56. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  57. package/dist/rules/requireDescription.js +6 -2
  58. package/dist/rules/requireDescription.js.map +1 -1
  59. package/dist/rules/requireDescriptionCompleteSentence.js +73 -10
  60. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  61. package/dist/rules/requireFileOverview.js +9 -4
  62. package/dist/rules/requireFileOverview.js.map +1 -1
  63. package/dist/rules/requireHyphenBeforeParamDescription.js +23 -6
  64. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  65. package/dist/rules/requireJsdoc.js +148 -30
  66. package/dist/rules/requireJsdoc.js.map +1 -1
  67. package/dist/rules/requireParam.js +46 -2
  68. package/dist/rules/requireParam.js.map +1 -1
  69. package/dist/rules/requireProperty.js +1 -1
  70. package/dist/rules/requireProperty.js.map +1 -1
  71. package/dist/rules/requireReturns.js +2 -2
  72. package/dist/rules/requireReturns.js.map +1 -1
  73. package/dist/rules/requireReturnsCheck.js +9 -2
  74. package/dist/rules/requireReturnsCheck.js.map +1 -1
  75. package/dist/rules/requireThrows.js +2 -2
  76. package/dist/rules/requireThrows.js.map +1 -1
  77. package/dist/rules/requireYields.js +9 -2
  78. package/dist/rules/requireYields.js.map +1 -1
  79. package/dist/rules/requireYieldsCheck.js +19 -5
  80. package/dist/rules/requireYieldsCheck.js.map +1 -1
  81. package/dist/rules/sortTags.js +67 -9
  82. package/dist/rules/sortTags.js.map +1 -1
  83. package/dist/rules/tagLines.js +22 -3
  84. package/dist/rules/tagLines.js.map +1 -1
  85. package/dist/rules/textEscaping.js +16 -2
  86. package/dist/rules/textEscaping.js.map +1 -1
  87. package/dist/rules/validTypes.js +25 -8
  88. package/dist/rules/validTypes.js.map +1 -1
  89. package/dist/tagNames.js +27 -0
  90. package/dist/tagNames.js.map +1 -1
  91. package/dist/utils/hasReturnValue.js +87 -42
  92. package/dist/utils/hasReturnValue.js.map +1 -1
  93. package/docs/rules/check-tag-names.md +15 -0
  94. package/docs/rules/no-missing-syntax.md +6 -0
  95. package/docs/rules/no-undefined-types.md +18 -0
  96. package/docs/rules/require-description-complete-sentence.md +525 -289
  97. package/docs/rules/require-description.md +289 -525
  98. package/docs/rules/require-file-overview.md +7 -0
  99. package/docs/rules/require-jsdoc.md +1 -1
  100. package/docs/rules/require-param-description.md +116 -1694
  101. package/docs/rules/require-param-name.md +58 -133
  102. package/docs/rules/require-param-type.md +119 -55
  103. package/docs/rules/require-param.md +1700 -111
  104. package/docs/rules/require-property-description.md +39 -79
  105. package/docs/rules/require-property-name.md +21 -30
  106. package/docs/rules/require-property-type.md +21 -21
  107. package/docs/rules/require-property.md +82 -33
  108. package/docs/rules/require-returns-check.md +636 -747
  109. package/docs/rules/require-returns-description.md +61 -933
  110. package/docs/rules/require-returns-type.md +42 -79
  111. package/docs/rules/require-returns.md +1081 -61
  112. package/docs/rules/require-yields-check.md +238 -517
  113. package/docs/rules/require-yields.md +517 -238
  114. package/docs/rules/valid-types.md +1 -1
  115. package/docs/settings.md +1 -1
  116. package/package.json +13 -5
  117. package/tsconfig.json +5 -2
@@ -6,14 +6,17 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _jsdoccomment = require("@es-joy/jsdoccomment");
8
8
  var _iterateJsdoc = _interopRequireWildcard(require("../iterateJsdoc"));
9
- var _jsdocUtils = _interopRequireDefault(require("../jsdocUtils"));
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
10
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
11
  const extraTypes = ['null', 'undefined', 'void', 'string', 'boolean', 'object', 'function', 'symbol', 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', 'Array', 'Object', 'RegExp', 'Date', 'Function'];
14
12
  const typescriptGlobals = [
15
13
  // https://www.typescriptlang.org/docs/handbook/utility-types.html
16
14
  'Partial', 'Required', 'Readonly', 'Record', 'Pick', 'Omit', 'Exclude', 'Extract', 'NonNullable', 'Parameters', 'ConstructorParameters', 'ReturnType', 'InstanceType', 'ThisParameterType', 'OmitThisParameter', 'ThisType', 'Uppercase', 'Lowercase', 'Capitalize', 'Uncapitalize'];
15
+
16
+ /**
17
+ * @param {string|false|undefined} [str]
18
+ * @returns {undefined|string|false}
19
+ */
17
20
  const stripPseudoTypes = str => {
18
21
  return str && str.replace(/(?:\.|<>|\.<>|\[\])$/u, '');
19
22
  };
@@ -29,14 +32,25 @@ var _default = (0, _iterateJsdoc.default)(({
29
32
  const {
30
33
  scopeManager
31
34
  } = sourceCode;
32
- const {
33
- globalScope
34
- } = scopeManager;
35
- const {
35
+
36
+ // When is this ever `null`?
37
+ const globalScope = /** @type {import('eslint').Scope.Scope} */
38
+ scopeManager.globalScope;
39
+ const
40
+ /**
41
+ * @type {{
42
+ * definedTypes: string[],
43
+ * disableReporting: boolean,
44
+ * markVariablesAsUsed: boolean
45
+ * }}
46
+ */
47
+ {
36
48
  definedTypes = [],
37
49
  disableReporting = false,
38
50
  markVariablesAsUsed = true
39
51
  } = context.options[0] || {};
52
+
53
+ /** @type {(string|undefined)[]} */
40
54
  let definedPreferredTypes = [];
41
55
  const {
42
56
  preferredTypes,
@@ -44,7 +58,7 @@ var _default = (0, _iterateJsdoc.default)(({
44
58
  mode
45
59
  } = settings;
46
60
  if (Object.keys(preferredTypes).length) {
47
- definedPreferredTypes = Object.values(preferredTypes).map(preferredType => {
61
+ definedPreferredTypes = /** @type {string[]} */Object.values(preferredTypes).map(preferredType => {
48
62
  if (typeof preferredType === 'string') {
49
63
  // May become an empty string but will be filtered out below
50
64
  return stripPseudoTypes(preferredType);
@@ -60,7 +74,7 @@ var _default = (0, _iterateJsdoc.default)(({
60
74
  return preferredType;
61
75
  });
62
76
  }
63
- const typedefDeclarations = context.getAllComments().filter(comment => {
77
+ const typedefDeclarations = sourceCode.getAllComments().filter(comment => {
64
78
  return /^\*\s/u.test(comment.value);
65
79
  }).map(commentNode => {
66
80
  return (0, _iterateJsdoc.parseComment)(commentNode, '');
@@ -81,13 +95,18 @@ var _default = (0, _iterateJsdoc.default)(({
81
95
  ancestorNodes.push(currentNode);
82
96
  currentNode = currentNode.parent;
83
97
  }
98
+
99
+ /**
100
+ * @param {import('eslint').Rule.Node} ancestorNode
101
+ * @returns {import('comment-parser').Spec[]}
102
+ */
84
103
  const getTemplateTags = function (ancestorNode) {
85
104
  const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, ancestorNode, settings);
86
105
  if (!commentNode) {
87
106
  return [];
88
107
  }
89
108
  const jsdoc = (0, _iterateJsdoc.parseComment)(commentNode, '');
90
- return _jsdocUtils.default.filterTags(jsdoc.tags, tag => {
109
+ return jsdoc.tags.filter(tag => {
91
110
  return tag.tag === 'template';
92
111
  });
93
112
  };
@@ -96,7 +115,7 @@ var _default = (0, _iterateJsdoc.default)(({
96
115
  // we look to present tags instead
97
116
  const templateTags = ancestorNodes.length ? ancestorNodes.flatMap(ancestorNode => {
98
117
  return getTemplateTags(ancestorNode);
99
- }) : utils.getPresentTags('template');
118
+ }) : utils.getPresentTags(['template']);
100
119
  const closureGenericTypes = templateTags.flatMap(tag => {
101
120
  return utils.parseClosureTemplateTag(tag);
102
121
  });
@@ -119,13 +138,34 @@ var _default = (0, _iterateJsdoc.default)(({
119
138
  name
120
139
  }) => {
121
140
  return name;
122
- }) : []).concat(extraTypes).concat(typedefDeclarations).concat(definedTypes).concat(definedPreferredTypes).concat(settings.mode === 'jsdoc' ? [] : [...(settings.mode === 'typescript' ? typescriptGlobals : []), ...closureGenericTypes]));
141
+ }) : []).concat(extraTypes).concat(typedefDeclarations).concat(definedTypes).concat( /** @type {string[]} */definedPreferredTypes).concat(settings.mode === 'jsdoc' ? [] : [...(settings.mode === 'typescript' ? typescriptGlobals : []), ...closureGenericTypes]));
142
+
143
+ /**
144
+ * @typedef {{
145
+ * parsedType: import('jsdoc-type-pratt-parser').RootResult;
146
+ * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
147
+ * line?: import('../iterateJsdoc.js').Integer
148
+ * }
149
+ * }} TypeAndTagInfo
150
+ */
151
+
152
+ /**
153
+ * @param {string} propertyName
154
+ * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
155
+ * name?: string,
156
+ * type?: string,
157
+ * line?: import('../iterateJsdoc.js').Integer
158
+ * })|import('comment-parser').Spec & {
159
+ * namepathOrURL?: string
160
+ * }
161
+ * ) => undefined|TypeAndTagInfo}
162
+ */
123
163
  const tagToParsedType = propertyName => {
124
164
  return tag => {
125
165
  try {
126
- const potentialType = tag[propertyName];
166
+ const potentialType = tag[/** @type {"type"|"name"|"namepathOrURL"} */propertyName];
127
167
  return {
128
- parsedType: mode === 'permissive' ? (0, _jsdoccomment.tryParse)(potentialType) : (0, _jsdoccomment.parse)(potentialType, mode),
168
+ parsedType: mode === 'permissive' ? (0, _jsdoccomment.tryParse)( /** @type {string} */potentialType) : (0, _jsdoccomment.parse)( /** @type {string} */potentialType, mode),
129
169
  tag
130
170
  };
131
171
  } catch {
@@ -143,12 +183,12 @@ var _default = (0, _iterateJsdoc.default)(({
143
183
  }) => {
144
184
  return utils.isNamepathReferencingTag(tag);
145
185
  }).map(tagToParsedType('name'));
146
- const namepathOrUrlReferencingTags = utils.filterTags(({
186
+ const namepathOrUrlReferencingTags = utils.filterAllTags(({
147
187
  tag
148
188
  }) => {
149
189
  return utils.isNamepathOrUrlReferencingTag(tag);
150
- }, true).map(tagToParsedType('namepathOrURL'));
151
- const tagsWithTypes = [...typeTags, ...namepathReferencingTags, ...namepathOrUrlReferencingTags].filter(result => {
190
+ }).map(tagToParsedType('namepathOrURL'));
191
+ const tagsWithTypes = /** @type {TypeAndTagInfo[]} */[...typeTags, ...namepathReferencingTags, ...namepathOrUrlReferencingTags].filter(result => {
152
192
  // Remove types which failed to parse
153
193
  return result;
154
194
  });
@@ -156,10 +196,11 @@ var _default = (0, _iterateJsdoc.default)(({
156
196
  tag,
157
197
  parsedType
158
198
  } of tagsWithTypes) {
159
- (0, _jsdoccomment.traverse)(parsedType, ({
160
- type,
161
- value
162
- }) => {
199
+ (0, _jsdoccomment.traverse)(parsedType, nde => {
200
+ const {
201
+ type,
202
+ value
203
+ } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */nde;
163
204
  if (type === 'JsdocTypeName') {
164
205
  var _structuredTags$tag$t;
165
206
  const structuredTypes = (_structuredTags$tag$t = structuredTags[tag.tag]) === null || _structuredTags$tag$t === void 0 ? void 0 : _structuredTags$tag$t.type;
@@ -1 +1 @@
1
- {"version":3,"file":"noUndefinedTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireWildcard","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","iterateJsdoc","context","node","report","settings","sourceCode","utils","_globalScope$childSco","_globalScope$childSco2","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","preferredTypes","structuredTags","mode","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","parseComment","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","_currentNode","parent","push","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","isNamepathOrUrlReferencingTag","tagsWithTypes","result","traverse","_structuredTags$tag$t","structuredTypes","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags('template');\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[propertyName];\n return {\n parsedType: mode === 'permissive' ? tryParseType(potentialType) : parseType(potentialType, mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }, true).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = [\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n ].filter((result) => {\n // Remove types which failed to parse\n return result;\n });\n\n for (const {\n tag,\n parsedType,\n } of tagsWithTypes) {\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n if (!disableReporting) {\n report(`The type '${value}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"noUndefinedTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","iterateJsdoc","context","node","report","settings","sourceCode","utils","_globalScope$childSco","_globalScope$childSco2","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","preferredTypes","structuredTags","mode","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","parseComment","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","_currentNode","parent","push","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","result","traverse","nde","_structuredTags$tag$t","structuredTypes","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n }));\n }\n\n const typedefDeclarations = sourceCode.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n ].filter((result) => {\n // Remove types which failed to parse\n return result;\n }));\n\n for (const {\n tag,\n parsedType,\n } of tagsWithTypes) {\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n if (!disableReporting) {\n report(`The type '${value}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -20,6 +20,8 @@ var _default = (0, _iterateJsdoc.default)(({
20
20
  } = jsdoc;
21
21
  const always = defaultRequireValue === 'always';
22
22
  const never = defaultRequireValue === 'never';
23
+
24
+ /** @type {string} */
23
25
  let currentTag;
24
26
  source.some(({
25
27
  number,
@@ -32,10 +34,19 @@ var _default = (0, _iterateJsdoc.default)(({
32
34
  end,
33
35
  description
34
36
  } = tokens;
37
+
38
+ /**
39
+ * @returns {void}
40
+ */
35
41
  const neverFix = () => {
36
42
  tokens.delimiter = '';
37
43
  tokens.postDelimiter = '';
38
44
  };
45
+
46
+ /**
47
+ * @param {string} checkValue
48
+ * @returns {boolean}
49
+ */
39
50
  const checkNever = checkValue => {
40
51
  var _tagMap$always, _tagMap$never;
41
52
  if (delimiter && delimiter !== '/**' && (never && !((_tagMap$always = tagMap.always) !== null && _tagMap$always !== void 0 && _tagMap$always.includes(checkValue)) || (_tagMap$never = tagMap.never) !== null && _tagMap$never !== void 0 && _tagMap$never.includes(checkValue))) {
@@ -47,6 +58,10 @@ var _default = (0, _iterateJsdoc.default)(({
47
58
  }
48
59
  return false;
49
60
  };
61
+
62
+ /**
63
+ * @returns {void}
64
+ */
50
65
  const alwaysFix = () => {
51
66
  if (!tokens.start) {
52
67
  tokens.start = indent + ' ';
@@ -54,6 +69,11 @@ var _default = (0, _iterateJsdoc.default)(({
54
69
  tokens.delimiter = '*';
55
70
  tokens.postDelimiter = tag || description ? ' ' : '';
56
71
  };
72
+
73
+ /**
74
+ * @param {string} checkValue
75
+ * @returns {boolean}
76
+ */
57
77
  const checkAlways = checkValue => {
58
78
  var _tagMap$never2, _tagMap$always2;
59
79
  if (!delimiter && (always && !((_tagMap$never2 = tagMap.never) !== null && _tagMap$never2 !== void 0 && _tagMap$never2.includes(checkValue)) || (_tagMap$always2 = tagMap.always) !== null && _tagMap$always2 !== void 0 && _tagMap$always2.includes(checkValue))) {
@@ -1 +1 @@
1
- {"version":3,"file":"requireAsteriskPrefix.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","indent","defaultRequireValue","tags","tagMap","options","source","always","never","currentTag","some","number","tokens","_tagMap$any2","delimiter","tag","end","description","neverFix","postDelimiter","checkNever","checkValue","_tagMap$always","_tagMap$never","includes","reportJSDoc","column","line","alwaysFix","start","checkAlways","_tagMap$never2","_tagMap$always2","slice","_tagMap$any","any","iterateAllJsdocs","meta","fixable","schema","enum","type","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/requireAsteriskPrefix.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n indent,\n}) => {\n const [\n defaultRequireValue = 'always',\n {\n tags: tagMap = {},\n } = {},\n ] = context.options;\n\n const {\n source,\n } = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n let currentTag;\n source.some(({\n number,\n tokens,\n }) => {\n const {\n delimiter,\n tag,\n end,\n description,\n } = tokens;\n\n const neverFix = () => {\n tokens.delimiter = '';\n tokens.postDelimiter = '';\n };\n\n const checkNever = (checkValue) => {\n if (delimiter && delimiter !== '/**' && (\n never && !tagMap.always?.includes(checkValue) ||\n tagMap.never?.includes(checkValue)\n )) {\n utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n column: 0,\n line: number,\n }, neverFix);\n\n return true;\n }\n\n return false;\n };\n\n const alwaysFix = () => {\n if (!tokens.start) {\n tokens.start = indent + ' ';\n }\n\n tokens.delimiter = '*';\n tokens.postDelimiter = tag || description ? ' ' : '';\n };\n\n const checkAlways = (checkValue) => {\n if (\n !delimiter && (\n always && !tagMap.never?.includes(checkValue) ||\n tagMap.always?.includes(checkValue)\n )\n ) {\n utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n column: 0,\n line: number,\n }, alwaysFix);\n\n return true;\n }\n\n return false;\n };\n\n if (tag) {\n // Remove at sign\n currentTag = tag.slice(1);\n }\n\n if (\n // If this is the end but has a tag, the delimiter will also be\n // populated and will be safely ignored later\n end && !tag\n ) {\n return false;\n }\n\n if (!currentTag) {\n if (tagMap.any?.includes('*description')) {\n return false;\n }\n\n if (checkNever('*description')) {\n return true;\n }\n\n if (checkAlways('*description')) {\n return true;\n }\n\n return false;\n }\n\n if (tagMap.any?.includes(currentTag)) {\n return false;\n }\n\n if (checkNever(currentTag)) {\n return true;\n }\n\n if (checkAlways(currentTag)) {\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n properties: {\n always: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n any: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n never: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"requireAsteriskPrefix.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","indent","defaultRequireValue","tags","tagMap","options","source","always","never","currentTag","some","number","tokens","_tagMap$any2","delimiter","tag","end","description","neverFix","postDelimiter","checkNever","checkValue","_tagMap$always","_tagMap$never","includes","reportJSDoc","column","line","alwaysFix","start","checkAlways","_tagMap$never2","_tagMap$always2","slice","_tagMap$any","any","iterateAllJsdocs","meta","fixable","schema","enum","type","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/requireAsteriskPrefix.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n indent,\n}) => {\n const [\n defaultRequireValue = 'always',\n {\n tags: tagMap = {},\n } = {},\n ] = context.options;\n\n const {\n source,\n } = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n /** @type {string} */\n let currentTag;\n source.some(({\n number,\n tokens,\n }) => {\n const {\n delimiter,\n tag,\n end,\n description,\n } = tokens;\n\n /**\n * @returns {void}\n */\n const neverFix = () => {\n tokens.delimiter = '';\n tokens.postDelimiter = '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkNever = (checkValue) => {\n if (delimiter && delimiter !== '/**' && (\n never && !tagMap.always?.includes(checkValue) ||\n tagMap.never?.includes(checkValue)\n )) {\n utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n column: 0,\n line: number,\n }, neverFix);\n\n return true;\n }\n\n return false;\n };\n\n /**\n * @returns {void}\n */\n const alwaysFix = () => {\n if (!tokens.start) {\n tokens.start = indent + ' ';\n }\n\n tokens.delimiter = '*';\n tokens.postDelimiter = tag || description ? ' ' : '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkAlways = (checkValue) => {\n if (\n !delimiter && (\n always && !tagMap.never?.includes(checkValue) ||\n tagMap.always?.includes(checkValue)\n )\n ) {\n utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n column: 0,\n line: number,\n }, alwaysFix);\n\n return true;\n }\n\n return false;\n };\n\n if (tag) {\n // Remove at sign\n currentTag = tag.slice(1);\n }\n\n if (\n // If this is the end but has a tag, the delimiter will also be\n // populated and will be safely ignored later\n end && !tag\n ) {\n return false;\n }\n\n if (!currentTag) {\n if (tagMap.any?.includes('*description')) {\n return false;\n }\n\n if (checkNever('*description')) {\n return true;\n }\n\n if (checkAlways('*description')) {\n return true;\n }\n\n return false;\n }\n\n if (tagMap.any?.includes(currentTag)) {\n return false;\n }\n\n if (checkNever(currentTag)) {\n return true;\n }\n\n if (checkAlways(currentTag)) {\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n properties: {\n always: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n any: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n never: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
8
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ /**
10
+ * @param {string} description
11
+ * @returns {import('../iterateJsdoc.js').Integer}
12
+ */
9
13
  const checkDescription = description => {
10
14
  return description.trim().split('\n').filter(Boolean).length;
11
15
  };
@@ -32,9 +36,9 @@ var _default = (0, _iterateJsdoc.default)(({
32
36
  if (!targetTagName) {
33
37
  return;
34
38
  }
35
- const isBlocked = typeof targetTagName === 'object' && targetTagName.blocked;
39
+ const isBlocked = typeof targetTagName === 'object' && 'blocked' in targetTagName && targetTagName.blocked;
36
40
  if (isBlocked) {
37
- targetTagName = targetTagName.tagName;
41
+ targetTagName = /** @type {{blocked: true; tagName: string;}} */targetTagName.tagName;
38
42
  }
39
43
  if (descriptionStyle !== 'tag') {
40
44
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"requireDescription.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","checkDescription","description","trim","split","filter","Boolean","length","_default","iterateJsdoc","jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","getDescription","descTags","getPresentTags","tag","functionExamples","tags","example","name","getTagDescription","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","type","checkGetters","checkSetters","contexts","items","anyOf","comment","enum","exemptedBy","exports","module"],"sources":["../../src/rules/requireDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst checkDescription = (description) => {\n return description\n .trim()\n .split('\\n')\n .filter(Boolean)\n .length;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n descriptionStyle = 'body',\n } = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n\n const isBlocked = typeof targetTagName === 'object' && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = targetTagName.tagName;\n }\n\n if (descriptionStyle !== 'tag') {\n const {\n description,\n } = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags([\n 'desc', 'description',\n ]);\n if (descTags.length) {\n const [\n {\n tag: tagName,\n },\n ] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n for (const example of functionExamples) {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n type: 'boolean',\n },\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 descriptionStyle: {\n enum: [\n 'body', 'tag', 'any',\n ],\n type: 'string',\n },\n exemptedBy: {\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":"requireDescription.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","checkDescription","description","trim","split","filter","Boolean","length","_default","iterateJsdoc","jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","getDescription","descTags","getPresentTags","tag","functionExamples","tags","example","name","getTagDescription","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","type","checkGetters","checkSetters","contexts","items","anyOf","comment","enum","exemptedBy","exports","module"],"sources":["../../src/rules/requireDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} description\n * @returns {import('../iterateJsdoc.js').Integer}\n */\nconst checkDescription = (description) => {\n return description\n .trim()\n .split('\\n')\n .filter(Boolean)\n .length;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n descriptionStyle = 'body',\n } = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n\n const isBlocked = typeof targetTagName === 'object' && 'blocked' in targetTagName && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = /** @type {{blocked: true; tagName: string;}} */ (\n targetTagName\n ).tagName;\n }\n\n if (descriptionStyle !== 'tag') {\n const {\n description,\n } = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags([\n 'desc', 'description',\n ]);\n if (descTags.length) {\n const [\n {\n tag: tagName,\n },\n ] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n for (const example of functionExamples) {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n type: 'boolean',\n },\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 descriptionStyle: {\n enum: [\n 'body', 'tag', 'any',\n ],\n type: 'string',\n },\n exemptedBy: {\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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"}
@@ -12,9 +12,20 @@ const otherDescriptiveTags = new Set([
12
12
  // sensitive text, and the latter may have just a link, they are not
13
13
  // included by default
14
14
  'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo', 'deprecated', 'throws', 'exception', 'yields', 'yield']);
15
+
16
+ /**
17
+ * @param {string} text
18
+ * @returns {string[]}
19
+ */
15
20
  const extractParagraphs = text => {
16
21
  return text.split(/(?<![;:])\n\n/u);
17
22
  };
23
+
24
+ /**
25
+ * @param {string} text
26
+ * @param {string|RegExp} abbreviationsRegex
27
+ * @returns {string[]}
28
+ */
18
29
  const extractSentences = (text, abbreviationsRegex) => {
19
30
  const txt = text
20
31
  // Remove all {} tags.
@@ -33,7 +44,13 @@ const extractSentences = (text, abbreviationsRegex) => {
33
44
  return !puncts[idx] && /^\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;
34
45
  });
35
46
  };
47
+
48
+ /**
49
+ * @param {string} text
50
+ * @returns {boolean}
51
+ */
36
52
  const isNewLinePrecededByAPeriod = text => {
53
+ /** @type {boolean} */
37
54
  let lastLineEndsSentence;
38
55
  const lines = text.split('\n');
39
56
  return !lines.some(line => {
@@ -44,15 +61,43 @@ const isNewLinePrecededByAPeriod = text => {
44
61
  return false;
45
62
  });
46
63
  };
64
+
65
+ /**
66
+ * @param {string} str
67
+ * @returns {boolean}
68
+ */
47
69
  const isCapitalized = str => {
48
70
  return str[0] === str[0].toUpperCase();
49
71
  };
72
+
73
+ /**
74
+ * @param {string} str
75
+ * @returns {boolean}
76
+ */
50
77
  const isTable = str => {
51
- return str.charAt() === '|';
78
+ return str.charAt(0) === '|';
52
79
  };
80
+
81
+ /**
82
+ * @param {string} str
83
+ * @returns {string}
84
+ */
53
85
  const capitalize = str => {
54
86
  return str.charAt(0).toUpperCase() + str.slice(1);
55
87
  };
88
+
89
+ /**
90
+ * @param {string} description
91
+ * @param {import('../iterateJsdoc.js').Report} reportOrig
92
+ * @param {import('eslint').Rule.Node} jsdocNode
93
+ * @param {string|RegExp} abbreviationsRegex
94
+ * @param {import('eslint').SourceCode} sourceCode
95
+ * @param {import('comment-parser').Spec|{
96
+ * line: import('../iterateJsdoc.js').Integer
97
+ * }} tag
98
+ * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd
99
+ * @returns {boolean}
100
+ */
56
101
  const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd) => {
57
102
  if (!description || /^\n+$/u.test(description)) {
58
103
  return false;
@@ -60,17 +105,18 @@ const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRe
60
105
  const paragraphs = extractParagraphs(description).filter(Boolean);
61
106
  return paragraphs.some((paragraph, parIdx) => {
62
107
  const sentences = extractSentences(paragraph, abbreviationsRegex);
63
- const fix = fixer => {
108
+ const fix = /** @type {import('eslint').Rule.ReportFixer} */fixer => {
64
109
  let text = sourceCode.getText(jsdocNode);
65
110
  if (!/[.:?!]$/u.test(paragraph)) {
66
111
  const line = paragraph.split('\n').filter(Boolean).pop();
67
- text = text.replace(new RegExp(`${(0, _escapeStringRegexp.default)(line)}$`, 'mu'), `${line}.`);
112
+ text = text.replace(new RegExp(`${(0, _escapeStringRegexp.default)( /** @type {string} */
113
+ line)}$`, 'mu'), `${line}.`);
68
114
  }
69
115
  for (const sentence of sentences.filter(sentence_ => {
70
116
  return !/^\s*$/u.test(sentence_) && !isCapitalized(sentence_) && !isTable(sentence_);
71
117
  })) {
72
118
  const beginning = sentence.split('\n')[0];
73
- if (tag.tag) {
119
+ if ('tag' in tag && tag.tag) {
74
120
  const reg = new RegExp(`(@${(0, _escapeStringRegexp.default)(tag.tag)}.*)${(0, _escapeStringRegexp.default)(beginning)}`, 'u');
75
121
  text = text.replace(reg, (_$0, $1) => {
76
122
  return $1 + capitalize(beginning);
@@ -81,11 +127,29 @@ const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRe
81
127
  }
82
128
  return fixer.replaceText(jsdocNode, text);
83
129
  };
130
+
131
+ /**
132
+ * @param {string} msg
133
+ * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer
134
+ * @param {{
135
+ * line?: number | undefined;
136
+ * column?: number | undefined;
137
+ * } | (import('comment-parser').Spec & {
138
+ * line?: number | undefined;
139
+ * column?: number | undefined;
140
+ * })} tagObj
141
+ * @returns {void}
142
+ */
84
143
  const report = (msg, fixer, tagObj) => {
85
144
  if ('line' in tagObj) {
145
+ /**
146
+ * @type {{
147
+ * line: number;
148
+ * }}
149
+ */
86
150
  tagObj.line += parIdx * 2;
87
151
  } else {
88
- tagObj.source[0].number += parIdx * 2;
152
+ /** @type {import('comment-parser').Spec} */tagObj.source[0].number += parIdx * 2;
89
153
  }
90
154
 
91
155
  // Avoid errors if old column doesn't exist here
@@ -122,11 +186,10 @@ var _default = (0, _iterateJsdoc.default)(({
122
186
  jsdocNode,
123
187
  utils
124
188
  }) => {
125
- const options = context.options[0] || {};
126
- const {
189
+ const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */{
127
190
  abbreviations = [],
128
191
  newlineBeforeCapsAssumesBadSentenceEnd = false
129
- } = options;
192
+ } = context.options[0] || {};
130
193
  const abbreviationsRegex = abbreviations.length ? new RegExp('\\b' + abbreviations.map(abbreviation => {
131
194
  return (0, _escapeStringRegexp.default)(abbreviation.replace(/\.$/ug, '') + '.');
132
195
  }).join('|') + '(?:$|\\s)', 'gu') : '';
@@ -149,7 +212,7 @@ var _default = (0, _iterateJsdoc.default)(({
149
212
  index,
150
213
  length
151
214
  } of indices) {
152
- description = description.slice(0, index) + description.slice(index + length);
215
+ description = description.slice(0, index) + description.slice( /** @type {import('../iterateJsdoc.js').Integer} */index + length);
153
216
  }
154
217
  if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {
155
218
  line: jsdoc.source[0].number + 1
@@ -175,7 +238,7 @@ var _default = (0, _iterateJsdoc.default)(({
175
238
  });
176
239
  });
177
240
  tagsWithNames.some(tag => {
178
- const desc = utils.getTagDescription(tag).replace(/^- /u, '').trimEnd();
241
+ const desc = /** @type {string} */utils.getTagDescription(tag).replace(/^- /u, '').trimEnd();
179
242
  return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);
180
243
  });
181
244
  tagsWithoutNames.some(tag => {