eslint-plugin-jsdoc 15.11.0 → 15.12.2

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.
@@ -11,14 +11,8 @@ var _tagNames = require("./tagNames");
11
11
 
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
15
-
16
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17
-
18
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
-
20
14
  // Todo: Distinguish closure tags
21
- const tagNames = _objectSpread({}, _tagNames.closureTags, {}, _tagNames.jsdocTags);
15
+ const tagNames = _tagNames.closureTags;
22
16
 
23
17
  const getFunctionParameterNames = functionNode => {
24
18
  const getParamName = param => {
@@ -144,16 +138,63 @@ const hasDefinedTypeReturnTag = tag => {
144
138
 
145
139
 
146
140
  return true;
147
- };
148
-
149
- const tagsWithMandatoryType = ['implements', 'type'];
150
- const tagsWithOptionalType = ['enum', 'member', 'var', 'module', 'typedef', 'augments', 'extends', 'class', 'constructor', 'constant', 'const', 'namespace', 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'throws', 'exception', 'yields', 'yield', // Todo: Omit these GCC specific items when in non-GCC mode after landing https://github.com/gajus/eslint-plugin-jsdoc/issues/356
151
- 'package', 'private', 'protected', 'public', 'static'];
152
- const namepathDefiningTags = ['external', 'host', 'name', 'typedef', 'event', 'class', 'constructor', 'constant', 'const', 'callback', 'function', 'func', 'method', 'interface', 'member', 'var', 'mixin', 'namespace'];
153
- const tagsWithOptionalNamepath = [...namepathDefiningTags, 'alias', 'augments', 'extends', // `borrows` has a different format, however, so needs special parsing
154
- 'borrows', 'emits', 'fires', 'lends', 'listens', 'memberof', 'memberof!', 'mixes', 'see', 'this'];
155
- const tagsWithMandatoryNamepath = ['callback', 'external', 'host', 'name', 'typedef'];
156
- const tagsWithMandatoryTypeOrNamepath = ['alias', 'augments', 'extends', 'borrows', 'external', 'host', 'lends', 'memberof', 'memberof!', 'mixes', 'name', 'this', 'typedef'];
141
+ }; // Todo: These type and namepath tag listings currently look
142
+ // at tags with `{...}` as being a type, but jsdoc may
143
+ // allow some namepaths only within brackets as well
144
+
145
+
146
+ const tagsWithMandatoryType = [// These both show curly brackets in the doc signature and examples
147
+ // "typeExpression"
148
+ 'implements', // "typeName"
149
+ 'type']; // All of these have a signature with "type" except for
150
+ // `augments`/`extends` ("namepath")
151
+ // `param`/`arg`/`argument` (no signature)
152
+ // `property`/`prop` (no signature)
153
+ // `modifies` (undocumented)
154
+
155
+ const tagsWithOptionalType = [// These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html
156
+ 'enum', 'member', 'var', 'typedef', // These do not show curly brackets in either the signature or examples
157
+ 'augments', 'extends', 'class', 'constructor', 'constant', 'const', // These show the signature with curly brackets but not in the example
158
+ 'module', 'namespace', // These have no formal signature in the docs but show curly brackets
159
+ // in the examples
160
+ 'param', 'arg', 'argument', 'property', 'prop', // These show curly brackets in the signature and in the examples
161
+ 'returns', 'return', 'throws', 'exception', 'yields', 'yield', // Todo: Omit these GCC specific items when in non-GCC mode after landing https://github.com/gajus/eslint-plugin-jsdoc/issues/356
162
+ // Shows the signature with curly brackets but not in the example
163
+ // "typeExpression"
164
+ 'package', 'private', 'protected', // These do not show a signature nor show curly brackets in the example
165
+ 'public', 'static', // Has no documentation, but test example has curly brackets, and
166
+ // "name" would be suggested rather than "namepath" based on example; not
167
+ // sure if name is required
168
+ 'modifies']; // None of these show as having curly brackets for their name/namepath
169
+
170
+ const namepathDefiningTags = [// These appear to require a "name" in their signature, albeit these
171
+ // are somewhat different from other "name"'s (including as described
172
+ // at https://jsdoc.app/about-namepaths.html )
173
+ 'external', 'host', 'event', // These allow for "name"'s in their signature, but indicate as optional
174
+ 'class', 'constructor', 'constant', 'const', 'function', 'func', 'method', 'interface', 'member', 'var', 'mixin', 'namespace', // Todo: Should add `module` here (with optional "name" and no curly brackets);
175
+ // this block impacts `no-undefined-types` and `valid-types` (search for "isNamepathDefiningTag|tagMightHaveNamepath|tagMightHaveEitherTypeOrNamepath")
176
+ // These seem to all require a "namepath" in their signatures (with no counter-examples)
177
+ 'name', 'typedef', 'callback']; // The following do not seem to allow curly brackets in their doc
178
+ // signature or examples (besides `modifies`)
179
+
180
+ const tagsWithOptionalNamepath = [...namepathDefiningTags, // `borrows` has a different format, however, so needs special parsing;
181
+ // seems to require both, and as "namepath"'s
182
+ 'borrows', // Signature seems to require a "name" (of an event) and no counter-examples
183
+ 'emits', 'fires', 'listens', // Signature seems to require a "namepath" (and no counter-examples)
184
+ 'alias', 'augments', 'extends', 'lends', 'this', // Signature seems to require a "namepath" (and no counter-examples),
185
+ // though it allows an incomplete namepath ending with connecting symbol
186
+ 'memberof', 'memberof!', // Signature seems to require a "OtherObjectPath" with no counter-examples
187
+ 'mixes', // Signature allows for "namepath" or text
188
+ 'see']; // Todo: `@link` seems to require a namepath OR URL and might be checked as such.
189
+ // The doc signature of `event` seems to require a "name"
190
+
191
+ const tagsWithMandatoryNamepath = [// "name" (and a special syntax for the `external` name)
192
+ 'external', 'host', // "namepath"
193
+ 'callback', 'name', 'typedef'];
194
+ const tagsWithMandatoryTypeOrNamepath = [// "namepath"
195
+ 'alias', 'augments', 'extends', 'borrows', 'lends', 'memberof', 'memberof!', 'name', 'this', 'typedef', // "name"
196
+ 'external', 'host', // "OtherObjectPath"
197
+ 'mixes'];
157
198
 
158
199
  const isNamepathDefiningTag = tagName => {
159
200
  return namepathDefiningTags.includes(tagName);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagNames","closureTags","jsdocTags","getFunctionParameterNames","functionNode","getParamName","param","_","has","name","left","type","get","argument","parameter","Error","params","map","getJsdocParameterNamesDeep","jsdoc","targetTagName","jsdocParameterNames","filter","tags","tag","getJsdocParameterNames","includes","getPreferredTagName","tagPreference","prefValues","values","some","prefVal","replacement","preferredTagName","findKey","aliases","isValidTag","definedTags","validTagNames","keys","concat","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryType","tagsWithOptionalType","namepathDefiningTags","tagsWithOptionalNamepath","tagsWithMandatoryNamepath","tagsWithMandatoryTypeOrNamepath","isNamepathDefiningTag","tagName","tagMightHaveType","tagMustHaveType","tagMightHaveNamepath","tagMustHaveNamepath","tagMightHaveEitherTypeOrNamepath","tagMustHaveEitherTypeOrNamepath","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","parseClosureTemplateTag","source","split","enforcedContexts","context","defaultContexts","options","contexts","getContextObject","checkJsdoc","reduce","obj","prop","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","push","getAncestor","sourceCode","nde","depth","idx","prevToken","getTokenBefore","getIndent","indent","text","match","charAt"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {jsdocTags, closureTags} from './tagNames';\n\n// Todo: Distinguish closure tags\nconst tagNames = {\n ...closureTags,\n ...jsdocTags,\n};\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<string> => {\n const getParamName = (param) => {\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || _.get(param, 'left.type') === 'ObjectPattern') {\n return '<ObjectPattern>';\n }\n\n if (param.type === 'ArrayPattern' || _.get(param, 'left.type') === 'ArrayPattern') {\n return '<ArrayPattern>';\n }\n\n if (param.type === 'RestElement') {\n return param.argument.name;\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map(getParamName);\n};\n\n/**\n * Gets all parameter names, including those that refer to a path, e.g. \"@param foo; @param foo.bar\".\n */\nconst getJsdocParameterNamesDeep = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n jsdocParameterNames = _.map(jsdocParameterNames, 'name');\n\n return jsdocParameterNames;\n};\n\nconst getJsdocParameterNames = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = getJsdocParameterNamesDeep(jsdoc, targetTagName);\n\n jsdocParameterNames = jsdocParameterNames.filter((name) => {\n return !name.includes('.');\n });\n\n return jsdocParameterNames;\n};\n\nconst getPreferredTagName = (name : string, tagPreference : Object = {}) : string => {\n const prefValues = _.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n if (_.has(tagPreference, name)) {\n return tagPreference[name];\n }\n\n const preferredTagName = _.findKey(tagNames, (aliases) => {\n return aliases.includes(name);\n });\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (name : string, definedTags : Array) : boolean => {\n const validTagNames = _.keys(tagNames).concat(_.flatten(_.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\nconst tagsWithMandatoryType = [\n 'implements',\n 'type',\n];\n\nconst tagsWithOptionalType = [\n 'enum',\n 'member', 'var',\n 'module',\n 'typedef',\n 'augments', 'extends',\n 'class', 'constructor',\n 'constant', 'const',\n 'namespace',\n 'param', 'arg', 'argument',\n 'property', 'prop',\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Todo: Omit these GCC specific items when in non-GCC mode after landing https://github.com/gajus/eslint-plugin-jsdoc/issues/356\n 'package',\n 'private',\n 'protected',\n 'public',\n 'static',\n];\n\nconst namepathDefiningTags = [\n 'external', 'host',\n 'name',\n 'typedef',\n 'event',\n 'class', 'constructor',\n 'constant', 'const',\n 'callback',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace',\n];\n\nconst tagsWithOptionalNamepath = [\n ...namepathDefiningTags,\n 'alias',\n 'augments', 'extends',\n\n // `borrows` has a different format, however, so needs special parsing\n 'borrows',\n 'emits', 'fires',\n 'lends',\n 'listens',\n 'memberof', 'memberof!',\n 'mixes',\n 'see',\n 'this',\n];\n\nconst tagsWithMandatoryNamepath = [\n 'callback',\n 'external', 'host',\n 'name',\n 'typedef',\n];\n\nconst tagsWithMandatoryTypeOrNamepath = [\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'external', 'host',\n 'lends',\n 'memberof', 'memberof!',\n 'mixes',\n 'name',\n 'this',\n 'typedef',\n];\n\nconst isNamepathDefiningTag = (tagName) => {\n return namepathDefiningTags.includes(tagName);\n};\n\nconst tagMightHaveType = (tag) => {\n return tagsWithMandatoryType.includes(tag) || tagsWithOptionalType.includes(tag);\n};\n\nconst tagMustHaveType = (tag) => {\n return tagsWithMandatoryType.includes(tag);\n};\n\nconst tagMightHaveNamepath = (tag) => {\n return tagsWithOptionalNamepath.includes(tag);\n};\n\nconst tagMustHaveNamepath = (tag) => {\n return tagsWithMandatoryNamepath.includes(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamepath = (tag) => {\n return tagMightHaveType(tag) || tagMightHaveNamepath(tag);\n};\n\nconst tagMustHaveEitherTypeOrNamepath = (tag) => {\n return tagsWithMandatoryTypeOrNamepath.includes(tag);\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body);\n }\n case 'IfStatement': {\n return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);\n }\n case 'TryStatement': {\n return hasReturnValue(node.block) ||\n hasReturnValue(node.handler && node.handler.body) ||\n hasReturnValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasReturnValue);\n }\n );\n }\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.source\n .split('@template')[1]\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n /* istanbul ignore next */\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n return contexts.reduce((obj, prop) => {\n obj[prop] = checkJsdoc;\n\n return obj;\n }, {});\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = [\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n];\n\nconst getTagsByType = (tags, tagPreference) => {\n const descName = getPreferredTagName('description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.includes(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getAncestor = (sourceCode, nde, depth, idx = 0) => {\n if (idx === depth) {\n return nde;\n }\n const prevToken = sourceCode.getTokenBefore(nde);\n if (prevToken) {\n return getAncestor(sourceCode, prevToken, depth, idx + 1);\n }\n\n return null;\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/);\n /* istanbul ignore next */\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n getAncestor,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocParameterNames,\n getJsdocParameterNamesDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamepath,\n tagMightHaveNamepath,\n tagMightHaveType,\n tagMustHaveEitherTypeOrNamepath,\n tagMustHaveNamepath,\n tagMustHaveType,\n};\n"],"file":"jsdocUtils.js"}
1
+ {"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagNames","closureTags","getFunctionParameterNames","functionNode","getParamName","param","_","has","name","left","type","get","argument","parameter","Error","params","map","getJsdocParameterNamesDeep","jsdoc","targetTagName","jsdocParameterNames","filter","tags","tag","getJsdocParameterNames","includes","getPreferredTagName","tagPreference","prefValues","values","some","prefVal","replacement","preferredTagName","findKey","aliases","isValidTag","definedTags","validTagNames","keys","concat","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryType","tagsWithOptionalType","namepathDefiningTags","tagsWithOptionalNamepath","tagsWithMandatoryNamepath","tagsWithMandatoryTypeOrNamepath","isNamepathDefiningTag","tagName","tagMightHaveType","tagMustHaveType","tagMightHaveNamepath","tagMustHaveNamepath","tagMightHaveEitherTypeOrNamepath","tagMustHaveEitherTypeOrNamepath","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","parseClosureTemplateTag","source","split","enforcedContexts","context","defaultContexts","options","contexts","getContextObject","checkJsdoc","reduce","obj","prop","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","push","getAncestor","sourceCode","nde","depth","idx","prevToken","getTokenBefore","getIndent","indent","text","match","charAt"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {closureTags} from './tagNames';\n\n// Todo: Distinguish closure tags\nconst tagNames = closureTags;\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<string> => {\n const getParamName = (param) => {\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || _.get(param, 'left.type') === 'ObjectPattern') {\n return '<ObjectPattern>';\n }\n\n if (param.type === 'ArrayPattern' || _.get(param, 'left.type') === 'ArrayPattern') {\n return '<ArrayPattern>';\n }\n\n if (param.type === 'RestElement') {\n return param.argument.name;\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map(getParamName);\n};\n\n/**\n * Gets all parameter names, including those that refer to a path, e.g. \"@param foo; @param foo.bar\".\n */\nconst getJsdocParameterNamesDeep = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n jsdocParameterNames = _.map(jsdocParameterNames, 'name');\n\n return jsdocParameterNames;\n};\n\nconst getJsdocParameterNames = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = getJsdocParameterNamesDeep(jsdoc, targetTagName);\n\n jsdocParameterNames = jsdocParameterNames.filter((name) => {\n return !name.includes('.');\n });\n\n return jsdocParameterNames;\n};\n\nconst getPreferredTagName = (name : string, tagPreference : Object = {}) : string => {\n const prefValues = _.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n if (_.has(tagPreference, name)) {\n return tagPreference[name];\n }\n\n const preferredTagName = _.findKey(tagNames, (aliases) => {\n return aliases.includes(name);\n });\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (name : string, definedTags : Array) : boolean => {\n const validTagNames = _.keys(tagNames).concat(_.flatten(_.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\n// Todo: These type and namepath tag listings currently look\n// at tags with `{...}` as being a type, but jsdoc may\n// allow some namepaths only within brackets as well\n\nconst tagsWithMandatoryType = [\n // These both show curly brackets in the doc signature and examples\n // \"typeExpression\"\n 'implements',\n\n // \"typeName\"\n 'type',\n];\n\n// All of these have a signature with \"type\" except for\n// `augments`/`extends` (\"namepath\")\n// `param`/`arg`/`argument` (no signature)\n// `property`/`prop` (no signature)\n// `modifies` (undocumented)\nconst tagsWithOptionalType = [\n // These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html\n 'enum',\n 'member', 'var',\n\n 'typedef',\n\n // These do not show curly brackets in either the signature or examples\n 'augments', 'extends',\n\n 'class', 'constructor',\n 'constant', 'const',\n\n // These show the signature with curly brackets but not in the example\n 'module',\n 'namespace',\n\n // These have no formal signature in the docs but show curly brackets\n // in the examples\n 'param', 'arg', 'argument',\n 'property', 'prop',\n\n // These show curly brackets in the signature and in the examples\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Todo: Omit these GCC specific items when in non-GCC mode after landing https://github.com/gajus/eslint-plugin-jsdoc/issues/356\n // Shows the signature with curly brackets but not in the example\n // \"typeExpression\"\n 'package',\n 'private',\n 'protected',\n\n // These do not show a signature nor show curly brackets in the example\n 'public',\n 'static',\n\n // Has no documentation, but test example has curly brackets, and\n // \"name\" would be suggested rather than \"namepath\" based on example; not\n // sure if name is required\n 'modifies',\n];\n\n// None of these show as having curly brackets for their name/namepath\nconst namepathDefiningTags = [\n // These appear to require a \"name\" in their signature, albeit these\n // are somewhat different from other \"name\"'s (including as described\n // at https://jsdoc.app/about-namepaths.html )\n 'external', 'host',\n 'event',\n\n // These allow for \"name\"'s in their signature, but indicate as optional\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace',\n\n // Todo: Should add `module` here (with optional \"name\" and no curly brackets);\n // this block impacts `no-undefined-types` and `valid-types` (search for \"isNamepathDefiningTag|tagMightHaveNamepath|tagMightHaveEitherTypeOrNamepath\")\n\n // These seem to all require a \"namepath\" in their signatures (with no counter-examples)\n 'name',\n 'typedef',\n 'callback',\n];\n\n// The following do not seem to allow curly brackets in their doc\n// signature or examples (besides `modifies`)\nconst tagsWithOptionalNamepath = [\n ...namepathDefiningTags,\n\n // `borrows` has a different format, however, so needs special parsing;\n // seems to require both, and as \"namepath\"'s\n 'borrows',\n\n // Signature seems to require a \"name\" (of an event) and no counter-examples\n 'emits', 'fires',\n 'listens',\n\n // Signature seems to require a \"namepath\" (and no counter-examples)\n 'alias',\n 'augments', 'extends',\n 'lends',\n 'this',\n\n // Signature seems to require a \"namepath\" (and no counter-examples),\n // though it allows an incomplete namepath ending with connecting symbol\n 'memberof', 'memberof!',\n\n // Signature seems to require a \"OtherObjectPath\" with no counter-examples\n 'mixes',\n\n // Signature allows for \"namepath\" or text\n 'see',\n];\n\n// Todo: `@link` seems to require a namepath OR URL and might be checked as such.\n\n// The doc signature of `event` seems to require a \"name\"\nconst tagsWithMandatoryNamepath = [\n // \"name\" (and a special syntax for the `external` name)\n 'external', 'host',\n\n // \"namepath\"\n 'callback',\n 'name',\n 'typedef',\n];\n\nconst tagsWithMandatoryTypeOrNamepath = [\n // \"namepath\"\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'lends',\n 'memberof', 'memberof!',\n 'name',\n 'this',\n 'typedef',\n\n // \"name\"\n 'external', 'host',\n\n // \"OtherObjectPath\"\n 'mixes',\n];\n\nconst isNamepathDefiningTag = (tagName) => {\n return namepathDefiningTags.includes(tagName);\n};\n\nconst tagMightHaveType = (tag) => {\n return tagsWithMandatoryType.includes(tag) || tagsWithOptionalType.includes(tag);\n};\n\nconst tagMustHaveType = (tag) => {\n return tagsWithMandatoryType.includes(tag);\n};\n\nconst tagMightHaveNamepath = (tag) => {\n return tagsWithOptionalNamepath.includes(tag);\n};\n\nconst tagMustHaveNamepath = (tag) => {\n return tagsWithMandatoryNamepath.includes(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamepath = (tag) => {\n return tagMightHaveType(tag) || tagMightHaveNamepath(tag);\n};\n\nconst tagMustHaveEitherTypeOrNamepath = (tag) => {\n return tagsWithMandatoryTypeOrNamepath.includes(tag);\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body);\n }\n case 'IfStatement': {\n return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);\n }\n case 'TryStatement': {\n return hasReturnValue(node.block) ||\n hasReturnValue(node.handler && node.handler.body) ||\n hasReturnValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasReturnValue);\n },\n );\n }\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.source\n .split('@template')[1]\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n /* istanbul ignore next */\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n return contexts.reduce((obj, prop) => {\n obj[prop] = checkJsdoc;\n\n return obj;\n }, {});\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = [\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n];\n\nconst getTagsByType = (tags, tagPreference) => {\n const descName = getPreferredTagName('description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.includes(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getAncestor = (sourceCode, nde, depth, idx = 0) => {\n if (idx === depth) {\n return nde;\n }\n const prevToken = sourceCode.getTokenBefore(nde);\n if (prevToken) {\n return getAncestor(sourceCode, prevToken, depth, idx + 1);\n }\n\n return null;\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/);\n /* istanbul ignore next */\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n getAncestor,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocParameterNames,\n getJsdocParameterNamesDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamepath,\n tagMightHaveNamepath,\n tagMightHaveType,\n tagMustHaveEitherTypeOrNamepath,\n tagMustHaveNamepath,\n tagMustHaveType,\n};\n"],"file":"jsdocUtils.js"}
@@ -5,12 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
-
10
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
11
9
 
12
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
11
 
12
+ const trimStart = string => {
13
+ return string.replace(/^\s+/, '');
14
+ };
15
+
14
16
  var _default = (0, _iterateJsdoc.default)(({
15
17
  sourceCode,
16
18
  jsdocNode,
@@ -22,14 +24,14 @@ var _default = (0, _iterateJsdoc.default)(({
22
24
  const sourceLines = sourceCode.getText(jsdocNode).split('\n').slice(1).map(line => {
23
25
  return line.split('*')[0];
24
26
  }).filter(line => {
25
- return !line.trim().length;
27
+ return !trimStart(line).length;
26
28
  });
27
29
 
28
30
  const fix = fixer => {
29
31
  const replacement = sourceCode.getText(jsdocNode).split('\n').map((line, index) => {
30
32
  // Ignore the first line and all lines not starting with `*`
31
- const ignored = !index || line.split('*')[0].trim().length;
32
- return ignored ? line : `${indent} ${_lodash.default.trimStart(line)}`;
33
+ const ignored = !index || trimStart(line.split('*')[0]).length;
34
+ return ignored ? line : `${indent} ${trimStart(line)}`;
33
35
  }).join('\n');
34
36
  return fixer.replaceText(jsdocNode, replacement);
35
37
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkAlignment.js"],"names":["sourceCode","jsdocNode","report","indent","indentLevel","length","sourceLines","getText","split","slice","map","line","filter","trim","fix","fixer","replacement","index","ignored","_","trimStart","join","replaceText","some","lineNum","iterateAllJsdocs","meta","fixable","type"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,UAD2B;AAE3BC,EAAAA,SAF2B;AAG3BC,EAAAA,MAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ;AACA,QAAMC,WAAW,GAAGD,MAAM,CAACE,MAAP,GAAgB,CAApC;AACA,QAAMC,WAAW,GAAGN,UAAU,CAACO,OAAX,CAAmBN,SAAnB,EAA8BO,KAA9B,CAAoC,IAApC,EACjBC,KADiB,CACX,CADW,EAEjBC,GAFiB,CAEZC,IAAD,IAAU;AACb,WAAOA,IAAI,CAACH,KAAL,CAAW,GAAX,EAAgB,CAAhB,CAAP;AACD,GAJiB,EAKjBI,MALiB,CAKTD,IAAD,IAAU;AAChB,WAAO,CAACA,IAAI,CAACE,IAAL,GAAYR,MAApB;AACD,GAPiB,CAApB;;AASA,QAAMS,GAAG,GAAIC,KAAD,IAAW;AACrB,UAAMC,WAAW,GAAGhB,UAAU,CAACO,OAAX,CAAmBN,SAAnB,EAA8BO,KAA9B,CAAoC,IAApC,EACjBE,GADiB,CACb,CAACC,IAAD,EAAOM,KAAP,KAAiB;AACpB;AACA,YAAMC,OAAO,GAAG,CAACD,KAAD,IAAUN,IAAI,CAACH,KAAL,CAAW,GAAX,EAAgB,CAAhB,EAAmBK,IAAnB,GAA0BR,MAApD;AAEA,aAAOa,OAAO,GAAGP,IAAH,GAAW,GAAER,MAAO,IAAGgB,gBAAEC,SAAF,CAAYT,IAAZ,CAAkB,EAAvD;AACD,KANiB,EAOjBU,IAPiB,CAOZ,IAPY,CAApB;AASA,WAAON,KAAK,CAACO,WAAN,CAAkBrB,SAAlB,EAA6Be,WAA7B,CAAP;AACD,GAXD;;AAaAV,EAAAA,WAAW,CAACiB,IAAZ,CAAiB,CAACZ,IAAD,EAAOa,OAAP,KAAmB;AAClC,QAAIb,IAAI,CAACN,MAAL,KAAgBD,WAApB,EAAiC;AAC/BF,MAAAA,MAAM,CAAC,qCAAD,EAAwCY,GAAxC,EAA6C;AACjDH,QAAAA,IAAI,EAAEa,OAAO,GAAG;AADiC,OAA7C,CAAN;AAIA,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAVD;AAWD,CAzCc,EAyCZ;AACDC,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,OAAO,EAAE,MADL;AAEJC,IAAAA,IAAI,EAAE;AAFF;AAFL,CAzCY,C","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdocNode,\n report,\n indent,\n}) => {\n // `indent` is whitespace from line 1 (`/**`), so slice and account for \"/\".\n const indentLevel = indent.length + 1;\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n')\n .slice(1)\n .map((line) => {\n return line.split('*')[0];\n })\n .filter((line) => {\n return !line.trim().length;\n });\n\n const fix = (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).split('\\n')\n .map((line, index) => {\n // Ignore the first line and all lines not starting with `*`\n const ignored = !index || line.split('*')[0].trim().length;\n\n return ignored ? line : `${indent} ${_.trimStart(line)}`;\n })\n .join('\\n');\n\n return fixer.replaceText(jsdocNode, replacement);\n };\n\n sourceLines.some((line, lineNum) => {\n if (line.length !== indentLevel) {\n report('Expected JSDoc block to be aligned.', fix, {\n line: lineNum + 1,\n });\n\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n type: 'layout',\n },\n});\n"],"file":"checkAlignment.js"}
1
+ {"version":3,"sources":["../../src/rules/checkAlignment.js"],"names":["trimStart","string","replace","sourceCode","jsdocNode","report","indent","indentLevel","length","sourceLines","getText","split","slice","map","line","filter","fix","fixer","replacement","index","ignored","join","replaceText","some","lineNum","iterateAllJsdocs","meta","fixable","type"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,SAAS,GAAIC,MAAD,IAAY;AAC5B,SAAOA,MAAM,CAACC,OAAP,CAAe,MAAf,EAAuB,EAAvB,CAAP;AACD,CAFD;;eAIe,2BAAa,CAAC;AAC3BC,EAAAA,UAD2B;AAE3BC,EAAAA,SAF2B;AAG3BC,EAAAA,MAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ;AACA,QAAMC,WAAW,GAAGD,MAAM,CAACE,MAAP,GAAgB,CAApC;AACA,QAAMC,WAAW,GAAGN,UAAU,CAACO,OAAX,CAAmBN,SAAnB,EAA8BO,KAA9B,CAAoC,IAApC,EACjBC,KADiB,CACX,CADW,EAEjBC,GAFiB,CAEZC,IAAD,IAAU;AACb,WAAOA,IAAI,CAACH,KAAL,CAAW,GAAX,EAAgB,CAAhB,CAAP;AACD,GAJiB,EAKjBI,MALiB,CAKTD,IAAD,IAAU;AAChB,WAAO,CAACd,SAAS,CAACc,IAAD,CAAT,CAAgBN,MAAxB;AACD,GAPiB,CAApB;;AASA,QAAMQ,GAAG,GAAIC,KAAD,IAAW;AACrB,UAAMC,WAAW,GAAGf,UAAU,CAACO,OAAX,CAAmBN,SAAnB,EAA8BO,KAA9B,CAAoC,IAApC,EACjBE,GADiB,CACb,CAACC,IAAD,EAAOK,KAAP,KAAiB;AACpB;AACA,YAAMC,OAAO,GAAG,CAACD,KAAD,IAAUnB,SAAS,CAACc,IAAI,CAACH,KAAL,CAAW,GAAX,EAAgB,CAAhB,CAAD,CAAT,CAA8BH,MAAxD;AAEA,aAAOY,OAAO,GAAGN,IAAH,GAAW,GAAER,MAAO,IAAGN,SAAS,CAACc,IAAD,CAAO,EAArD;AACD,KANiB,EAOjBO,IAPiB,CAOZ,IAPY,CAApB;AASA,WAAOJ,KAAK,CAACK,WAAN,CAAkBlB,SAAlB,EAA6Bc,WAA7B,CAAP;AACD,GAXD;;AAaAT,EAAAA,WAAW,CAACc,IAAZ,CAAiB,CAACT,IAAD,EAAOU,OAAP,KAAmB;AAClC,QAAIV,IAAI,CAACN,MAAL,KAAgBD,WAApB,EAAiC;AAC/BF,MAAAA,MAAM,CAAC,qCAAD,EAAwCW,GAAxC,EAA6C;AACjDF,QAAAA,IAAI,EAAEU,OAAO,GAAG;AADiC,OAA7C,CAAN;AAIA,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAVD;AAWD,CAzCc,EAyCZ;AACDC,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,OAAO,EAAE,MADL;AAEJC,IAAAA,IAAI,EAAE;AAFF;AAFL,CAzCY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst trimStart = (string) => {\n return string.replace(/^\\s+/, '');\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdocNode,\n report,\n indent,\n}) => {\n // `indent` is whitespace from line 1 (`/**`), so slice and account for \"/\".\n const indentLevel = indent.length + 1;\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n')\n .slice(1)\n .map((line) => {\n return line.split('*')[0];\n })\n .filter((line) => {\n return !trimStart(line).length;\n });\n\n const fix = (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).split('\\n')\n .map((line, index) => {\n // Ignore the first line and all lines not starting with `*`\n const ignored = !index || trimStart(line.split('*')[0]).length;\n\n return ignored ? line : `${indent} ${trimStart(line)}`;\n })\n .join('\\n');\n\n return fixer.replaceText(jsdocNode, replacement);\n };\n\n sourceLines.some((line, lineNum) => {\n if (line.length !== indentLevel) {\n report('Expected JSDoc block to be aligned.', fix, {\n line: lineNum + 1,\n });\n\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n type: 'layout',\n },\n});\n"],"file":"checkAlignment.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkExamples.js"],"names":["zeroBasedLineIndexAdjust","likelyNestedJSDocIndentSpace","preTagSpaceLength","hasCaptionRegex","escapeStringRegexp","str","replace","countChars","ch","match","RegExp","length","report","utils","context","options","exampleCodeRegex","rejectExampleCodeRegex","noDefaultExampleRules","eslintrcForExamples","matchingFileName","filename","paddedIndent","baseConfig","configFile","allowInlineConfig","reportUnusedDisableDirectives","captionRequired","rulePaths","rules","undefined","forEachPreferredTag","tag","targetTagName","firstLinePrefixLength","source","description","trim","test","nonJSPrefacingLines","nonJSPrefacingCols","idx","search","preMatch","slice","preMatchLines","colDelta","lastIndexOf","n0","n1","nonJSPreface","nonJSPrefaceLineCount","index","indexOf","charsInLastLine","cli","CLIEngine","useEslintrc","messages","config","getConfigForFile","cliFile","linter","Linter","executeOnText","error","linterRules","getRules","entries","reduce","obj","key","val","defineRules","parser","defineParser","require","verify","results","codeStartLine","line","codeStartCol","forEach","message","column","severity","ruleId","startLine","startCol","iterateAllJsdocs","meta","schema","additionalProperties","properties","default","type","noTrim"],"mappings":"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","sourcesContent":["import {CLIEngine, Linter} from 'eslint';\nimport iterateJsdoc from '../iterateJsdoc';\nimport warnRemovedSettings from '../warnRemovedSettings';\n\nconst zeroBasedLineIndexAdjust = -1;\nconst likelyNestedJSDocIndentSpace = 1;\nconst preTagSpaceLength = 1;\nconst hasCaptionRegex = /^\\s*<caption>(.*?)<\\/caption>/;\n\nconst escapeStringRegexp = (str) => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\nconst countChars = (str, ch) => {\n return (str.match(new RegExp(escapeStringRegexp(ch), 'g')) || []).length;\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n warnRemovedSettings(context, 'check-examples');\n const options = context.options[0] || {};\n let {\n exampleCodeRegex = null,\n rejectExampleCodeRegex = null,\n } = options;\n const {\n noDefaultExampleRules = false,\n eslintrcForExamples = true,\n matchingFileName: filename = null,\n paddedIndent = 0,\n baseConfig = {},\n configFile,\n allowInlineConfig = true,\n reportUnusedDisableDirectives = true,\n captionRequired = false,\n } = options;\n\n // Make this configurable?\n const rulePaths = [];\n\n const rules = noDefaultExampleRules ? undefined : {\n // \"always\" newline rule at end unlikely in sample code\n 'eol-last': 0,\n\n // Wouldn't generally expect example paths to resolve relative to JS file\n 'import/no-unresolved': 0,\n\n // Snippets likely too short to always include import/export info\n 'import/unambiguous': 0,\n\n // Unlikely to have inadvertent debugging within examples\n 'no-console': 0,\n\n // Many variables in examples will be `undefined`\n 'no-undef': 0,\n\n // Common to define variables for clarity without always using them\n 'no-unused-vars': 0,\n\n // See import/no-unresolved\n 'node/no-missing-import': 0,\n 'node/no-missing-require': 0,\n\n // Can generally look nicer to pad a little even if code imposes more stringency\n 'padded-blocks': 0,\n };\n\n exampleCodeRegex = exampleCodeRegex && new RegExp(exampleCodeRegex, '');\n rejectExampleCodeRegex = rejectExampleCodeRegex && new RegExp(rejectExampleCodeRegex, '');\n\n utils.forEachPreferredTag('example', (tag, targetTagName) => {\n // If a space is present, we should ignore it\n const firstLinePrefixLength = preTagSpaceLength;\n\n let source = tag.description;\n const match = source.match(hasCaptionRegex);\n\n if (captionRequired && (!match || !match[1].trim())) {\n report('Caption is expected for examples.', null, tag);\n }\n\n // If we allow newlines in hasCaptionRegex, we should add to line count\n source = source.replace(hasCaptionRegex, '');\n\n if (exampleCodeRegex && !exampleCodeRegex.test(source) ||\n rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)\n ) {\n return;\n }\n\n let nonJSPrefacingLines = 0;\n let nonJSPrefacingCols = 0;\n\n if (exampleCodeRegex) {\n const idx = source.search(exampleCodeRegex);\n\n // Strip out anything preceding user regex match (can affect line numbering)\n const preMatch = source.slice(0, idx);\n\n const preMatchLines = countChars(preMatch, '\\n');\n\n nonJSPrefacingLines = preMatchLines;\n\n const colDelta = preMatchLines ?\n preMatch.slice(preMatch.lastIndexOf('\\n') + 1).length :\n preMatch.length;\n\n // Get rid of text preceding user regex match (even if it leaves valid JS, it\n // could cause us to count newlines twice)\n source = source.slice(idx);\n\n source = source.replace(exampleCodeRegex, (n0, n1) => {\n let nonJSPreface;\n let nonJSPrefaceLineCount;\n if (n1) {\n const index = n0.indexOf(n1);\n nonJSPreface = n0.slice(0, index);\n nonJSPrefaceLineCount = countChars(nonJSPreface, '\\n');\n } else {\n nonJSPreface = '';\n nonJSPrefaceLineCount = 0;\n }\n\n nonJSPrefacingLines += nonJSPrefaceLineCount;\n\n // Ignore `preMatch` delta if newlines here\n if (nonJSPrefaceLineCount) {\n const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\\n') + 1).length;\n\n nonJSPrefacingCols += charsInLastLine;\n } else {\n nonJSPrefacingCols += colDelta + nonJSPreface.length;\n }\n\n return n1 || n0;\n });\n }\n\n // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api\n const cli = new CLIEngine({\n allowInlineConfig,\n baseConfig,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: eslintrcForExamples,\n });\n\n let messages;\n\n if (paddedIndent) {\n source = source.replace(new RegExp(`(^|\\n) {${paddedIndent}}(?!$)`, 'g'), '\\n');\n }\n\n if (filename) {\n const config = cli.getConfigForFile(filename);\n\n // We need a new instance to ensure that the rules that may only\n // be available to `filename` (if it has its own `.eslintrc`),\n // will be defined.\n const cliFile = new CLIEngine({\n allowInlineConfig,\n baseConfig: config,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: eslintrcForExamples,\n });\n\n const linter = new Linter();\n\n // Force external rules to become available on `cli`\n try {\n cliFile.executeOnText('');\n } catch (error) {\n // Ignore\n }\n\n const linterRules = [...cliFile.getRules().entries()].reduce((obj, [key, val]) => {\n obj[key] = val;\n\n return obj;\n }, {});\n\n linter.defineRules(linterRules);\n\n if (config.parser) {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n linter.defineParser(config.parser, require(config.parser));\n }\n\n // Could also support `disableFixes` and `allowInlineConfig`\n messages = linter.verify(source, config, {\n filename,\n reportUnusedDisableDirectives,\n });\n } else {\n ({results: [{messages}]} =\n cli.executeOnText(source));\n }\n\n // NOTE: `tag.line` can be 0 if of form `/** @tag ... */`\n const codeStartLine = tag.line + nonJSPrefacingLines;\n const codeStartCol = likelyNestedJSDocIndentSpace;\n\n messages.forEach(({message, line, column, severity, ruleId}) => {\n const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;\n const startCol = codeStartCol + (\n\n // This might not work for line 0, but line 0 is unlikely for examples\n line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength\n ) + column;\n\n // Could perhaps make fixable\n report(\n '@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') +\n (ruleId ? ' (' + ruleId + ')' : '') + ': ' +\n message,\n null,\n {\n column: startCol,\n line: startLine,\n }\n );\n });\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowInlineConfig: {\n default: true,\n type: 'boolean',\n },\n baseConfig: {\n type: 'object',\n },\n captionRequired: {\n default: false,\n type: 'boolean',\n },\n configFile: {\n type: 'string',\n },\n eslintrcForExamples: {\n default: true,\n type: 'boolean',\n },\n exampleCodeRegex: {\n type: 'string',\n },\n matchingFileName: {\n type: 'string',\n },\n noDefaultExampleRules: {\n default: false,\n type: 'boolean',\n },\n paddedIndent: {\n default: 0,\n type: 'integer',\n },\n rejectExampleCodeRegex: {\n type: 'string',\n },\n reportUnusedDisableDirectives: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n noTrim: true,\n});\n"],"file":"checkExamples.js"}
1
+ {"version":3,"sources":["../../src/rules/checkExamples.js"],"names":["zeroBasedLineIndexAdjust","likelyNestedJSDocIndentSpace","preTagSpaceLength","hasCaptionRegex","escapeStringRegexp","str","replace","countChars","ch","match","RegExp","length","report","utils","context","options","exampleCodeRegex","rejectExampleCodeRegex","noDefaultExampleRules","eslintrcForExamples","matchingFileName","filename","paddedIndent","baseConfig","configFile","allowInlineConfig","reportUnusedDisableDirectives","captionRequired","rulePaths","rules","undefined","forEachPreferredTag","tag","targetTagName","firstLinePrefixLength","source","description","trim","test","nonJSPrefacingLines","nonJSPrefacingCols","idx","search","preMatch","slice","preMatchLines","colDelta","lastIndexOf","n0","n1","nonJSPreface","nonJSPrefaceLineCount","index","indexOf","charsInLastLine","cli","CLIEngine","useEslintrc","messages","config","getConfigForFile","cliFile","linter","Linter","executeOnText","error","linterRules","getRules","entries","reduce","obj","key","val","defineRules","parser","defineParser","require","verify","results","codeStartLine","line","codeStartCol","forEach","message","column","severity","ruleId","startLine","startCol","iterateAllJsdocs","meta","schema","additionalProperties","properties","default","type","noTrim"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;;;;;AAEA,MAAMA,wBAAwB,GAAG,CAAC,CAAlC;AACA,MAAMC,4BAA4B,GAAG,CAArC;AACA,MAAMC,iBAAiB,GAAG,CAA1B;AACA,MAAMC,eAAe,GAAG,+BAAxB;;AAEA,MAAMC,kBAAkB,GAAIC,GAAD,IAAS;AAClC,SAAOA,GAAG,CAACC,OAAJ,CAAY,qBAAZ,EAAmC,MAAnC,CAAP;AACD,CAFD;;AAGA,MAAMC,UAAU,GAAG,CAACF,GAAD,EAAMG,EAAN,KAAa;AAC9B,SAAO,CAACH,GAAG,CAACI,KAAJ,CAAU,IAAIC,MAAJ,CAAWN,kBAAkB,CAACI,EAAD,CAA7B,EAAmC,GAAnC,CAAV,KAAsD,EAAvD,EAA2DG,MAAlE;AACD,CAFD;;eAIe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,oCAAoBA,OAApB,EAA6B,gBAA7B;AACA,QAAMC,OAAO,GAAGD,OAAO,CAACC,OAAR,CAAgB,CAAhB,KAAsB,EAAtC;AAFI,8BAMAA,OANA,CAIFC,gBAJE;AAAA,MAIFA,gBAJE,sCAIiB,IAJjB;AAAA,8BAMAD,OANA,CAKFE,sBALE;AAAA,MAKFA,sBALE,sCAKuB,IALvB;AAAA,gCAiBAF,OAjBA,CAQFG,qBARE;AAAA,QAQFA,qBARE,sCAQsB,KARtB;AAAA,gCAiBAH,OAjBA,CASFI,mBATE;AAAA,QASFA,mBATE,sCASoB,IATpB;AAAA,gCAiBAJ,OAjBA,CAUFK,gBAVE;AAAA,QAUgBC,QAVhB,sCAU2B,IAV3B;AAAA,gCAiBAN,OAjBA,CAWFO,YAXE;AAAA,QAWFA,YAXE,sCAWa,CAXb;AAAA,8BAiBAP,OAjBA,CAYFQ,UAZE;AAAA,QAYFA,UAZE,oCAYW,EAZX;AAAA,QAaFC,UAbE,GAiBAT,OAjBA,CAaFS,UAbE;AAAA,gCAiBAT,OAjBA,CAcFU,iBAdE;AAAA,QAcFA,iBAdE,sCAckB,IAdlB;AAAA,gCAiBAV,OAjBA,CAeFW,6BAfE;AAAA,QAeFA,6BAfE,sCAe8B,IAf9B;AAAA,gCAiBAX,OAjBA,CAgBFY,eAhBE;AAAA,QAgBFA,eAhBE,sCAgBgB,KAhBhB,0BAmBJ;;AACA,QAAMC,SAAS,GAAG,EAAlB;AAEA,QAAMC,KAAK,GAAGX,qBAAqB,GAAGY,SAAH,GAAe;AAChD;AACA,gBAAY,CAFoC;AAIhD;AACA,4BAAwB,CALwB;AAOhD;AACA,0BAAsB,CAR0B;AAUhD;AACA,kBAAc,CAXkC;AAahD;AACA,gBAAY,CAdoC;AAgBhD;AACA,sBAAkB,CAjB8B;AAmBhD;AACA,8BAA0B,CApBsB;AAqBhD,+BAA2B,CArBqB;AAuBhD;AACA,qBAAiB;AAxB+B,GAAlD;AA2BAd,EAAAA,gBAAgB,GAAGA,gBAAgB,IAAI,IAAIN,MAAJ,CAAWM,gBAAX,EAA6B,EAA7B,CAAvC;AACAC,EAAAA,sBAAsB,GAAGA,sBAAsB,IAAI,IAAIP,MAAJ,CAAWO,sBAAX,EAAmC,EAAnC,CAAnD;AAEAJ,EAAAA,KAAK,CAACkB,mBAAN,CAA0B,SAA1B,EAAqC,CAACC,GAAD,EAAMC,aAAN,KAAwB;AAC3D;AACA,UAAMC,qBAAqB,GAAGhC,iBAA9B;AAEA,QAAIiC,MAAM,GAAGH,GAAG,CAACI,WAAjB;AACA,UAAM3B,KAAK,GAAG0B,MAAM,CAAC1B,KAAP,CAAaN,eAAb,CAAd;;AAEA,QAAIwB,eAAe,KAAK,CAAClB,KAAD,IAAU,CAACA,KAAK,CAAC,CAAD,CAAL,CAAS4B,IAAT,EAAhB,CAAnB,EAAqD;AACnDzB,MAAAA,MAAM,CAAC,mCAAD,EAAsC,IAAtC,EAA4CoB,GAA5C,CAAN;AACD,KAT0D,CAW3D;;;AACAG,IAAAA,MAAM,GAAGA,MAAM,CAAC7B,OAAP,CAAeH,eAAf,EAAgC,EAAhC,CAAT;;AAEA,QAAIa,gBAAgB,IAAI,CAACA,gBAAgB,CAACsB,IAAjB,CAAsBH,MAAtB,CAArB,IACFlB,sBAAsB,IAAIA,sBAAsB,CAACqB,IAAvB,CAA4BH,MAA5B,CAD5B,EAEE;AACA;AACD;;AAED,QAAII,mBAAmB,GAAG,CAA1B;AACA,QAAIC,kBAAkB,GAAG,CAAzB;;AAEA,QAAIxB,gBAAJ,EAAsB;AACpB,YAAMyB,GAAG,GAAGN,MAAM,CAACO,MAAP,CAAc1B,gBAAd,CAAZ,CADoB,CAGpB;;AACA,YAAM2B,QAAQ,GAAGR,MAAM,CAACS,KAAP,CAAa,CAAb,EAAgBH,GAAhB,CAAjB;AAEA,YAAMI,aAAa,GAAGtC,UAAU,CAACoC,QAAD,EAAW,IAAX,CAAhC;AAEAJ,MAAAA,mBAAmB,GAAGM,aAAtB;AAEA,YAAMC,QAAQ,GAAGD,aAAa,GAC5BF,QAAQ,CAACC,KAAT,CAAeD,QAAQ,CAACI,WAAT,CAAqB,IAArB,IAA6B,CAA5C,EAA+CpC,MADnB,GAE5BgC,QAAQ,CAAChC,MAFX,CAVoB,CAcpB;AACA;;AACAwB,MAAAA,MAAM,GAAGA,MAAM,CAACS,KAAP,CAAaH,GAAb,CAAT;AAEAN,MAAAA,MAAM,GAAGA,MAAM,CAAC7B,OAAP,CAAeU,gBAAf,EAAiC,CAACgC,EAAD,EAAKC,EAAL,KAAY;AACpD,YAAIC,YAAJ;AACA,YAAIC,qBAAJ;;AACA,YAAIF,EAAJ,EAAQ;AACN,gBAAMG,KAAK,GAAGJ,EAAE,CAACK,OAAH,CAAWJ,EAAX,CAAd;AACAC,UAAAA,YAAY,GAAGF,EAAE,CAACJ,KAAH,CAAS,CAAT,EAAYQ,KAAZ,CAAf;AACAD,UAAAA,qBAAqB,GAAG5C,UAAU,CAAC2C,YAAD,EAAe,IAAf,CAAlC;AACD,SAJD,MAIO;AACLA,UAAAA,YAAY,GAAG,EAAf;AACAC,UAAAA,qBAAqB,GAAG,CAAxB;AACD;;AAEDZ,QAAAA,mBAAmB,IAAIY,qBAAvB,CAZoD,CAcpD;;AACA,YAAIA,qBAAJ,EAA2B;AACzB,gBAAMG,eAAe,GAAGJ,YAAY,CAACN,KAAb,CAAmBM,YAAY,CAACH,WAAb,CAAyB,IAAzB,IAAiC,CAApD,EAAuDpC,MAA/E;AAEA6B,UAAAA,kBAAkB,IAAIc,eAAtB;AACD,SAJD,MAIO;AACLd,UAAAA,kBAAkB,IAAIM,QAAQ,GAAGI,YAAY,CAACvC,MAA9C;AACD;;AAED,eAAOsC,EAAE,IAAID,EAAb;AACD,OAxBQ,CAAT;AAyBD,KAlE0D,CAoE3D;;;AACA,UAAMO,GAAG,GAAG,IAAIC,iBAAJ,CAAc;AACxB/B,MAAAA,iBADwB;AAExBF,MAAAA,UAFwB;AAGxBC,MAAAA,UAHwB;AAIxBE,MAAAA,6BAJwB;AAKxBE,MAAAA,SALwB;AAMxBC,MAAAA,KANwB;AAOxB4B,MAAAA,WAAW,EAAEtC;AAPW,KAAd,CAAZ;AAUA,QAAIuC,QAAJ;;AAEA,QAAIpC,YAAJ,EAAkB;AAChBa,MAAAA,MAAM,GAAGA,MAAM,CAAC7B,OAAP,CAAe,IAAII,MAAJ,CAAY,WAAUY,YAAa,QAAnC,EAA4C,GAA5C,CAAf,EAAiE,IAAjE,CAAT;AACD;;AAED,QAAID,QAAJ,EAAc;AACZ,YAAMsC,MAAM,GAAGJ,GAAG,CAACK,gBAAJ,CAAqBvC,QAArB,CAAf,CADY,CAGZ;AACA;AACA;;AACA,YAAMwC,OAAO,GAAG,IAAIL,iBAAJ,CAAc;AAC5B/B,QAAAA,iBAD4B;AAE5BF,QAAAA,UAAU,EAAEoC,MAFgB;AAG5BnC,QAAAA,UAH4B;AAI5BE,QAAAA,6BAJ4B;AAK5BE,QAAAA,SAL4B;AAM5BC,QAAAA,KAN4B;AAO5B4B,QAAAA,WAAW,EAAEtC;AAPe,OAAd,CAAhB;AAUA,YAAM2C,MAAM,GAAG,IAAIC,cAAJ,EAAf,CAhBY,CAkBZ;;AACA,UAAI;AACFF,QAAAA,OAAO,CAACG,aAAR,CAAsB,EAAtB;AACD,OAFD,CAEE,OAAOC,KAAP,EAAc,CACd;AACD;;AAED,YAAMC,WAAW,GAAG,CAAC,GAAGL,OAAO,CAACM,QAAR,GAAmBC,OAAnB,EAAJ,EAAkCC,MAAlC,CAAyC,CAACC,GAAD,EAAM,CAACC,GAAD,EAAMC,GAAN,CAAN,KAAqB;AAChFF,QAAAA,GAAG,CAACC,GAAD,CAAH,GAAWC,GAAX;AAEA,eAAOF,GAAP;AACD,OAJmB,EAIjB,EAJiB,CAApB;AAMAR,MAAAA,MAAM,CAACW,WAAP,CAAmBP,WAAnB;;AAEA,UAAIP,MAAM,CAACe,MAAX,EAAmB;AACjB;AACAZ,QAAAA,MAAM,CAACa,YAAP,CAAoBhB,MAAM,CAACe,MAA3B,EAAmCE,OAAO,CAACjB,MAAM,CAACe,MAAR,CAA1C;AACD,OApCW,CAsCZ;;;AACAhB,MAAAA,QAAQ,GAAGI,MAAM,CAACe,MAAP,CAAc1C,MAAd,EAAsBwB,MAAtB,EAA8B;AACvCtC,QAAAA,QADuC;AAEvCK,QAAAA;AAFuC,OAA9B,CAAX;AAID,KA3CD,MA2CO;AAAA,+BAEH6B,GAAG,CAACS,aAAJ,CAAkB7B,MAAlB,CAFG;;AAAA,oEACH2C,OADG;;AACQpB,MAAAA,QADR,4BACQA,QADR;AAGN,KAnI0D,CAqI3D;;;AACA,UAAMqB,aAAa,GAAG/C,GAAG,CAACgD,IAAJ,GAAWzC,mBAAjC;AACA,UAAM0C,YAAY,GAAGhF,4BAArB;AAEAyD,IAAAA,QAAQ,CAACwB,OAAT,CAAiB,CAAC;AAACC,MAAAA,OAAD;AAAUH,MAAAA,IAAV;AAAgBI,MAAAA,MAAhB;AAAwBC,MAAAA,QAAxB;AAAkCC,MAAAA;AAAlC,KAAD,KAA+C;AAC9D,YAAMC,SAAS,GAAGR,aAAa,GAAGC,IAAhB,GAAuBhF,wBAAzC;AACA,YAAMwF,QAAQ,GAAGP,YAAY,KAE3B;AACAD,MAAAA,IAAI,IAAI,CAAR,GAAYxC,kBAAkB,GAAGN,qBAAjC,GAAyDhC,iBAH9B,CAAZ,GAIbkF,MAJJ,CAF8D,CAQ9D;;AACAxE,MAAAA,MAAM,CACJ,MAAMqB,aAAN,GAAsB,GAAtB,IAA6BoD,QAAQ,KAAK,CAAb,GAAiB,OAAjB,GAA2B,SAAxD,KACGC,MAAM,GAAG,OAAOA,MAAP,GAAgB,GAAnB,GAAyB,EADlC,IACwC,IADxC,GAEEH,OAHE,EAIJ,IAJI,EAKJ;AACEC,QAAAA,MAAM,EAAEI,QADV;AAEER,QAAAA,IAAI,EAAEO;AAFR,OALI,CAAN;AAUD,KAnBD;AAoBD,GA7JD;AA8JD,CAtNc,EAsNZ;AACDE,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVpE,QAAAA,iBAAiB,EAAE;AACjBqE,UAAAA,OAAO,EAAE,IADQ;AAEjBC,UAAAA,IAAI,EAAE;AAFW,SADT;AAKVxE,QAAAA,UAAU,EAAE;AACVwE,UAAAA,IAAI,EAAE;AADI,SALF;AAQVpE,QAAAA,eAAe,EAAE;AACfmE,UAAAA,OAAO,EAAE,KADM;AAEfC,UAAAA,IAAI,EAAE;AAFS,SARP;AAYVvE,QAAAA,UAAU,EAAE;AACVuE,UAAAA,IAAI,EAAE;AADI,SAZF;AAeV5E,QAAAA,mBAAmB,EAAE;AACnB2E,UAAAA,OAAO,EAAE,IADU;AAEnBC,UAAAA,IAAI,EAAE;AAFa,SAfX;AAmBV/E,QAAAA,gBAAgB,EAAE;AAChB+E,UAAAA,IAAI,EAAE;AADU,SAnBR;AAsBV3E,QAAAA,gBAAgB,EAAE;AAChB2E,UAAAA,IAAI,EAAE;AADU,SAtBR;AAyBV7E,QAAAA,qBAAqB,EAAE;AACrB4E,UAAAA,OAAO,EAAE,KADY;AAErBC,UAAAA,IAAI,EAAE;AAFe,SAzBb;AA6BVzE,QAAAA,YAAY,EAAE;AACZwE,UAAAA,OAAO,EAAE,CADG;AAEZC,UAAAA,IAAI,EAAE;AAFM,SA7BJ;AAiCV9E,QAAAA,sBAAsB,EAAE;AACtB8E,UAAAA,IAAI,EAAE;AADgB,SAjCd;AAoCVrE,QAAAA,6BAA6B,EAAE;AAC7BoE,UAAAA,OAAO,EAAE,IADoB;AAE7BC,UAAAA,IAAI,EAAE;AAFuB;AApCrB,OAFd;AA2CEA,MAAAA,IAAI,EAAE;AA3CR,KADM,CADJ;AAgDJA,IAAAA,IAAI,EAAE;AAhDF,GAFL;AAoDDC,EAAAA,MAAM,EAAE;AApDP,CAtNY,C","sourcesContent":["import {CLIEngine, Linter} from 'eslint';\nimport iterateJsdoc from '../iterateJsdoc';\nimport warnRemovedSettings from '../warnRemovedSettings';\n\nconst zeroBasedLineIndexAdjust = -1;\nconst likelyNestedJSDocIndentSpace = 1;\nconst preTagSpaceLength = 1;\nconst hasCaptionRegex = /^\\s*<caption>(.*?)<\\/caption>/;\n\nconst escapeStringRegexp = (str) => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\nconst countChars = (str, ch) => {\n return (str.match(new RegExp(escapeStringRegexp(ch), 'g')) || []).length;\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n warnRemovedSettings(context, 'check-examples');\n const options = context.options[0] || {};\n let {\n exampleCodeRegex = null,\n rejectExampleCodeRegex = null,\n } = options;\n const {\n noDefaultExampleRules = false,\n eslintrcForExamples = true,\n matchingFileName: filename = null,\n paddedIndent = 0,\n baseConfig = {},\n configFile,\n allowInlineConfig = true,\n reportUnusedDisableDirectives = true,\n captionRequired = false,\n } = options;\n\n // Make this configurable?\n const rulePaths = [];\n\n const rules = noDefaultExampleRules ? undefined : {\n // \"always\" newline rule at end unlikely in sample code\n 'eol-last': 0,\n\n // Wouldn't generally expect example paths to resolve relative to JS file\n 'import/no-unresolved': 0,\n\n // Snippets likely too short to always include import/export info\n 'import/unambiguous': 0,\n\n // Unlikely to have inadvertent debugging within examples\n 'no-console': 0,\n\n // Many variables in examples will be `undefined`\n 'no-undef': 0,\n\n // Common to define variables for clarity without always using them\n 'no-unused-vars': 0,\n\n // See import/no-unresolved\n 'node/no-missing-import': 0,\n 'node/no-missing-require': 0,\n\n // Can generally look nicer to pad a little even if code imposes more stringency\n 'padded-blocks': 0,\n };\n\n exampleCodeRegex = exampleCodeRegex && new RegExp(exampleCodeRegex, '');\n rejectExampleCodeRegex = rejectExampleCodeRegex && new RegExp(rejectExampleCodeRegex, '');\n\n utils.forEachPreferredTag('example', (tag, targetTagName) => {\n // If a space is present, we should ignore it\n const firstLinePrefixLength = preTagSpaceLength;\n\n let source = tag.description;\n const match = source.match(hasCaptionRegex);\n\n if (captionRequired && (!match || !match[1].trim())) {\n report('Caption is expected for examples.', null, tag);\n }\n\n // If we allow newlines in hasCaptionRegex, we should add to line count\n source = source.replace(hasCaptionRegex, '');\n\n if (exampleCodeRegex && !exampleCodeRegex.test(source) ||\n rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)\n ) {\n return;\n }\n\n let nonJSPrefacingLines = 0;\n let nonJSPrefacingCols = 0;\n\n if (exampleCodeRegex) {\n const idx = source.search(exampleCodeRegex);\n\n // Strip out anything preceding user regex match (can affect line numbering)\n const preMatch = source.slice(0, idx);\n\n const preMatchLines = countChars(preMatch, '\\n');\n\n nonJSPrefacingLines = preMatchLines;\n\n const colDelta = preMatchLines ?\n preMatch.slice(preMatch.lastIndexOf('\\n') + 1).length :\n preMatch.length;\n\n // Get rid of text preceding user regex match (even if it leaves valid JS, it\n // could cause us to count newlines twice)\n source = source.slice(idx);\n\n source = source.replace(exampleCodeRegex, (n0, n1) => {\n let nonJSPreface;\n let nonJSPrefaceLineCount;\n if (n1) {\n const index = n0.indexOf(n1);\n nonJSPreface = n0.slice(0, index);\n nonJSPrefaceLineCount = countChars(nonJSPreface, '\\n');\n } else {\n nonJSPreface = '';\n nonJSPrefaceLineCount = 0;\n }\n\n nonJSPrefacingLines += nonJSPrefaceLineCount;\n\n // Ignore `preMatch` delta if newlines here\n if (nonJSPrefaceLineCount) {\n const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\\n') + 1).length;\n\n nonJSPrefacingCols += charsInLastLine;\n } else {\n nonJSPrefacingCols += colDelta + nonJSPreface.length;\n }\n\n return n1 || n0;\n });\n }\n\n // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api\n const cli = new CLIEngine({\n allowInlineConfig,\n baseConfig,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: eslintrcForExamples,\n });\n\n let messages;\n\n if (paddedIndent) {\n source = source.replace(new RegExp(`(^|\\n) {${paddedIndent}}(?!$)`, 'g'), '\\n');\n }\n\n if (filename) {\n const config = cli.getConfigForFile(filename);\n\n // We need a new instance to ensure that the rules that may only\n // be available to `filename` (if it has its own `.eslintrc`),\n // will be defined.\n const cliFile = new CLIEngine({\n allowInlineConfig,\n baseConfig: config,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: eslintrcForExamples,\n });\n\n const linter = new Linter();\n\n // Force external rules to become available on `cli`\n try {\n cliFile.executeOnText('');\n } catch (error) {\n // Ignore\n }\n\n const linterRules = [...cliFile.getRules().entries()].reduce((obj, [key, val]) => {\n obj[key] = val;\n\n return obj;\n }, {});\n\n linter.defineRules(linterRules);\n\n if (config.parser) {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n linter.defineParser(config.parser, require(config.parser));\n }\n\n // Could also support `disableFixes` and `allowInlineConfig`\n messages = linter.verify(source, config, {\n filename,\n reportUnusedDisableDirectives,\n });\n } else {\n ({results: [{messages}]} =\n cli.executeOnText(source));\n }\n\n // NOTE: `tag.line` can be 0 if of form `/** @tag ... */`\n const codeStartLine = tag.line + nonJSPrefacingLines;\n const codeStartCol = likelyNestedJSDocIndentSpace;\n\n messages.forEach(({message, line, column, severity, ruleId}) => {\n const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;\n const startCol = codeStartCol + (\n\n // This might not work for line 0, but line 0 is unlikely for examples\n line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength\n ) + column;\n\n // Could perhaps make fixable\n report(\n '@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') +\n (ruleId ? ' (' + ruleId + ')' : '') + ': ' +\n message,\n null,\n {\n column: startCol,\n line: startLine,\n },\n );\n });\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowInlineConfig: {\n default: true,\n type: 'boolean',\n },\n baseConfig: {\n type: 'object',\n },\n captionRequired: {\n default: false,\n type: 'boolean',\n },\n configFile: {\n type: 'string',\n },\n eslintrcForExamples: {\n default: true,\n type: 'boolean',\n },\n exampleCodeRegex: {\n type: 'string',\n },\n matchingFileName: {\n type: 'string',\n },\n noDefaultExampleRules: {\n default: false,\n type: 'boolean',\n },\n paddedIndent: {\n default: 0,\n type: 'integer',\n },\n rejectExampleCodeRegex: {\n type: 'string',\n },\n reportUnusedDisableDirectives: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n noTrim: true,\n});\n"],"file":"checkExamples.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkParamNames.js"],"names":["Object","entries","validateParameterNames","targetTagName","functionParameterNames","jsdoc","jsdocNode","utils","report","tags","paramTags","filter","tag","name","includes","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","splice","functionParameterName","expectedNames","join","actualNames","map","validateParameterNamesDeep","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","getFunctionParameterNames","jsdocParameterNamesDeep","getJsdocParameterNamesDeep","getPreferredTagName","tagName","isError","meta","fixable","type"],"mappings":"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","sourcesContent":["import entries from 'object.entries-ponyfill';\nimport iterateJsdoc from '../iterateJsdoc';\n\n/* istanbul ignore next */\nif (!Object.entries) {\n Object.entries = entries;\n}\n\nconst validateParameterNames = (targetTagName : string, functionParameterNames : Array<string>, jsdoc, jsdocNode, utils, report) => {\n if (!jsdoc || !jsdoc.tags) {\n return false;\n }\n\n const paramTags = Object.entries(jsdoc.tags).filter(([, tag]) => {\n return tag.tag === targetTagName && !tag.name.includes('.');\n });\n\n return paramTags.some(([, tag], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], () => {\n jsdoc.tags.splice(tagsIndex, 1);\n });\n\n return true;\n }\n const functionParameterName = functionParameterNames[index];\n\n if (!functionParameterName) {\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag\n );\n\n return true;\n }\n\n if (functionParameterName === '<ObjectPattern>' || functionParameterName === '<ArrayPattern>') {\n return false;\n }\n\n if (functionParameterName !== tag.name) {\n const expectedNames = functionParameterNames.join(', ');\n const actualNames = paramTags.map(([, {name}]) => {\n return name;\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames}\".`,\n null,\n tag\n );\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames : Array<string>, jsdoc, report : Function) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some((jsdocParameterName, idx) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx]\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const functionParameterNames = utils.getFunctionParameterNames();\n const jsdocParameterNamesDeep = utils.getJsdocParameterNamesDeep();\n if (!jsdocParameterNamesDeep) {\n return;\n }\n const targetTagName = utils.getPreferredTagName({tagName: 'param'});\n const isError = validateParameterNames(targetTagName, functionParameterNames, jsdoc, jsdocNode, utils, report);\n\n if (isError) {\n return;\n }\n\n validateParameterNamesDeep(targetTagName, jsdocParameterNamesDeep, jsdoc, report);\n}, {\n meta: {\n fixable: 'code',\n type: 'suggestion',\n },\n});\n"],"file":"checkParamNames.js"}
1
+ {"version":3,"sources":["../../src/rules/checkParamNames.js"],"names":["Object","entries","validateParameterNames","targetTagName","functionParameterNames","jsdoc","jsdocNode","utils","report","tags","paramTags","filter","tag","name","includes","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","splice","functionParameterName","expectedNames","join","actualNames","map","validateParameterNamesDeep","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","getFunctionParameterNames","jsdocParameterNamesDeep","getJsdocParameterNamesDeep","getPreferredTagName","tagName","isError","meta","fixable","type"],"mappings":"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","sourcesContent":["import entries from 'object.entries-ponyfill';\nimport iterateJsdoc from '../iterateJsdoc';\n\n/* istanbul ignore next */\nif (!Object.entries) {\n Object.entries = entries;\n}\n\nconst validateParameterNames = (targetTagName : string, functionParameterNames : Array<string>, jsdoc, jsdocNode, utils, report) => {\n if (!jsdoc || !jsdoc.tags) {\n return false;\n }\n\n const paramTags = Object.entries(jsdoc.tags).filter(([, tag]) => {\n return tag.tag === targetTagName && !tag.name.includes('.');\n });\n\n return paramTags.some(([, tag], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], () => {\n jsdoc.tags.splice(tagsIndex, 1);\n });\n\n return true;\n }\n const functionParameterName = functionParameterNames[index];\n\n if (!functionParameterName) {\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (functionParameterName === '<ObjectPattern>' || functionParameterName === '<ArrayPattern>') {\n return false;\n }\n\n if (functionParameterName !== tag.name) {\n const expectedNames = functionParameterNames.join(', ');\n const actualNames = paramTags.map(([, {name}]) => {\n return name;\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames : Array<string>, jsdoc, report : Function) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some((jsdocParameterName, idx) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const functionParameterNames = utils.getFunctionParameterNames();\n const jsdocParameterNamesDeep = utils.getJsdocParameterNamesDeep();\n if (!jsdocParameterNamesDeep) {\n return;\n }\n const targetTagName = utils.getPreferredTagName({tagName: 'param'});\n const isError = validateParameterNames(targetTagName, functionParameterNames, jsdoc, jsdocNode, utils, report);\n\n if (isError) {\n return;\n }\n\n validateParameterNamesDeep(targetTagName, jsdocParameterNamesDeep, jsdoc, report);\n}, {\n meta: {\n fixable: 'code',\n type: 'suggestion',\n },\n});\n"],"file":"checkParamNames.js"}
@@ -70,7 +70,7 @@ var _default = (0, _iterateJsdoc.default)(({
70
70
  return;
71
71
  }
72
72
 
73
- if (preferredTagName && typeof preferredTagName === 'object') {
73
+ if (typeof preferredTagName === 'object') {
74
74
  var _preferredTagName = preferredTagName;
75
75
  message = _preferredTagName.message;
76
76
  preferredTagName = _preferredTagName.replacement;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkTagNames.js"],"names":["sourceCode","jsdoc","report","utils","context","settings","jsdocNode","tags","options","definedTags","definedPreferredTags","definedNonPreferredTags","tagNamePreference","Object","keys","length","_","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","forEach","jsdocTag","tagName","tag","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeRegExp","replaceText","iterateAllJsdocs","meta","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n if (!jsdoc.tags) {\n return;\n }\n const {definedTags = []} = context.options[0] || {};\n\n let definedPreferredTags = [];\n let definedNonPreferredTags = [];\n const {tagNamePreference} = settings;\n if (Object.keys(tagNamePreference).length) {\n definedNonPreferredTags = _.keys(tagNamePreference);\n\n // Replace `_.values` with `Object.values` when we may start requiring Node 7+\n definedPreferredTags = _.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n if (!preferredTag) {\n return undefined;\n }\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.'\n );\n }\n\n return preferredTag.replacement;\n }).filter((preferredType) => {\n return preferredType;\n });\n }\n\n jsdoc.tags.forEach((jsdocTag) => {\n const tagName = jsdocTag.tag;\n if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n let message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n if (!preferredTagName) {\n return;\n }\n if (preferredTagName && typeof preferredTagName === 'object') {\n ({message, replacement: preferredTagName} = preferredTagName);\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${_.escapeRegExp(tagName)}\\\\b`),\n `@${preferredTagName}`\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTagNames.js"}
1
+ {"version":3,"sources":["../../src/rules/checkTagNames.js"],"names":["sourceCode","jsdoc","report","utils","context","settings","jsdocNode","tags","options","definedTags","definedPreferredTags","definedNonPreferredTags","tagNamePreference","Object","keys","length","_","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","forEach","jsdocTag","tagName","tag","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeRegExp","replaceText","iterateAllJsdocs","meta","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n if (!jsdoc.tags) {\n return;\n }\n const {definedTags = []} = context.options[0] || {};\n\n let definedPreferredTags = [];\n let definedNonPreferredTags = [];\n const {tagNamePreference} = settings;\n if (Object.keys(tagNamePreference).length) {\n definedNonPreferredTags = _.keys(tagNamePreference);\n\n // Replace `_.values` with `Object.values` when we may start requiring Node 7+\n definedPreferredTags = _.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n if (!preferredTag) {\n return undefined;\n }\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n }).filter((preferredType) => {\n return preferredType;\n });\n }\n\n jsdoc.tags.forEach((jsdocTag) => {\n const tagName = jsdocTag.tag;\n if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n let message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n if (!preferredTagName) {\n return;\n }\n if (typeof preferredTagName === 'object') {\n ({message, replacement: preferredTagName} = preferredTagName);\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${_.escapeRegExp(tagName)}\\\\b`),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTagNames.js"}
@@ -125,8 +125,6 @@ var _default = (0, _iterateJsdoc.default)(({
125
125
  if (!ret) {
126
126
  node.name = nodeName;
127
127
  }
128
-
129
- return ret;
130
128
  };
131
129
 
132
130
  (0, _jsdoctypeparser.traverse)(typeAst, (node, parentName, parentNode) => {
@@ -201,7 +199,7 @@ var _default = (0, _iterateJsdoc.default)(({
201
199
 
202
200
 
203
201
  if (preferred) {
204
- preferred = adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);
202
+ adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);
205
203
  }
206
204
  });
207
205
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","jsdocNode","sourceCode","report","utils","settings","context","jsdocTags","filterTags","tag","tagMightHaveType","preferredTypes","optionObj","options","noDefaults","_","get","unifyParentAndChildTypeChecks","forEach","jsdocTag","invalidTypes","typeAst","type","error","getPreferredTypeInfo","nodeName","parentName","parentNode","hasMatchingPreferredType","isGenericMatch","typeName","Object","keys","length","parentType","syntax","some","checkPostFix","syn","undefined","directNameMatch","unifiedSyntaxParentMatch","adjustNames","preferred","node","ret","meta","dotBracketEnd","match","slice","bracketEnd","endsWith","name","replace","includes","preferredSetting","push","reportSettings","strictNativeType","toLowerCase","fixedType","tagName","badType","preferredType","message","fix","fixer","replaceText","getText","tagValue","iterateAllJsdocs","fixable","schema","additionalProperties","properties"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {parse, traverse, publish} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTags = utils.filterTags((tag) => {\n return utils.tagMightHaveType(tag.tag);\n });\n\n const {preferredTypes} = settings;\n const optionObj = context.options[0];\n const noDefaults = _.get(optionObj, 'noDefaults');\n const unifyParentAndChildTypeChecks = _.get(optionObj, 'unifyParentAndChildTypeChecks');\n\n jsdocTags.forEach((jsdocTag) => {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = parse(jsdocTag.type);\n } catch (error) {\n return;\n }\n\n const getPreferredTypeInfo = (type, nodeName, parentName, parentNode) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const parentType = parentName === 'subject';\n if (unifyParentAndChildTypeChecks || parentType) {\n const syntax = _.get(parentNode, 'meta.syntax');\n\n [\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET'],\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(\n preferredTypes,\n nodeName + checkPostFix\n ) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName += checkPostFix;\n }\n\n return isGenericMatch;\n });\n if (!isGenericMatch && parentType) {\n [\n ['[]', 'SQUARE_BRACKET'],\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET'],\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(preferredTypes, checkPostFix) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName = checkPostFix;\n }\n\n return isGenericMatch;\n });\n }\n }\n const directNameMatch = _.get(preferredTypes, nodeName) !== undefined;\n const unifiedSyntaxParentMatch = parentType && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !parentType;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.syntax = 'SQUARE_BRACKET';\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/);\n if (dotBracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET_WITH_DOT';\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET';\n ret = preferred.slice(0, -2);\n }\n }\n }\n } else if (type === 'ANY') {\n node.type = 'NAME';\n }\n node.name = ret.replace(/(?:\\.|<>|\\.<>|\\[])$/, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.name = nodeName;\n }\n\n return ret;\n };\n\n traverse(typeAst, (node, parentName, parentNode) => {\n if (!node) {\n return;\n }\n const {type, name} = node;\n if (!['NAME', 'ANY'].includes(type)) {\n return;\n }\n let nodeName = type === 'ANY' ? '*' : name;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentName, parentNode);\n\n let preferred;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = _.get(preferredSetting, 'replacement');\n invalidTypes.push([\n nodeName,\n preferred,\n _.get(preferredSetting, 'message'),\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'\n );\n\n return;\n }\n } else if (!noDefaults && type === 'NAME') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || _.get(preferredTypes, strictNativeType) === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n preferred = adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = publish(typeAst);\n\n const tagName = jsdocTag.tag;\n invalidTypes.forEach(([badType, preferredType = '', message]) => {\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`\n )\n );\n };\n\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: \"${preferredType}\".` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null\n );\n });\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
1
+ {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","jsdocNode","sourceCode","report","utils","settings","context","jsdocTags","filterTags","tag","tagMightHaveType","preferredTypes","optionObj","options","noDefaults","_","get","unifyParentAndChildTypeChecks","forEach","jsdocTag","invalidTypes","typeAst","type","error","getPreferredTypeInfo","nodeName","parentName","parentNode","hasMatchingPreferredType","isGenericMatch","typeName","Object","keys","length","parentType","syntax","some","checkPostFix","syn","undefined","directNameMatch","unifiedSyntaxParentMatch","adjustNames","preferred","node","ret","meta","dotBracketEnd","match","slice","bracketEnd","endsWith","name","replace","includes","preferredSetting","push","reportSettings","strictNativeType","toLowerCase","fixedType","tagName","badType","preferredType","message","fix","fixer","replaceText","getText","tagValue","iterateAllJsdocs","fixable","schema","additionalProperties","properties"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {parse, traverse, publish} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTags = utils.filterTags((tag) => {\n return utils.tagMightHaveType(tag.tag);\n });\n\n const {preferredTypes} = settings;\n const optionObj = context.options[0];\n const noDefaults = _.get(optionObj, 'noDefaults');\n const unifyParentAndChildTypeChecks = _.get(optionObj, 'unifyParentAndChildTypeChecks');\n\n jsdocTags.forEach((jsdocTag) => {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = parse(jsdocTag.type);\n } catch (error) {\n return;\n }\n\n const getPreferredTypeInfo = (type, nodeName, parentName, parentNode) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const parentType = parentName === 'subject';\n if (unifyParentAndChildTypeChecks || parentType) {\n const syntax = _.get(parentNode, 'meta.syntax');\n\n [\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET'],\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(\n preferredTypes,\n nodeName + checkPostFix,\n ) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName += checkPostFix;\n }\n\n return isGenericMatch;\n });\n if (!isGenericMatch && parentType) {\n [\n ['[]', 'SQUARE_BRACKET'],\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET'],\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(preferredTypes, checkPostFix) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName = checkPostFix;\n }\n\n return isGenericMatch;\n });\n }\n }\n const directNameMatch = _.get(preferredTypes, nodeName) !== undefined;\n const unifiedSyntaxParentMatch = parentType && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !parentType;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.syntax = 'SQUARE_BRACKET';\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/);\n if (dotBracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET_WITH_DOT';\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET';\n ret = preferred.slice(0, -2);\n }\n }\n }\n } else if (type === 'ANY') {\n node.type = 'NAME';\n }\n node.name = ret.replace(/(?:\\.|<>|\\.<>|\\[])$/, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.name = nodeName;\n }\n };\n\n traverse(typeAst, (node, parentName, parentNode) => {\n if (!node) {\n return;\n }\n const {type, name} = node;\n if (!['NAME', 'ANY'].includes(type)) {\n return;\n }\n let nodeName = type === 'ANY' ? '*' : name;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentName, parentNode);\n\n let preferred;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = _.get(preferredSetting, 'replacement');\n invalidTypes.push([\n nodeName,\n preferred,\n _.get(preferredSetting, 'message'),\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (!noDefaults && type === 'NAME') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || _.get(preferredTypes, strictNativeType) === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = publish(typeAst);\n\n const tagName = jsdocTag.tag;\n invalidTypes.forEach(([badType, preferredType = '', message]) => {\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: \"${preferredType}\".` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n });\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","options","validateDescription","description","tag","mainDescription","tagValue","tagName","tags","regex","RegExp","matchDescription","test","line","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","trim","whitelistedTags","filterTags","getTagsByType","tagsWithNames","tagsWithoutNames","some","_","trimStart","contextDefaults","meta","schema","additionalProperties","properties","contexts","items","type","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const options = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n if (!tag && options.mainDescription === false) {\n return;\n }\n\n let tagValue = options.mainDescription;\n if (tag) {\n const tagName = tag.tag;\n tagValue = options.tags[tagName];\n }\n\n const regex = new RegExp(\n stringOrDefault(tagValue, options.matchDescription),\n 'u'\n );\n\n if (!regex.test(description)) {\n report('JSDoc description does not satisfy the regex pattern.', null, tag || {\n // Add one as description would typically be into block\n line: jsdoc.line + 1,\n });\n }\n };\n\n if (jsdoc.description) {\n validateDescription(jsdoc.description);\n }\n\n if (!options.tags || !Object.keys(options.tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(options.tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + matchingJsdocTag.description).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({tag: tagName}) => {\n return hasOptionTag(tagName);\n });\n const {tagsWithNames, tagsWithoutNames} = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = _.trimStart(tag.description, '- ');\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + tag.description).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
1
+ {"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","options","validateDescription","description","tag","mainDescription","tagValue","tagName","tags","regex","RegExp","matchDescription","test","line","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","trim","whitelistedTags","filterTags","getTagsByType","tagsWithNames","tagsWithoutNames","some","_","trimStart","contextDefaults","meta","schema","additionalProperties","properties","contexts","items","type","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const options = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n if (!tag && options.mainDescription === false) {\n return;\n }\n\n let tagValue = options.mainDescription;\n if (tag) {\n const tagName = tag.tag;\n tagValue = options.tags[tagName];\n }\n\n const regex = new RegExp(\n stringOrDefault(tagValue, options.matchDescription),\n 'u',\n );\n\n if (!regex.test(description)) {\n report('JSDoc description does not satisfy the regex pattern.', null, tag || {\n // Add one as description would typically be into block\n line: jsdoc.line + 1,\n });\n }\n };\n\n if (jsdoc.description) {\n validateDescription(jsdoc.description);\n }\n\n if (!options.tags || !Object.keys(options.tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(options.tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + matchingJsdocTag.description).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({tag: tagName}) => {\n return hasOptionTag(tagName);\n });\n const {tagsWithNames, tagsWithoutNames} = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = _.trimStart(tag.description, '- ');\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + tag.description).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}