eslint-plugin-jsdoc 37.6.1 → 37.7.1

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.
package/README.md CHANGED
@@ -4728,7 +4728,7 @@ number
4728
4728
  bigint
4729
4729
  string
4730
4730
  symbol
4731
- object
4731
+ object (For TypeScript's sake, however, using `Object` when specifying child types on it like `Object<string, number>`)
4732
4732
  Array
4733
4733
  Function
4734
4734
  Date
@@ -4789,7 +4789,7 @@ the `valid-types` rule to report parsing errors.
4789
4789
 
4790
4790
  Why are `boolean`, `number` and `string` exempt from starting with a capital
4791
4791
  letter? Let's take `string` as an example. In Javascript, everything is an
4792
- object. The string Object has prototypes for string functions such as
4792
+ object. The `String` object has prototypes for string functions such as
4793
4793
  `.toUpperCase()`.
4794
4794
 
4795
4795
  Fortunately we don't have to write `new String()` everywhere in our code.
@@ -4812,17 +4812,28 @@ new String('lard') // String {0: "l", 1: "a", 2: "r", 3: "d", length: 4}
4812
4812
  new String('lard') === 'lard' // false
4813
4813
  ```
4814
4814
 
4815
- To make things more confusing, there are also object literals and object
4816
- Objects. But object literals are still static Objects and object Objects are
4817
- instantiated Objects. So an object primitive is still an object Object.
4815
+ To make things more confusing, there are also object literals (like `{}`) and
4816
+ `Object` objects. But object literals are still static `Object`s and `Object`
4817
+ objects are instantiated objects. So an object primitive is still an `Object`
4818
+ object.
4818
4819
 
4819
4820
  However, `Object.create(null)` objects are not `instanceof Object`, however, so
4820
- in the case of this Object we lower-case to indicate possible support for
4821
- these objects.
4821
+ in the case of such a plain object we lower-case to indicate possible support
4822
+ for these objects. Also, nowadays, TypeScript also discourages use of `Object`
4823
+ as a lone type. However, one additional complexity is that TypeScript allows and
4824
+ actually [currently requires](https://github.com/microsoft/TypeScript/issues/20555)
4825
+ `Object` (with the initial upper-case) if used in the syntax
4826
+ `Object.<keyType, valueType>` or `Object<keyType, valueType`, perhaps to
4827
+ adhere to what [JSDoc documents](https://jsdoc.app/tags-type.html).
4828
+
4829
+ So, for optimal compatibility with TypeScript (especially since TypeScript
4830
+ tools can be used on plain JavaScript with JSDoc), we are now allowing this
4831
+ TypeScript approach by default.
4822
4832
 
4823
4833
  Basically, for primitives, we want to define the type as a primitive, because
4824
4834
  that's what we use in 99.9% of cases. For everything else, we use the type
4825
- rather than the primitive. Otherwise it would all just be `{object}`.
4835
+ rather than the primitive. Otherwise it would all just be `{object}` (with the
4836
+ additional exception of the special case of `Object.<>` just mentioned).
4826
4837
 
4827
4838
  In short: It's not about consistency, rather about the 99.9% use case. (And
4828
4839
  some functions might not even support the objects if they are checking for
@@ -5438,6 +5449,48 @@ function b () {}
5438
5449
  */
5439
5450
  // Settings: {"jsdoc":{"structuredTags":{"aCustomTag":{"type":["otherType","anotherType"]}}}}
5440
5451
  // Message: Invalid JSDoc @aCustomTag "foo" type "Number"; prefer: ["otherType","anotherType"].
5452
+
5453
+ /**
5454
+ * @param {Object[]} foo
5455
+ */
5456
+ function quux (foo) {
5457
+
5458
+ }
5459
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object"}}}
5460
+ // Message: Invalid JSDoc @param "foo" type "Object"; prefer: "object".
5461
+
5462
+ /**
5463
+ * @param {object.<string>} foo
5464
+ */
5465
+ function quux (foo) {
5466
+
5467
+ }
5468
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"object.<>":"Object"}}}
5469
+ // Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object".
5470
+
5471
+ /**
5472
+ * @param {object.<string, number>} foo
5473
+ */
5474
+ function quux (foo) {
5475
+ }
5476
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","Object.<>":"Object<>","object<>":"Object<>"}}}
5477
+ // Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object<>".
5478
+
5479
+ /**
5480
+ * @param {Object.<string, number>} foo
5481
+ */
5482
+ function quux (foo) {
5483
+ }
5484
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","Object.<>":"Object<>","object<>":"Object<>"}}}
5485
+ // Message: Invalid JSDoc @param "foo" type "Object"; prefer: "Object<>".
5486
+
5487
+ /**
5488
+ * @param {object<string, number>} foo
5489
+ */
5490
+ function quux (foo) {
5491
+ }
5492
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","Object.<>":"Object<>","object<>":"Object<>"}}}
5493
+ // Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object<>".
5441
5494
  ````
5442
5495
 
5443
5496
  The following patterns are not considered problems:
@@ -5725,6 +5778,26 @@ function b () {}
5725
5778
  function quux (foo) {
5726
5779
 
5727
5780
  }
5781
+
5782
+ /**
5783
+ * @param {Object.<string>} foo
5784
+ */
5785
+ function quux (foo) {
5786
+
5787
+ }
5788
+ // Settings: {"jsdoc":{"mode":"typescript"}}
5789
+
5790
+ /**
5791
+ * @typedef {object} foo
5792
+ */
5793
+ function a () {}
5794
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","object<>":"Object<>"}}}
5795
+
5796
+ /**
5797
+ * @typedef {Object<string, number>} foo
5798
+ */
5799
+ function a () {}
5800
+ // Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","object<>":"Object<>"}}}
5728
5801
  ````
5729
5802
 
5730
5803
 
@@ -9100,6 +9173,13 @@ const MY_ENUM = Object.freeze({
9100
9173
  } as const);
9101
9174
  // "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock[postDelimiter=\"\"]:has(JsdocTag ~ JsdocTag[tag=/private|protected/])","context":"any","message":"Access modifier tags must come first"},{"comment":"JsdocBlock[postDelimiter=\"\"]:has(JsdocTag[tag=\"enum\"])","context":":declaration","message":"@enum not allowed on declarations"}]}]
9102
9175
  // Message: @enum not allowed on declarations
9176
+
9177
+ /** @type {React.FunctionComponent<{ children: React.ReactNode }>}*/
9178
+ const MyComponent = ({ children }) => {
9179
+ return children;
9180
+ }
9181
+ // "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[tag=\"type\"]:has([value=/FunctionComponent/]))","context":"any","message":"The `FunctionComponent` type is not allowed. Please use `FC` instead."}]}]
9182
+ // Message: The `FunctionComponent` type is not allowed. Please use `FC` instead.
9103
9183
  ````
9104
9184
 
9105
9185
  The following patterns are not considered problems:
@@ -1236,11 +1236,15 @@ const isConstructor = node => {
1236
1236
  };
1237
1237
 
1238
1238
  const isGetter = node => {
1239
- return node && node.parent.kind === 'get';
1239
+ var _node$parent2;
1240
+
1241
+ return node && ((_node$parent2 = node.parent) === null || _node$parent2 === void 0 ? void 0 : _node$parent2.kind) === 'get';
1240
1242
  };
1241
1243
 
1242
1244
  const isSetter = node => {
1243
- return node && node.parent.kind === 'set';
1245
+ var _node$parent3;
1246
+
1247
+ return node && ((_node$parent3 = node.parent) === null || _node$parent3 === void 0 ? void 0 : _node$parent3.kind) === 'set';
1244
1248
  };
1245
1249
 
1246
1250
  const hasAccessorPair = node => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagStructure","setTagStructure","mode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeTag","tagType","trim","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","isNewPromiseExpression","node","callee","hasReturnValue","promFilter","returnType","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","hasNonEmptyResolverCall","resolverName","arguments","test","element","expressions","subExpression","property","decorators","decorator","computed","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom","hasNonFunctionYield","checkYieldReturnValue","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","args","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","children","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","default","checkGetters","checkSetters","dropPathSegmentQuotes","str","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp"],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n\nimport WarnSettings from './WarnSettings';\nimport getDefaultTagStructureForMode from './getDefaultTagStructureForMode';\nimport {\n jsdocTags,\n closureTags,\n typeScriptTags,\n} from './tagNames';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\nlet tagStructure;\n\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if (cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\ntype T = string | [?string, T];\nconst getPropertiesFromPropertySignature = (propSignature): T => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n }),\n ];\n }\n\n return propSignature.key.name;\n};\n\nconst getFunctionParameterNames = (\n functionNode : Object, checkDefaultObjects: Boolean,\n) : Array<T> => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ? param.left.typeAnnotation : param.typeAnnotation;\n\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ? param.left.name : param.name, flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n // eslint-disable-next-line default-case\n switch (param.value.type) {\n case 'ArrayPattern':\n return [\n param.key.name, param.value.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n case 'ObjectPattern':\n return [\n param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'AssignmentPattern': {\n // eslint-disable-next-line default-case\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n param.key.name, param.value.right.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n param.key.name, param.value.left.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n param.key.name, param.value.left.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n return param.key.raw ||\n // istanbul ignore next -- `raw` may not be present in all parsers\n param.key.value;\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n return (functionNode.params || functionNode.value.params).map((param) => {\n return getParamName(param);\n });\n};\n\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return functionNode.params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = Object.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 // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (name in tagPreferenceFixed) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\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 jsdoc.tags.some((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 defined type.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a defined type is declared; otherwise false.\n */\nconst hasDefinedTypeTag = (tag) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, a type is present\n return true;\n};\n\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return map.get(tag);\n};\n\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('nameContents', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n } catch {\n //\n }\n\n return tagStruct;\n};\n\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameContents') === 'namepath-defining';\n};\n\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeRequired');\n};\n\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('typeAllowed');\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('nameContents');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return namepathTypes.has(tagStruct.get('nameContents'));\n};\n\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameRequired');\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return tagMightHaveTypePosition(tag, tagMap) || tagMightHaveNamepath(tag, tagMap);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeOrNameRequired');\n};\n\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\n// eslint-disable-next-line complexity\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(node.handler && node.handler.body, checkYieldReturnValue) ||\n hasNonFunctionYield(node.finalizer, checkYieldReturnValue);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (node.parent.type === 'VariableDeclarator') {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\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 */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return node.generator && (\n node.expression || hasNonFunctionYield(node.body, checkYieldReturnValue)\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.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 * @see {https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\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 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 * @param {Function} handler\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n let property;\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = prop.context;\n value = checkJsdoc.bind(\n null, {\n ...selInfo,\n comment: prop.comment,\n }, handler.bind(null, prop.comment),\n );\n } else {\n property = prop.context;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = properties[property];\n properties[property] = old ? function (...args) {\n old(...args);\n value(...args);\n } : value;\n }\n\n return properties;\n};\n\nconst filterTags = (tags, filter) => {\n return tags.filter((tag) => {\n return filter(tag);\n });\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(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 getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n};\n\nconst isGetter = (node) => {\n return node && node.parent.kind === 'get';\n};\n\nconst isSetter = (node) => {\n return node && node.parent.kind === 'set';\n};\n\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key: {\n name: sourceName,\n },\n } = node;\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const children = type === 'MethodDefinition' ? 'body' : 'properties';\n\n return node.parent[children].some(({\n kind,\n key: {\n name,\n },\n }) => {\n return kind === oppositeKind && name === sourceName;\n });\n};\n\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(node.parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(node.parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n *\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replace(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasDefinedTypeTag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isSetter,\n isValidTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
1
+ {"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagStructure","setTagStructure","mode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeTag","tagType","trim","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","isNewPromiseExpression","node","callee","hasReturnValue","promFilter","returnType","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","hasNonEmptyResolverCall","resolverName","arguments","test","element","expressions","subExpression","property","decorators","decorator","computed","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom","hasNonFunctionYield","checkYieldReturnValue","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","args","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","children","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","default","checkGetters","checkSetters","dropPathSegmentQuotes","str","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp"],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n\nimport WarnSettings from './WarnSettings';\nimport getDefaultTagStructureForMode from './getDefaultTagStructureForMode';\nimport {\n jsdocTags,\n closureTags,\n typeScriptTags,\n} from './tagNames';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\nlet tagStructure;\n\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if (cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\ntype T = string | [?string, T];\nconst getPropertiesFromPropertySignature = (propSignature): T => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n }),\n ];\n }\n\n return propSignature.key.name;\n};\n\nconst getFunctionParameterNames = (\n functionNode : Object, checkDefaultObjects: Boolean,\n) : Array<T> => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ? param.left.typeAnnotation : param.typeAnnotation;\n\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ? param.left.name : param.name, flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n // eslint-disable-next-line default-case\n switch (param.value.type) {\n case 'ArrayPattern':\n return [\n param.key.name, param.value.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n case 'ObjectPattern':\n return [\n param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'AssignmentPattern': {\n // eslint-disable-next-line default-case\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n param.key.name, param.value.right.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n param.key.name, param.value.left.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n param.key.name, param.value.left.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n return param.key.raw ||\n // istanbul ignore next -- `raw` may not be present in all parsers\n param.key.value;\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n return (functionNode.params || functionNode.value.params).map((param) => {\n return getParamName(param);\n });\n};\n\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return functionNode.params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = Object.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 // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (name in tagPreferenceFixed) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\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 jsdoc.tags.some((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 defined type.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a defined type is declared; otherwise false.\n */\nconst hasDefinedTypeTag = (tag) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, a type is present\n return true;\n};\n\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return map.get(tag);\n};\n\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('nameContents', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n } catch {\n //\n }\n\n return tagStruct;\n};\n\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameContents') === 'namepath-defining';\n};\n\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeRequired');\n};\n\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('typeAllowed');\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('nameContents');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return namepathTypes.has(tagStruct.get('nameContents'));\n};\n\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameRequired');\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return tagMightHaveTypePosition(tag, tagMap) || tagMightHaveNamepath(tag, tagMap);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeOrNameRequired');\n};\n\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\n// eslint-disable-next-line complexity\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(node.handler && node.handler.body, checkYieldReturnValue) ||\n hasNonFunctionYield(node.finalizer, checkYieldReturnValue);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (node.parent.type === 'VariableDeclarator') {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\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 */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return node.generator && (\n node.expression || hasNonFunctionYield(node.body, checkYieldReturnValue)\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.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 * @see {https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\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 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 * @param {Function} handler\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n let property;\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = prop.context;\n value = checkJsdoc.bind(\n null, {\n ...selInfo,\n comment: prop.comment,\n }, handler.bind(null, prop.comment),\n );\n } else {\n property = prop.context;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = properties[property];\n properties[property] = old ? function (...args) {\n old(...args);\n value(...args);\n } : value;\n }\n\n return properties;\n};\n\nconst filterTags = (tags, filter) => {\n return tags.filter((tag) => {\n return filter(tag);\n });\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(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 getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n};\n\nconst isGetter = (node) => {\n return node && node.parent?.kind === 'get';\n};\n\nconst isSetter = (node) => {\n return node && node.parent?.kind === 'set';\n};\n\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key: {\n name: sourceName,\n },\n } = node;\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const children = type === 'MethodDefinition' ? 'body' : 'properties';\n\n return node.parent[children].some(({\n kind,\n key: {\n name,\n },\n }) => {\n return kind === oppositeKind && name === sourceName;\n });\n};\n\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(node.parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(node.parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n *\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replace(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasDefinedTypeTag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isSetter,\n isValidTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
@@ -132,7 +132,8 @@ var _default = (0, _iterateJsdoc.default)(({
132
132
  continue;
133
133
  }
134
134
 
135
- const tagName = jsdocTag.tag;
135
+ const tagName = jsdocTag.tag; // eslint-disable-next-line complexity -- To refactor
136
+
136
137
  (0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
137
138
  const {
138
139
  type,
@@ -173,11 +174,18 @@ var _default = (0, _iterateJsdoc.default)(({
173
174
  invalidTypes.push([nodeName, types]);
174
175
  } else if (!noDefaults && type === 'JsdocTypeName') {
175
176
  for (const strictNativeType of strictNativeTypes) {
176
- if (strictNativeType === 'object' && mode === 'typescript') {
177
+ if ( // Todo: Avoid typescript condition if moving to default typescript
178
+ strictNativeType === 'object' && mode === 'typescript' && ( // This is not set to remap with exact type match (e.g.,
179
+ // `object: 'Object'`), so can ignore (including if circular)
180
+ !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[nodeName]) || // Although present on `preferredTypes` for remapping, this is a
181
+ // parent object without a parent match (and not
182
+ // `unifyParentAndChildTypeChecks`) and we don't want
183
+ // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
184
+ parentNode !== null && parentNode !== void 0 && parentNode.elements.length && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.value) === 'Object')) {
177
185
  continue;
178
186
  }
179
187
 
180
- if (strictNativeType.toLowerCase() === nodeName.toLowerCase() && strictNativeType !== nodeName && ( // Don't report if user has own map for a strict native type
188
+ if (strictNativeType !== nodeName && strictNativeType.toLowerCase() === nodeName.toLowerCase() && ( // Don't report if user has own map for a strict native type
181
189
  !preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) {
182
190
  preferred = strictNativeType;
183
191
  invalidTypes.push([nodeName, preferred]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","toLowerCase","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\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\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n nodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n nodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n 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 (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([\n nodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType === 'object' && mode === 'typescript') {\n continue;\n }\n\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 || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([\n nodeName, preferred,\n ]);\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 = stringify(typeAst);\n\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 for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(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 docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\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","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","elements","left","toLowerCase","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\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\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n // eslint-disable-next-line complexity -- To refactor\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n nodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n nodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n 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 (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([\n nodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (\n // Todo: Avoid typescript condition if moving to default typescript\n strictNativeType === 'object' && mode === 'typescript' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[nodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements.length && (\n parentNode?.left.type === 'JsdocTypeName' &&\n parentNode?.left.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== nodeName &&\n strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([\n nodeName, preferred,\n ]);\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 = stringify(typeAst);\n\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 for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(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 docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\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"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "http://gajus.com"
6
6
  },
7
7
  "dependencies": {
8
- "@es-joy/jsdoccomment": "~0.17.0",
8
+ "@es-joy/jsdoccomment": "~0.18.0",
9
9
  "comment-parser": "1.3.0",
10
10
  "debug": "^4.3.3",
11
11
  "escape-string-regexp": "^4.0.0",
@@ -16,35 +16,35 @@
16
16
  },
17
17
  "description": "JSDoc linting rules for ESLint.",
18
18
  "devDependencies": {
19
- "@babel/cli": "^7.16.7",
20
- "@babel/core": "^7.16.7",
21
- "@babel/eslint-parser": "^7.16.5",
22
- "@babel/node": "^7.16.7",
19
+ "@babel/cli": "^7.17.0",
20
+ "@babel/core": "^7.17.0",
21
+ "@babel/eslint-parser": "^7.17.0",
22
+ "@babel/node": "^7.16.8",
23
23
  "@babel/plugin-syntax-class-properties": "^7.12.13",
24
24
  "@babel/plugin-transform-flow-strip-types": "^7.16.7",
25
- "@babel/preset-env": "^7.16.7",
26
- "@babel/register": "^7.16.7",
25
+ "@babel/preset-env": "^7.16.11",
26
+ "@babel/register": "^7.17.0",
27
27
  "@hkdobrev/run-if-changed": "^0.3.1",
28
- "@typescript-eslint/parser": "^5.9.0",
28
+ "@typescript-eslint/parser": "^5.10.2",
29
29
  "babel-plugin-add-module-exports": "^1.0.4",
30
30
  "babel-plugin-istanbul": "^6.1.1",
31
31
  "camelcase": "^6.3.0",
32
- "chai": "^4.3.4",
32
+ "chai": "^4.3.6",
33
33
  "cross-env": "^7.0.3",
34
34
  "decamelize": "^5.0.1",
35
- "eslint": "^8.6.0",
35
+ "eslint": "^8.8.0",
36
36
  "eslint-config-canonical": "^33.0.1",
37
37
  "gitdown": "^3.1.4",
38
38
  "glob": "^7.2.0",
39
39
  "husky": "^7.0.4",
40
- "lint-staged": "^12.1.7",
40
+ "lint-staged": "^12.3.3",
41
41
  "lodash.defaultsdeep": "^4.6.1",
42
- "mocha": "^9.1.3",
42
+ "mocha": "^9.2.0",
43
43
  "nyc": "^15.1.0",
44
44
  "open-editor": "^3.0.0",
45
45
  "rimraf": "^3.0.2",
46
- "semantic-release": "^18.0.1",
47
- "typescript": "^4.5.4"
46
+ "semantic-release": "^19.0.2",
47
+ "typescript": "^4.5.5"
48
48
  },
49
49
  "engines": {
50
50
  "node": "^12 || ^14 || ^16 || ^17"
@@ -107,5 +107,5 @@
107
107
  "test-index": "cross-env BABEL_ENV=test mocha --recursive --require @babel/register --reporter progress --timeout 12000 test/rules/index.js",
108
108
  "test-no-cov": "cross-env BABEL_ENV=test mocha --reporter dot --recursive --require @babel/register --timeout 12000"
109
109
  },
110
- "version": "37.6.1"
110
+ "version": "37.7.1"
111
111
  }