eslint-plugin-jsdoc 62.1.0 → 62.3.0
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/dist/rules/noUndefinedTypes.cjs +76 -1
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/typeFormatting.cjs +8 -0
- package/dist/rules/typeFormatting.cjs.map +1 -1
- package/dist/rules.d.ts +4 -0
- package/package.json +7 -7
- package/src/rules/noUndefinedTypes.js +110 -1
- package/src/rules/typeFormatting.js +8 -0
- package/src/rules.d.ts +4 -0
|
@@ -188,11 +188,71 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
188
188
|
return result;
|
|
189
189
|
};
|
|
190
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Recursively extracts types from a namespace declaration.
|
|
193
|
+
* @param {string} prefix - The namespace prefix (e.g., "MyNamespace" or "Outer.Inner").
|
|
194
|
+
* @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.
|
|
195
|
+
* @returns {string[]} Array of fully qualified type names.
|
|
196
|
+
*/
|
|
197
|
+
const getNamespaceTypes = (prefix, moduleDeclaration) => {
|
|
198
|
+
/* c8 ignore next 3 -- Guard for ambient modules without body. */
|
|
199
|
+
if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
return moduleDeclaration.body.body.flatMap(item => {
|
|
203
|
+
/** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */
|
|
204
|
+
let declaration = item;
|
|
205
|
+
if (item.type === 'ExportNamedDeclaration' && item.declaration) {
|
|
206
|
+
declaration = item.declaration;
|
|
207
|
+
}
|
|
208
|
+
if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {
|
|
209
|
+
/* c8 ignore next 4 -- Guard for anonymous class declarations. */
|
|
210
|
+
if (!declaration.id) {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
return [`${prefix}.${declaration.id.name}`];
|
|
214
|
+
}
|
|
215
|
+
if (declaration.type === 'TSInterfaceDeclaration') {
|
|
216
|
+
return [`${prefix}.${declaration.id.name}`, ...declaration.body.body.map(prop => {
|
|
217
|
+
// Only `TSPropertySignature` and `TSMethodSignature` have 'key'.
|
|
218
|
+
if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {
|
|
219
|
+
return '';
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Key can be computed or a literal, only handle Identifier.
|
|
223
|
+
if (prop.key.type !== 'Identifier') {
|
|
224
|
+
return '';
|
|
225
|
+
}
|
|
226
|
+
const propName = prop.key.name;
|
|
227
|
+
/* c8 ignore next -- `propName` is always truthy for Identifiers. */
|
|
228
|
+
return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';
|
|
229
|
+
}).filter(Boolean)];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Handle nested namespaces.
|
|
233
|
+
if (declaration.type === 'TSModuleDeclaration') {
|
|
234
|
+
/* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */
|
|
235
|
+
const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';
|
|
236
|
+
/* c8 ignore next 3 -- Guard. */
|
|
237
|
+
if (!nestedName) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
return [`${prefix}.${nestedName}`, ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration)];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).
|
|
244
|
+
return [];
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
|
|
191
248
|
/**
|
|
192
249
|
* We treat imports differently as we can't introspect their children.
|
|
193
250
|
* @type {string[]}
|
|
194
251
|
*/
|
|
195
252
|
const imports = [];
|
|
253
|
+
|
|
254
|
+
/** @type {Set<string>} */
|
|
255
|
+
const closedTypes = new Set();
|
|
196
256
|
const allDefinedTypes = new Set(globalScope.variables.map(({
|
|
197
257
|
name
|
|
198
258
|
}) => {
|
|
@@ -211,6 +271,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
211
271
|
const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */identifiers?.[0]?.parent;
|
|
212
272
|
switch (globalItem?.type) {
|
|
213
273
|
case 'ClassDeclaration':
|
|
274
|
+
closedTypes.add(name);
|
|
214
275
|
return [name, ...globalItem.body.body.map(item => {
|
|
215
276
|
const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */item?.key)?.name;
|
|
216
277
|
/* c8 ignore next 3 -- Guard */
|
|
@@ -233,6 +294,9 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
233
294
|
}
|
|
234
295
|
return `${name}.${property}`;
|
|
235
296
|
}).filter(Boolean)];
|
|
297
|
+
case 'TSModuleDeclaration':
|
|
298
|
+
closedTypes.add(name);
|
|
299
|
+
return [name, ...getNamespaceTypes(name, globalItem)];
|
|
236
300
|
case 'VariableDeclarator':
|
|
237
301
|
if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */globalItem?.init?.callee)?.name === 'require') {
|
|
238
302
|
imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */globalItem.id.name);
|
|
@@ -266,6 +330,15 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
266
330
|
}).filter(Boolean);
|
|
267
331
|
}
|
|
268
332
|
return [];
|
|
333
|
+
})()).concat((() => {
|
|
334
|
+
// Detect static property assignments like `MyClass.Prop = ...`
|
|
335
|
+
const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */sourceCode.ast.body;
|
|
336
|
+
return programBody.flatMap(statement => {
|
|
337
|
+
if (statement.type === 'ExpressionStatement' && statement.expression.type === 'AssignmentExpression' && statement.expression.left.type === 'MemberExpression' && statement.expression.left.object.type === 'Identifier' && statement.expression.left.property.type === 'Identifier' && closedTypes.has(statement.expression.left.object.name)) {
|
|
338
|
+
return [`${statement.expression.left.object.name}.${statement.expression.left.property.name}`];
|
|
339
|
+
}
|
|
340
|
+
return [];
|
|
341
|
+
});
|
|
269
342
|
})()).concat(...getValidRuntimeIdentifiers(node && (sourceCode.getScope && /* c8 ignore next 3 */
|
|
270
343
|
sourceCode.getScope(node) ||
|
|
271
344
|
// @ts-expect-error ESLint 8
|
|
@@ -369,7 +442,9 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
369
442
|
} while (currNode?.type === 'JsdocTypeNamePath');
|
|
370
443
|
if (type === 'JsdocTypeName') {
|
|
371
444
|
const structuredTypes = structuredTags[tag.tag]?.type;
|
|
372
|
-
|
|
445
|
+
const rootNamespace = val.split('.')[0];
|
|
446
|
+
const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) && !closedTypes.has(rootNamespace);
|
|
447
|
+
if (!allDefinedTypes.has(val) && !definedNamesAndNamepaths.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid) {
|
|
373
448
|
const parent =
|
|
374
449
|
/**
|
|
375
450
|
* @type {import('jsdoc-type-pratt-parser').RootResult & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","globalTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNameOrNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","init","callee","id","methodOrProp","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","definedNamesAndNamepaths","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","Array","isArray","typeParameters","some","typeParam","markVariableAsUsed","exit","loc","typedef","message","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst globalTypes = [\n 'globalThis', 'global', 'window', 'self',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\n\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdc = parseComment(commentNode, '');\n\n return jsdc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n // Module scope names are also defined\n return [\n name,\n ];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const definedNamesAndNamepaths = new Set(utils.filterTags(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n }).map(({\n name,\n }) => {\n return name;\n }));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n // eslint-disable-next-line complexity -- Refactor\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n !globalTypes.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty'\n ) {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n !definedNamesAndNamepaths.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n const parent =\n /**\n * @type {import('jsdoc-type-pratt-parser').RootResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (nde)._parent;\n if (parent?.type === 'JsdocTypeTypeParameter') {\n return;\n }\n\n if (parent?.type === 'JsdocTypeFunction' &&\n /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */\n (parent)?.typeParameters?.some((typeParam) => {\n return value === typeParam.name.value;\n })\n ) {\n return;\n }\n\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","globalTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","state","utils","foundTypedefValues","scopeManager","globalScope","checkUsedTypedefs","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefs","doc","tags","tag","isNameOrNamepathDefiningTag","includes","typedefDeclarations","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","getNamespaceTypes","prefix","moduleDeclaration","body","item","declaration","id","prop","key","propName","nestedName","imports","closedTypes","allDefinedTypes","identifiers","globalItem","property","init","callee","methodOrProp","programBody","ast","statement","expression","left","object","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","definedNamesAndNamepaths","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","right","structuredTypes","rootNamespace","isNamespaceValid","Array","isArray","typeParameters","some","typeParam","markVariableAsUsed","exit","loc","typedef","message","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst globalTypes = [\n 'globalThis', 'global', 'window', 'self',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n}) => {\n /** @type {string[]} */\n const foundTypedefValues = [];\n\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * checkUsedTypedefs: boolean\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean,\n * }}\n */ {\n checkUsedTypedefs = false,\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag) && ![\n 'arg',\n 'argument',\n 'param',\n 'prop',\n 'property',\n ].includes(tag);\n });\n });\n\n const typedefDeclarations = typedefs\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdc = parseComment(commentNode, '');\n\n return jsdc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * Recursively extracts types from a namespace declaration.\n * @param {string} prefix - The namespace prefix (e.g., \"MyNamespace\" or \"Outer.Inner\").\n * @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.\n * @returns {string[]} Array of fully qualified type names.\n */\n const getNamespaceTypes = (prefix, moduleDeclaration) => {\n /* c8 ignore next 3 -- Guard for ambient modules without body. */\n if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {\n return [];\n }\n\n return moduleDeclaration.body.body.flatMap((item) => {\n /** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */\n let declaration = item;\n\n if (item.type === 'ExportNamedDeclaration' && item.declaration) {\n declaration = item.declaration;\n }\n\n if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {\n /* c8 ignore next 4 -- Guard for anonymous class declarations. */\n if (!declaration.id) {\n return [];\n }\n\n return [\n `${prefix}.${declaration.id.name}`,\n ];\n }\n\n if (declaration.type === 'TSInterfaceDeclaration') {\n return [\n `${prefix}.${declaration.id.name}`,\n ...declaration.body.body.map((prop) => {\n // Only `TSPropertySignature` and `TSMethodSignature` have 'key'.\n if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {\n return '';\n }\n\n // Key can be computed or a literal, only handle Identifier.\n if (prop.key.type !== 'Identifier') {\n return '';\n }\n\n const propName = prop.key.name;\n /* c8 ignore next -- `propName` is always truthy for Identifiers. */\n return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';\n }).filter(Boolean),\n ];\n }\n\n // Handle nested namespaces.\n if (declaration.type === 'TSModuleDeclaration') {\n /* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */\n const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';\n /* c8 ignore next 3 -- Guard. */\n if (!nestedName) {\n return [];\n }\n\n return [\n `${prefix}.${nestedName}`,\n ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration),\n ];\n }\n\n // Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).\n return [];\n });\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n /** @type {Set<string>} */\n const closedTypes = new Set();\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'TSModuleDeclaration':\n closedTypes.add(name);\n return [\n name,\n ...getNamespaceTypes(name, globalItem),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n // Module scope names are also defined\n return [\n name,\n ];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat((() => {\n // Detect static property assignments like `MyClass.Prop = ...`\n const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */ (\n sourceCode.ast\n ).body;\n\n return programBody.flatMap((statement) => {\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'AssignmentExpression' &&\n statement.expression.left.type === 'MemberExpression' &&\n statement.expression.left.object.type === 'Identifier' &&\n statement.expression.left.property.type === 'Identifier' &&\n closedTypes.has(statement.expression.left.object.name)\n ) {\n return [\n `${statement.expression.left.object.name}.${statement.expression.left.property.name}`,\n ];\n }\n\n return [];\n });\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const definedNamesAndNamepaths = new Set(utils.filterTags(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n }).map(({\n name,\n }) => {\n return name;\n }));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n // eslint-disable-next-line complexity -- Refactor\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n !globalTypes.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty'\n ) {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n const rootNamespace = val.split('.')[0];\n const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) &&\n !closedTypes.has(rootNamespace);\n\n if (!allDefinedTypes.has(val) &&\n !definedNamesAndNamepaths.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid\n ) {\n const parent =\n /**\n * @type {import('jsdoc-type-pratt-parser').RootResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (nde)._parent;\n if (parent?.type === 'JsdocTypeTypeParameter') {\n return;\n }\n\n if (parent?.type === 'JsdocTypeFunction' &&\n /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */\n (parent)?.typeParameters?.some((typeParam) => {\n return value === typeParam.name.value;\n })\n ) {\n return;\n }\n\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n\n if (checkUsedTypedefs && typedefDeclarations.includes(val)) {\n foundTypedefValues.push(val);\n }\n }\n });\n }\n\n state.foundTypedefValues = foundTypedefValues;\n}, {\n // We use this method rather than checking at end of handler above because\n // in that case, it is invoked too many times and would thus report errors\n // too many times.\n exit ({\n context,\n state,\n utils,\n }) {\n const {\n checkUsedTypedefs = false,\n } = context.options[0] || {};\n\n if (!checkUsedTypedefs) {\n return;\n }\n\n const allComments = context.sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return {\n doc: parseComment(commentNode, ''),\n loc: commentNode.loc,\n };\n });\n const typedefs = comments\n .flatMap(({\n doc,\n loc,\n }) => {\n const tags = doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n if (!tags.length) {\n return [];\n }\n\n return {\n loc,\n tags,\n };\n });\n\n for (const typedef of typedefs) {\n if (\n !state.foundTypedefValues.includes(typedef.tags[0].name)\n ) {\n context.report({\n loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc),\n message: 'This typedef was not used within the file',\n });\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkUsedTypedefs: {\n description: 'Whether to check typedefs for use within the file',\n type: 'boolean',\n },\n definedTypes: {\n description: `This array can be populated to indicate other types which\nare automatically considered as defined (in addition to globals, etc.).\nDefaults to an empty array.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n description: `Whether to disable reporting of errors. Defaults to\n\\`false\\`. This may be set to \\`true\\` in order to take advantage of only\nmarking defined variables as used or checking used typedefs.`,\n type: 'boolean',\n },\n markVariablesAsUsed: {\n description: `Whether to mark variables as used for the purposes\nof the \\`no-unused-vars\\` rule when they are not found to be undefined.\nDefaults to \\`true\\`. May be set to \\`false\\` to enforce a practice of not\nimporting types unless used in code.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -39,6 +39,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
39
39
|
objectFieldSeparator = 'comma',
|
|
40
40
|
objectFieldSeparatorOptionalLinebreak = true,
|
|
41
41
|
objectFieldSeparatorTrailingPunctuation = false,
|
|
42
|
+
objectTypeBracketSpacing = '',
|
|
42
43
|
parameterDefaultValueSpacing = ' ',
|
|
43
44
|
postMethodNameSpacing = '',
|
|
44
45
|
postNewSpacing = ' ',
|
|
@@ -320,6 +321,9 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
320
321
|
typeNode.meta.propertyIndent = objectFieldIndent;
|
|
321
322
|
typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;
|
|
322
323
|
errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;
|
|
324
|
+
} else if ((typeNode.meta.bracketSpacing ?? '') !== objectTypeBracketSpacing) {
|
|
325
|
+
typeNode.meta.bracketSpacing = objectTypeBracketSpacing;
|
|
326
|
+
errorMessage = `Object type bracket spacing should be "${objectTypeBracketSpacing}"`;
|
|
323
327
|
}
|
|
324
328
|
break;
|
|
325
329
|
}
|
|
@@ -539,6 +543,10 @@ will determine whether to add punctuation corresponding to the
|
|
|
539
543
|
Defaults to \`false\`.`,
|
|
540
544
|
type: 'boolean'
|
|
541
545
|
},
|
|
546
|
+
objectTypeBracketSpacing: {
|
|
547
|
+
description: 'The space character (if any) to add after an object\'s initial curly bracket and before its ending curly bracket',
|
|
548
|
+
type: 'string'
|
|
549
|
+
},
|
|
542
550
|
parameterDefaultValueSpacing: {
|
|
543
551
|
description: 'The space character (if any) to use between the equal signs of a default value. Defaults to " ".',
|
|
544
552
|
type: 'string'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeFormatting.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdocUtils","_jsdoccomment","e","__esModule","default","digitRegex","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","arrayBrackets","arrowFunctionPostReturnMarkerSpacing","arrowFunctionPreReturnMarkerSpacing","enableFixer","functionOrClassParameterSpacing","functionOrClassPostGenericSpacing","functionOrClassPostReturnMarkerSpacing","functionOrClassPreReturnMarkerSpacing","functionOrClassTypeParameterSpacing","genericAndTupleElementSpacing","genericDot","keyValuePostColonSpacing","keyValuePostKeySpacing","keyValuePostOptionalSpacing","keyValuePostVariadicSpacing","methodQuotes","objectFieldIndent","objectFieldQuote","objectFieldSeparator","objectFieldSeparatorOptionalLinebreak","objectFieldSeparatorTrailingPunctuation","parameterDefaultValueSpacing","postMethodNameSpacing","postNewSpacing","separatorForSingleObjectField","stringQuotes","typeBracketSpacing","unionSpacing","options","mode","checkTypeFormats","tag","potentialType","type","parsedType","tryParseType","parseType","fix","rewireByParsedType","errorMessages","startsWith","endsWith","push","test","traverse","nde","errorMessage","conditionalAdds","meta","typNode","newMeta","parameterSpacing","postGenericSpacing","postReturnMarkerSpacing","preReturnMarkerSpacing","typeParameterSpacing","typeNode","arrow","quote","undefined","left","value","brackets","dot","elementSpacing","postKeySpacing","postColonSpacing","postOptionalSpacing","postVariadicSpacing","variadic","separator","propertyIndent","trailingPunctuation","replace","key","defaultValue","defaultValueSpacing","spacing","differentResult","stringify","length","reportJSDoc","tags","getPresentTags","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/typeFormatting.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nconst digitRegex = (/^(\\d+(\\.\\d*)?|\\.\\d+)([eE][\\-+]?\\d+)?$/v);\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n utils,\n// eslint-disable-next-line complexity -- Todo\n}) => {\n const {\n arrayBrackets = 'square',\n arrowFunctionPostReturnMarkerSpacing = ' ',\n arrowFunctionPreReturnMarkerSpacing = ' ',\n enableFixer = true,\n functionOrClassParameterSpacing = ' ',\n functionOrClassPostGenericSpacing = '',\n functionOrClassPostReturnMarkerSpacing = ' ',\n functionOrClassPreReturnMarkerSpacing = '',\n functionOrClassTypeParameterSpacing = ' ',\n genericAndTupleElementSpacing = ' ',\n genericDot = false,\n keyValuePostColonSpacing = ' ',\n keyValuePostKeySpacing = '',\n keyValuePostOptionalSpacing = '',\n keyValuePostVariadicSpacing = '',\n methodQuotes = 'double',\n objectFieldIndent = '',\n objectFieldQuote = null,\n objectFieldSeparator = 'comma',\n objectFieldSeparatorOptionalLinebreak = true,\n objectFieldSeparatorTrailingPunctuation = false,\n parameterDefaultValueSpacing = ' ',\n postMethodNameSpacing = '',\n postNewSpacing = ' ',\n // propertyQuotes = null,\n separatorForSingleObjectField = false,\n stringQuotes = 'double',\n typeBracketSpacing = '',\n unionSpacing = ' ',\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkTypeFormats = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n const fix = () => {\n rewireByParsedType(jsdoc, tag, parsedType, indent, typeBracketSpacing);\n };\n\n /** @type {string[]} */\n const errorMessages = [];\n\n if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) {\n errorMessages.push(`Must have initial and final \"${typeBracketSpacing}\" spacing`);\n } else if (!typeBracketSpacing && ((/^\\s/v).test(tag.type) || (/\\s$/v).test(tag.type))) {\n errorMessages.push('Must have no initial spacing');\n }\n\n // eslint-disable-next-line complexity -- Todo\n traverse(parsedType, (nde) => {\n let errorMessage = '';\n\n /**\n * @param {Partial<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing?: string,\n * postMethodNameSpacing?: string\n * }} meta\n * @returns {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing?: string,\n * postMethodNameSpacing?: string\n * }}\n */\n const conditionalAdds = (meta) => {\n const typNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').FunctionResult|\n * import('jsdoc-type-pratt-parser').CallSignatureResult|\n * import('jsdoc-type-pratt-parser').ComputedMethodResult|\n * import('jsdoc-type-pratt-parser').ConstructorSignatureResult|\n * import('jsdoc-type-pratt-parser').MethodSignatureResult\n * }\n */ (nde);\n\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing?: string,\n * postMethodNameSpacing?: string\n * }}\n */\n const newMeta = {\n parameterSpacing: meta.parameterSpacing ?? typNode.meta?.parameterSpacing ?? ' ',\n postGenericSpacing: meta.postGenericSpacing ?? typNode.meta?.postGenericSpacing ?? '',\n postReturnMarkerSpacing: meta.postReturnMarkerSpacing ?? typNode.meta?.postReturnMarkerSpacing ?? ' ',\n preReturnMarkerSpacing: meta.preReturnMarkerSpacing ?? typNode.meta?.preReturnMarkerSpacing ?? '',\n typeParameterSpacing: meta.typeParameterSpacing ?? typNode.meta?.typeParameterSpacing ?? ' ',\n };\n\n if (typNode.type === 'JsdocTypeConstructorSignature') {\n newMeta.postNewSpacing = meta.postNewSpacing;\n }\n\n if (typNode.type === 'JsdocTypeMethodSignature') {\n newMeta.postMethodNameSpacing = meta.postMethodNameSpacing ?? typNode.meta?.postMethodNameSpacing ?? '';\n }\n\n return newMeta;\n };\n\n switch (nde.type) {\n case 'JsdocTypeConstructorSignature': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ConstructorSignatureResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.postNewSpacing ?? ' ') !== postNewSpacing) {\n typeNode.meta =\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing: string,\n * }}\n */ (conditionalAdds({\n postNewSpacing,\n }));\n errorMessage = `Post-\\`new\\` spacing should be \"${postNewSpacing}\"`;\n break;\n }\n }\n\n case 'JsdocTypeFunction': {\n const typeNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').FunctionResult}\n */ nde;\n if ('arrow' in typeNode && typeNode.arrow) {\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.postReturnMarkerSpacing ?? ' ') !== arrowFunctionPostReturnMarkerSpacing) {\n typeNode.meta =\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing: string,\n * }}\n */ (conditionalAdds({\n postReturnMarkerSpacing: arrowFunctionPostReturnMarkerSpacing,\n /* c8 ignore next -- Guard */\n preReturnMarkerSpacing: typeNode.meta?.preReturnMarkerSpacing ?? ' ',\n }));\n errorMessage = `Post-return-marker spacing should be \"${arrowFunctionPostReturnMarkerSpacing}\"`;\n break;\n /* c8 ignore next -- Guard */\n } else if ((typeNode.meta?.preReturnMarkerSpacing ?? ' ') !== arrowFunctionPreReturnMarkerSpacing) {\n typeNode.meta =\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing: string,\n * }}\n */ (conditionalAdds({\n /* c8 ignore next -- Guard */\n postReturnMarkerSpacing: typeNode.meta?.postReturnMarkerSpacing ?? ' ',\n preReturnMarkerSpacing: arrowFunctionPreReturnMarkerSpacing,\n }));\n errorMessage = `Pre-return-marker spacing should be \"${arrowFunctionPreReturnMarkerSpacing}\"`;\n break;\n }\n\n break;\n }\n }\n\n case 'JsdocTypeCallSignature':\n case 'JsdocTypeComputedMethod':\n case 'JsdocTypeMethodSignature': {\n const typeNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').FunctionResult|\n * import('jsdoc-type-pratt-parser').CallSignatureResult|\n * import('jsdoc-type-pratt-parser').ComputedMethodResult|\n * import('jsdoc-type-pratt-parser').ConstructorSignatureResult|\n * import('jsdoc-type-pratt-parser').MethodSignatureResult\n * }\n */ (nde);\n if (typeNode.type === 'JsdocTypeMethodSignature' &&\n (typeNode.meta?.postMethodNameSpacing ?? '') !== postMethodNameSpacing\n ) {\n typeNode.meta = {\n quote: typeNode.meta.quote,\n ...conditionalAdds({\n postMethodNameSpacing,\n }),\n };\n errorMessage = `Post-method-name spacing should be \"${postMethodNameSpacing}\"`;\n break;\n } else if (typeNode.type === 'JsdocTypeMethodSignature' &&\n typeNode.meta.quote !== undefined &&\n typeNode.meta.quote !== methodQuotes\n ) {\n typeNode.meta = {\n ...conditionalAdds({\n postMethodNameSpacing: typeNode.meta.postMethodNameSpacing ?? '',\n }),\n quote: methodQuotes,\n };\n errorMessage = `Method quoting style should be \"${methodQuotes}\"`;\n break;\n }\n\n if ((typeNode.meta?.parameterSpacing ?? ' ') !== functionOrClassParameterSpacing) {\n typeNode.meta = conditionalAdds({\n parameterSpacing: functionOrClassParameterSpacing,\n });\n errorMessage = `Parameter spacing should be \"${functionOrClassParameterSpacing}\"`;\n } else if ((typeNode.meta?.postGenericSpacing ?? '') !== functionOrClassPostGenericSpacing) {\n typeNode.meta = conditionalAdds({\n postGenericSpacing: functionOrClassPostGenericSpacing,\n });\n errorMessage = `Post-generic spacing should be \"${functionOrClassPostGenericSpacing}\"`;\n } else if ((typeNode.meta?.postReturnMarkerSpacing ?? ' ') !== functionOrClassPostReturnMarkerSpacing) {\n typeNode.meta = conditionalAdds({\n postReturnMarkerSpacing: functionOrClassPostReturnMarkerSpacing,\n });\n errorMessage = `Post-return-marker spacing should be \"${functionOrClassPostReturnMarkerSpacing}\"`;\n } else if ((typeNode.meta?.preReturnMarkerSpacing ?? '') !== functionOrClassPreReturnMarkerSpacing) {\n typeNode.meta = conditionalAdds({\n preReturnMarkerSpacing: functionOrClassPreReturnMarkerSpacing,\n });\n errorMessage = `Pre-return-marker spacing should be \"${functionOrClassPreReturnMarkerSpacing}\"`;\n } else if ((typeNode.meta?.typeParameterSpacing ?? ' ') !== functionOrClassTypeParameterSpacing) {\n typeNode.meta = conditionalAdds({\n typeParameterSpacing: functionOrClassTypeParameterSpacing,\n });\n errorMessage = `Type parameter spacing should be \"${functionOrClassTypeParameterSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeGeneric': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde);\n if ('value' in typeNode.left && typeNode.left.value === 'Array') {\n if (typeNode.meta.brackets !== arrayBrackets) {\n typeNode.meta.brackets = arrayBrackets;\n errorMessage = `Array bracket style should be ${arrayBrackets}`;\n }\n } else if (typeNode.meta.dot !== genericDot) {\n typeNode.meta.dot = genericDot;\n errorMessage = `Dot usage should be ${genericDot}`;\n } else if ((typeNode.meta.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) {\n typeNode.meta.elementSpacing = genericAndTupleElementSpacing;\n errorMessage = `Element spacing should be \"${genericAndTupleElementSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeKeyValue': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').KeyValueResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) {\n typeNode.meta = {\n /* c8 ignore next -- Guard */\n postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ',\n postKeySpacing: keyValuePostKeySpacing,\n /* c8 ignore next 2 -- Guard */\n postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '',\n postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '',\n };\n errorMessage = `Post key spacing should be \"${keyValuePostKeySpacing}\"`;\n /* c8 ignore next -- Guard */\n } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) {\n typeNode.meta = {\n postColonSpacing: keyValuePostColonSpacing,\n /* c8 ignore next 3 -- Guard */\n postKeySpacing: typeNode.meta?.postKeySpacing ?? '',\n postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '',\n postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '',\n };\n errorMessage = `Post colon spacing should be \"${keyValuePostColonSpacing}\"`;\n /* c8 ignore next -- Guard */\n } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) {\n typeNode.meta = {\n /* c8 ignore next 2 -- Guard */\n postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ',\n postKeySpacing: typeNode.meta?.postKeySpacing ?? '',\n postOptionalSpacing: keyValuePostOptionalSpacing,\n /* c8 ignore next -- Guard */\n postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '',\n };\n errorMessage = `Post optional (\\`?\\`) spacing should be \"${keyValuePostOptionalSpacing}\"`;\n /* c8 ignore next -- Guard */\n } else if (typeNode.variadic && (typeNode.meta?.postVariadicSpacing ?? '') !== keyValuePostVariadicSpacing) {\n typeNode.meta = {\n /* c8 ignore next 3 -- Guard */\n postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ',\n postKeySpacing: typeNode.meta?.postKeySpacing ?? '',\n postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '',\n postVariadicSpacing: keyValuePostVariadicSpacing,\n };\n errorMessage = `Post variadic (\\`...\\`) spacing should be \"${keyValuePostVariadicSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeObject': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde);\n /* c8 ignore next -- Guard */\n const separator = typeNode.meta.separator ?? 'comma';\n if (\n (separator !== objectFieldSeparator &&\n (!objectFieldSeparatorOptionalLinebreak ||\n !(objectFieldSeparator.endsWith('-linebreak') &&\n objectFieldSeparator.startsWith(separator)))) ||\n (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField ||\n ((typeNode.meta.propertyIndent ?? '') !== objectFieldIndent &&\n separator.endsWith('-linebreak')) ||\n (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation\n ) {\n typeNode.meta.separator = objectFieldSeparatorOptionalLinebreak && !separator.endsWith('and-linebreak') ?\n objectFieldSeparator.replace(/-and-linebreak$/v, '') :\n objectFieldSeparator;\n typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;\n typeNode.meta.propertyIndent = objectFieldIndent;\n typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;\n errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;\n }\n\n break;\n }\n\n case 'JsdocTypeObjectField': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde);\n if ((objectFieldQuote ||\n (typeof typeNode.key === 'string' &&\n (\n (/^[\\p{ID_Start}$_][\\p{ID_Continue}$\\u200C\\u200D]*$/v).test(typeNode.key) ||\n digitRegex.test(typeNode.key)\n )\n )) &&\n typeNode.meta.quote !== (objectFieldQuote ?? undefined) &&\n (typeof typeNode.key !== 'string' ||\n !digitRegex.test(typeNode.key))\n ) {\n typeNode.meta.quote = objectFieldQuote ?? undefined;\n errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`;\n } else if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) {\n typeNode.meta.postKeySpacing = keyValuePostKeySpacing;\n errorMessage = `Post key spacing should be \"${keyValuePostKeySpacing}\"`;\n } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) {\n typeNode.meta.postColonSpacing = keyValuePostColonSpacing;\n errorMessage = `Post colon spacing should be \"${keyValuePostColonSpacing}\"`;\n } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) {\n typeNode.meta.postOptionalSpacing = keyValuePostOptionalSpacing;\n errorMessage = `Post optional (\\`?\\`) spacing should be \"${keyValuePostOptionalSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeStringValue': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde);\n if (typeNode.meta.quote !== stringQuotes) {\n typeNode.meta.quote = stringQuotes;\n errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;\n }\n\n break;\n }\n\n // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524\n // case 'JsdocTypeProperty': {\n // const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde);\n\n // if ((propertyQuotes ||\n // (typeof typeNode.value === 'string' && !(/\\s/v).test(typeNode.value))) &&\n // typeNode.meta.quote !== (propertyQuotes ?? undefined)\n // ) {\n // typeNode.meta.quote = propertyQuotes ?? undefined;\n // errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`;\n // }\n\n // break;\n // }\n\n case 'JsdocTypeTuple': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').TupleResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) {\n typeNode.meta = {\n elementSpacing: genericAndTupleElementSpacing,\n };\n errorMessage = `Element spacing should be \"${genericAndTupleElementSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeTypeParameter': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').TypeParameterResult} */ (nde);\n /* c8 ignore next -- Guard */\n if (typeNode.defaultValue && (typeNode.meta?.defaultValueSpacing ?? ' ') !== parameterDefaultValueSpacing) {\n typeNode.meta = {\n defaultValueSpacing: parameterDefaultValueSpacing,\n };\n errorMessage = `Default value spacing should be \"${parameterDefaultValueSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeUnion': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) {\n typeNode.meta = {\n spacing: unionSpacing,\n };\n errorMessage = `Inconsistent \"${unionSpacing}\" union spacing usage`;\n }\n\n break;\n }\n\n default:\n break;\n }\n\n if (errorMessage) {\n errorMessages.push(errorMessage);\n }\n });\n\n const differentResult = tag.type !==\n typeBracketSpacing + stringify(parsedType) + typeBracketSpacing;\n\n if (errorMessages.length && differentResult) {\n for (const errorMessage of errorMessages) {\n utils.reportJSDoc(\n errorMessage, tag, enableFixer ? fix : null,\n );\n }\n // Stringification may have been equal previously (and thus no error reported)\n // because the stringification doesn't preserve everything\n } else if (differentResult) {\n utils.reportJSDoc(\n 'There was an error with type formatting', tag, enableFixer ? fix : null,\n );\n }\n };\n\n const tags = utils.getPresentTags([\n 'param',\n 'property',\n 'returns',\n 'this',\n 'throws',\n 'type',\n 'typedef',\n 'yields',\n ]);\n for (const tag of tags) {\n if (tag.type) {\n checkTypeFormats(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Formats JSDoc type values.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/type-formatting.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n arrayBrackets: {\n description: 'Determines how array generics are represented. Set to `angle` for the style `Array<type>` or `square` for the style `type[]`. Defaults to \"square\".',\n enum: [\n 'angle',\n 'square',\n ],\n type: 'string',\n },\n arrowFunctionPostReturnMarkerSpacing: {\n description: 'The space character (if any) to use after return markers (`=>`). Defaults to \" \".',\n type: 'string',\n },\n arrowFunctionPreReturnMarkerSpacing: {\n description: 'The space character (if any) to use before return markers (`=>`). Defaults to \" \".',\n type: 'string',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\n type: 'boolean',\n },\n functionOrClassParameterSpacing: {\n description: 'The space character (if any) to use between function or class parameters. Defaults to \" \".',\n type: 'string',\n },\n functionOrClassPostGenericSpacing: {\n description: 'The space character (if any) to use after a generic expression in a function or class. Defaults to \"\".',\n type: 'string',\n },\n functionOrClassPostReturnMarkerSpacing: {\n description: 'The space character (if any) to use after return markers (`:`). Defaults to \"\".',\n type: 'string',\n },\n functionOrClassPreReturnMarkerSpacing: {\n description: 'The space character (if any) to use before return markers (`:`). Defaults to \"\".',\n type: 'string',\n },\n functionOrClassTypeParameterSpacing: {\n description: 'The space character (if any) to use between type parameters in a function or class. Defaults to \" \".',\n type: 'string',\n },\n genericAndTupleElementSpacing: {\n description: 'The space character (if any) to use between elements in generics and tuples. Defaults to \" \".',\n type: 'string',\n },\n genericDot: {\n description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.<AnotherType>`). Defaults to `false`.',\n type: 'boolean',\n },\n keyValuePostColonSpacing: {\n description: 'The amount of spacing (if any) after the colon of a key-value or object-field pair. Defaults to \" \".',\n type: 'string',\n },\n keyValuePostKeySpacing: {\n description: 'The amount of spacing (if any) immediately after keys in a key-value or object-field pair. Defaults to \"\".',\n type: 'string',\n },\n keyValuePostOptionalSpacing: {\n description: 'The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair. Defaults to \"\".',\n type: 'string',\n },\n keyValuePostVariadicSpacing: {\n description: 'The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair. Defaults to \"\".',\n type: 'string',\n },\n methodQuotes: {\n description: 'The style of quotation mark for surrounding method names when quoted. Defaults to `double`',\n enum: [\n 'double',\n 'single',\n ],\n type: 'string',\n },\n objectFieldIndent: {\n description: `A string indicating the whitespace to be added on each line preceding an\nobject property-value field. Defaults to the empty string.`,\n type: 'string',\n },\n objectFieldQuote: {\n description: `Whether and how object field properties should be quoted (e.g., \\`{\"a\": string}\\`).\nSet to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\nrequired due to special characters within the field). Digits will be kept as is,\nregardless of setting (they can either represent a digit or a string digit).`,\n enum: [\n 'double',\n 'single',\n null,\n ],\n },\n objectFieldSeparator: {\n description: `For object properties, specify whether a \"semicolon\", \"comma\", \"linebreak\",\n\"semicolon-and-linebreak\", or \"comma-and-linebreak\" should be used after\neach object property-value pair.\n\nDefaults to \\`\"comma\"\\`.`,\n enum: [\n 'comma',\n 'comma-and-linebreak',\n 'linebreak',\n 'semicolon',\n 'semicolon-and-linebreak',\n ],\n type: 'string',\n },\n objectFieldSeparatorOptionalLinebreak: {\n description: `Whether \\`objectFieldSeparator\\` set to \\`\"semicolon-and-linebreak\"\\` or\n\\`\"comma-and-linebreak\"\\` should be allowed to optionally drop the linebreak.\n\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n objectFieldSeparatorTrailingPunctuation: {\n description: `If \\`separatorForSingleObjectField\\` is not in effect (i.e., if it is \\`false\\`\nor there are multiple property-value object fields present), this property\nwill determine whether to add punctuation corresponding to the\n\\`objectFieldSeparator\\` (e.g., a semicolon) to the final object field.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n parameterDefaultValueSpacing: {\n description: 'The space character (if any) to use between the equal signs of a default value. Defaults to \" \".',\n type: 'string',\n },\n postMethodNameSpacing: {\n description: 'The space character (if any) to add after a method name. Defaults to \"\".',\n type: 'string',\n },\n postNewSpacing: {\n description: 'The space character (if any) to add after \"new\" in a constructor. Defaults to \" \".',\n type: 'string',\n },\n // propertyQuotes: {\n // description: `Whether and how namepath properties should be quoted (e.g., \\`ab.\"cd\".\"ef\"\\`).\n // Set to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\n // required due to whitespace within the property).`,\n // enum: [\n // 'double',\n // 'single',\n // null,\n // ],\n // },\n separatorForSingleObjectField: {\n description: `Whether to apply the \\`objectFieldSeparator\\` (e.g., a semicolon) when there\nis only one property-value object field present. Defaults to \\`false\\`.`,\n type: 'boolean',\n },\n stringQuotes: {\n description: `How string literals should be quoted (e.g., \\`\"abc\"\\`). Set to \\`single\\`\nor \\`double\\`. Defaults to 'double'.`,\n enum: [\n 'double',\n 'single',\n ],\n type: 'string',\n },\n typeBracketSpacing: {\n description: `A string of spaces that will be added immediately after the type's initial\ncurly bracket and immediately before its ending curly bracket. Defaults\nto the empty string.`,\n type: 'string',\n },\n unionSpacing: {\n description: 'Determines the spacing to add to unions (`|`). Defaults to a single space (`\" \"`).',\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"typeFormatting.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdocUtils","_jsdoccomment","e","__esModule","default","digitRegex","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","arrayBrackets","arrowFunctionPostReturnMarkerSpacing","arrowFunctionPreReturnMarkerSpacing","enableFixer","functionOrClassParameterSpacing","functionOrClassPostGenericSpacing","functionOrClassPostReturnMarkerSpacing","functionOrClassPreReturnMarkerSpacing","functionOrClassTypeParameterSpacing","genericAndTupleElementSpacing","genericDot","keyValuePostColonSpacing","keyValuePostKeySpacing","keyValuePostOptionalSpacing","keyValuePostVariadicSpacing","methodQuotes","objectFieldIndent","objectFieldQuote","objectFieldSeparator","objectFieldSeparatorOptionalLinebreak","objectFieldSeparatorTrailingPunctuation","objectTypeBracketSpacing","parameterDefaultValueSpacing","postMethodNameSpacing","postNewSpacing","separatorForSingleObjectField","stringQuotes","typeBracketSpacing","unionSpacing","options","mode","checkTypeFormats","tag","potentialType","type","parsedType","tryParseType","parseType","fix","rewireByParsedType","errorMessages","startsWith","endsWith","push","test","traverse","nde","errorMessage","conditionalAdds","meta","typNode","newMeta","parameterSpacing","postGenericSpacing","postReturnMarkerSpacing","preReturnMarkerSpacing","typeParameterSpacing","typeNode","arrow","quote","undefined","left","value","brackets","dot","elementSpacing","postKeySpacing","postColonSpacing","postOptionalSpacing","postVariadicSpacing","variadic","separator","propertyIndent","trailingPunctuation","replace","bracketSpacing","key","defaultValue","defaultValueSpacing","spacing","differentResult","stringify","length","reportJSDoc","tags","getPresentTags","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/typeFormatting.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nconst digitRegex = (/^(\\d+(\\.\\d*)?|\\.\\d+)([eE][\\-+]?\\d+)?$/v);\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n utils,\n// eslint-disable-next-line complexity -- Todo\n}) => {\n const {\n arrayBrackets = 'square',\n arrowFunctionPostReturnMarkerSpacing = ' ',\n arrowFunctionPreReturnMarkerSpacing = ' ',\n enableFixer = true,\n functionOrClassParameterSpacing = ' ',\n functionOrClassPostGenericSpacing = '',\n functionOrClassPostReturnMarkerSpacing = ' ',\n functionOrClassPreReturnMarkerSpacing = '',\n functionOrClassTypeParameterSpacing = ' ',\n genericAndTupleElementSpacing = ' ',\n genericDot = false,\n keyValuePostColonSpacing = ' ',\n keyValuePostKeySpacing = '',\n keyValuePostOptionalSpacing = '',\n keyValuePostVariadicSpacing = '',\n methodQuotes = 'double',\n objectFieldIndent = '',\n objectFieldQuote = null,\n objectFieldSeparator = 'comma',\n objectFieldSeparatorOptionalLinebreak = true,\n objectFieldSeparatorTrailingPunctuation = false,\n objectTypeBracketSpacing = '',\n parameterDefaultValueSpacing = ' ',\n postMethodNameSpacing = '',\n postNewSpacing = ' ',\n // propertyQuotes = null,\n separatorForSingleObjectField = false,\n stringQuotes = 'double',\n typeBracketSpacing = '',\n unionSpacing = ' ',\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkTypeFormats = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n const fix = () => {\n rewireByParsedType(jsdoc, tag, parsedType, indent, typeBracketSpacing);\n };\n\n /** @type {string[]} */\n const errorMessages = [];\n\n if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) {\n errorMessages.push(`Must have initial and final \"${typeBracketSpacing}\" spacing`);\n } else if (!typeBracketSpacing && ((/^\\s/v).test(tag.type) || (/\\s$/v).test(tag.type))) {\n errorMessages.push('Must have no initial spacing');\n }\n\n // eslint-disable-next-line complexity -- Todo\n traverse(parsedType, (nde) => {\n let errorMessage = '';\n\n /**\n * @param {Partial<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing?: string,\n * postMethodNameSpacing?: string\n * }} meta\n * @returns {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing?: string,\n * postMethodNameSpacing?: string\n * }}\n */\n const conditionalAdds = (meta) => {\n const typNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').FunctionResult|\n * import('jsdoc-type-pratt-parser').CallSignatureResult|\n * import('jsdoc-type-pratt-parser').ComputedMethodResult|\n * import('jsdoc-type-pratt-parser').ConstructorSignatureResult|\n * import('jsdoc-type-pratt-parser').MethodSignatureResult\n * }\n */ (nde);\n\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing?: string,\n * postMethodNameSpacing?: string\n * }}\n */\n const newMeta = {\n parameterSpacing: meta.parameterSpacing ?? typNode.meta?.parameterSpacing ?? ' ',\n postGenericSpacing: meta.postGenericSpacing ?? typNode.meta?.postGenericSpacing ?? '',\n postReturnMarkerSpacing: meta.postReturnMarkerSpacing ?? typNode.meta?.postReturnMarkerSpacing ?? ' ',\n preReturnMarkerSpacing: meta.preReturnMarkerSpacing ?? typNode.meta?.preReturnMarkerSpacing ?? '',\n typeParameterSpacing: meta.typeParameterSpacing ?? typNode.meta?.typeParameterSpacing ?? ' ',\n };\n\n if (typNode.type === 'JsdocTypeConstructorSignature') {\n newMeta.postNewSpacing = meta.postNewSpacing;\n }\n\n if (typNode.type === 'JsdocTypeMethodSignature') {\n newMeta.postMethodNameSpacing = meta.postMethodNameSpacing ?? typNode.meta?.postMethodNameSpacing ?? '';\n }\n\n return newMeta;\n };\n\n switch (nde.type) {\n case 'JsdocTypeConstructorSignature': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ConstructorSignatureResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.postNewSpacing ?? ' ') !== postNewSpacing) {\n typeNode.meta =\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing: string,\n * }}\n */ (conditionalAdds({\n postNewSpacing,\n }));\n errorMessage = `Post-\\`new\\` spacing should be \"${postNewSpacing}\"`;\n break;\n }\n }\n\n case 'JsdocTypeFunction': {\n const typeNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').FunctionResult}\n */ nde;\n if ('arrow' in typeNode && typeNode.arrow) {\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.postReturnMarkerSpacing ?? ' ') !== arrowFunctionPostReturnMarkerSpacing) {\n typeNode.meta =\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing: string,\n * }}\n */ (conditionalAdds({\n postReturnMarkerSpacing: arrowFunctionPostReturnMarkerSpacing,\n /* c8 ignore next -- Guard */\n preReturnMarkerSpacing: typeNode.meta?.preReturnMarkerSpacing ?? ' ',\n }));\n errorMessage = `Post-return-marker spacing should be \"${arrowFunctionPostReturnMarkerSpacing}\"`;\n break;\n /* c8 ignore next -- Guard */\n } else if ((typeNode.meta?.preReturnMarkerSpacing ?? ' ') !== arrowFunctionPreReturnMarkerSpacing) {\n typeNode.meta =\n /**\n * @type {Required<import('jsdoc-type-pratt-parser').FunctionResult['meta']> & {\n * postNewSpacing: string,\n * }}\n */ (conditionalAdds({\n /* c8 ignore next -- Guard */\n postReturnMarkerSpacing: typeNode.meta?.postReturnMarkerSpacing ?? ' ',\n preReturnMarkerSpacing: arrowFunctionPreReturnMarkerSpacing,\n }));\n errorMessage = `Pre-return-marker spacing should be \"${arrowFunctionPreReturnMarkerSpacing}\"`;\n break;\n }\n\n break;\n }\n }\n\n case 'JsdocTypeCallSignature':\n case 'JsdocTypeComputedMethod':\n case 'JsdocTypeMethodSignature': {\n const typeNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').FunctionResult|\n * import('jsdoc-type-pratt-parser').CallSignatureResult|\n * import('jsdoc-type-pratt-parser').ComputedMethodResult|\n * import('jsdoc-type-pratt-parser').ConstructorSignatureResult|\n * import('jsdoc-type-pratt-parser').MethodSignatureResult\n * }\n */ (nde);\n if (typeNode.type === 'JsdocTypeMethodSignature' &&\n (typeNode.meta?.postMethodNameSpacing ?? '') !== postMethodNameSpacing\n ) {\n typeNode.meta = {\n quote: typeNode.meta.quote,\n ...conditionalAdds({\n postMethodNameSpacing,\n }),\n };\n errorMessage = `Post-method-name spacing should be \"${postMethodNameSpacing}\"`;\n break;\n } else if (typeNode.type === 'JsdocTypeMethodSignature' &&\n typeNode.meta.quote !== undefined &&\n typeNode.meta.quote !== methodQuotes\n ) {\n typeNode.meta = {\n ...conditionalAdds({\n postMethodNameSpacing: typeNode.meta.postMethodNameSpacing ?? '',\n }),\n quote: methodQuotes,\n };\n errorMessage = `Method quoting style should be \"${methodQuotes}\"`;\n break;\n }\n\n if ((typeNode.meta?.parameterSpacing ?? ' ') !== functionOrClassParameterSpacing) {\n typeNode.meta = conditionalAdds({\n parameterSpacing: functionOrClassParameterSpacing,\n });\n errorMessage = `Parameter spacing should be \"${functionOrClassParameterSpacing}\"`;\n } else if ((typeNode.meta?.postGenericSpacing ?? '') !== functionOrClassPostGenericSpacing) {\n typeNode.meta = conditionalAdds({\n postGenericSpacing: functionOrClassPostGenericSpacing,\n });\n errorMessage = `Post-generic spacing should be \"${functionOrClassPostGenericSpacing}\"`;\n } else if ((typeNode.meta?.postReturnMarkerSpacing ?? ' ') !== functionOrClassPostReturnMarkerSpacing) {\n typeNode.meta = conditionalAdds({\n postReturnMarkerSpacing: functionOrClassPostReturnMarkerSpacing,\n });\n errorMessage = `Post-return-marker spacing should be \"${functionOrClassPostReturnMarkerSpacing}\"`;\n } else if ((typeNode.meta?.preReturnMarkerSpacing ?? '') !== functionOrClassPreReturnMarkerSpacing) {\n typeNode.meta = conditionalAdds({\n preReturnMarkerSpacing: functionOrClassPreReturnMarkerSpacing,\n });\n errorMessage = `Pre-return-marker spacing should be \"${functionOrClassPreReturnMarkerSpacing}\"`;\n } else if ((typeNode.meta?.typeParameterSpacing ?? ' ') !== functionOrClassTypeParameterSpacing) {\n typeNode.meta = conditionalAdds({\n typeParameterSpacing: functionOrClassTypeParameterSpacing,\n });\n errorMessage = `Type parameter spacing should be \"${functionOrClassTypeParameterSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeGeneric': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde);\n if ('value' in typeNode.left && typeNode.left.value === 'Array') {\n if (typeNode.meta.brackets !== arrayBrackets) {\n typeNode.meta.brackets = arrayBrackets;\n errorMessage = `Array bracket style should be ${arrayBrackets}`;\n }\n } else if (typeNode.meta.dot !== genericDot) {\n typeNode.meta.dot = genericDot;\n errorMessage = `Dot usage should be ${genericDot}`;\n } else if ((typeNode.meta.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) {\n typeNode.meta.elementSpacing = genericAndTupleElementSpacing;\n errorMessage = `Element spacing should be \"${genericAndTupleElementSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeKeyValue': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').KeyValueResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) {\n typeNode.meta = {\n /* c8 ignore next -- Guard */\n postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ',\n postKeySpacing: keyValuePostKeySpacing,\n /* c8 ignore next 2 -- Guard */\n postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '',\n postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '',\n };\n errorMessage = `Post key spacing should be \"${keyValuePostKeySpacing}\"`;\n /* c8 ignore next -- Guard */\n } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) {\n typeNode.meta = {\n postColonSpacing: keyValuePostColonSpacing,\n /* c8 ignore next 3 -- Guard */\n postKeySpacing: typeNode.meta?.postKeySpacing ?? '',\n postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '',\n postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '',\n };\n errorMessage = `Post colon spacing should be \"${keyValuePostColonSpacing}\"`;\n /* c8 ignore next -- Guard */\n } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) {\n typeNode.meta = {\n /* c8 ignore next 2 -- Guard */\n postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ',\n postKeySpacing: typeNode.meta?.postKeySpacing ?? '',\n postOptionalSpacing: keyValuePostOptionalSpacing,\n /* c8 ignore next -- Guard */\n postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '',\n };\n errorMessage = `Post optional (\\`?\\`) spacing should be \"${keyValuePostOptionalSpacing}\"`;\n /* c8 ignore next -- Guard */\n } else if (typeNode.variadic && (typeNode.meta?.postVariadicSpacing ?? '') !== keyValuePostVariadicSpacing) {\n typeNode.meta = {\n /* c8 ignore next 3 -- Guard */\n postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ',\n postKeySpacing: typeNode.meta?.postKeySpacing ?? '',\n postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '',\n postVariadicSpacing: keyValuePostVariadicSpacing,\n };\n errorMessage = `Post variadic (\\`...\\`) spacing should be \"${keyValuePostVariadicSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeObject': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde);\n /* c8 ignore next -- Guard */\n const separator = typeNode.meta.separator ?? 'comma';\n if (\n (separator !== objectFieldSeparator &&\n (!objectFieldSeparatorOptionalLinebreak ||\n !(objectFieldSeparator.endsWith('-linebreak') &&\n objectFieldSeparator.startsWith(separator)))) ||\n (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField ||\n ((typeNode.meta.propertyIndent ?? '') !== objectFieldIndent &&\n separator.endsWith('-linebreak')) ||\n (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation\n ) {\n typeNode.meta.separator = objectFieldSeparatorOptionalLinebreak && !separator.endsWith('and-linebreak') ?\n objectFieldSeparator.replace(/-and-linebreak$/v, '') :\n objectFieldSeparator;\n typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;\n typeNode.meta.propertyIndent = objectFieldIndent;\n typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;\n errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;\n } else if ((typeNode.meta.bracketSpacing ?? '') !== objectTypeBracketSpacing) {\n typeNode.meta.bracketSpacing = objectTypeBracketSpacing;\n errorMessage = `Object type bracket spacing should be \"${objectTypeBracketSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeObjectField': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde);\n if ((objectFieldQuote ||\n (typeof typeNode.key === 'string' &&\n (\n (/^[\\p{ID_Start}$_][\\p{ID_Continue}$\\u200C\\u200D]*$/v).test(typeNode.key) ||\n digitRegex.test(typeNode.key)\n )\n )) &&\n typeNode.meta.quote !== (objectFieldQuote ?? undefined) &&\n (typeof typeNode.key !== 'string' ||\n !digitRegex.test(typeNode.key))\n ) {\n typeNode.meta.quote = objectFieldQuote ?? undefined;\n errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`;\n } else if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) {\n typeNode.meta.postKeySpacing = keyValuePostKeySpacing;\n errorMessage = `Post key spacing should be \"${keyValuePostKeySpacing}\"`;\n } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) {\n typeNode.meta.postColonSpacing = keyValuePostColonSpacing;\n errorMessage = `Post colon spacing should be \"${keyValuePostColonSpacing}\"`;\n } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) {\n typeNode.meta.postOptionalSpacing = keyValuePostOptionalSpacing;\n errorMessage = `Post optional (\\`?\\`) spacing should be \"${keyValuePostOptionalSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeStringValue': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde);\n if (typeNode.meta.quote !== stringQuotes) {\n typeNode.meta.quote = stringQuotes;\n errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;\n }\n\n break;\n }\n\n // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524\n // case 'JsdocTypeProperty': {\n // const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde);\n\n // if ((propertyQuotes ||\n // (typeof typeNode.value === 'string' && !(/\\s/v).test(typeNode.value))) &&\n // typeNode.meta.quote !== (propertyQuotes ?? undefined)\n // ) {\n // typeNode.meta.quote = propertyQuotes ?? undefined;\n // errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`;\n // }\n\n // break;\n // }\n\n case 'JsdocTypeTuple': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').TupleResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) {\n typeNode.meta = {\n elementSpacing: genericAndTupleElementSpacing,\n };\n errorMessage = `Element spacing should be \"${genericAndTupleElementSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeTypeParameter': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').TypeParameterResult} */ (nde);\n /* c8 ignore next -- Guard */\n if (typeNode.defaultValue && (typeNode.meta?.defaultValueSpacing ?? ' ') !== parameterDefaultValueSpacing) {\n typeNode.meta = {\n defaultValueSpacing: parameterDefaultValueSpacing,\n };\n errorMessage = `Default value spacing should be \"${parameterDefaultValueSpacing}\"`;\n }\n\n break;\n }\n\n case 'JsdocTypeUnion': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) {\n typeNode.meta = {\n spacing: unionSpacing,\n };\n errorMessage = `Inconsistent \"${unionSpacing}\" union spacing usage`;\n }\n\n break;\n }\n\n default:\n break;\n }\n\n if (errorMessage) {\n errorMessages.push(errorMessage);\n }\n });\n\n const differentResult = tag.type !==\n typeBracketSpacing + stringify(parsedType) + typeBracketSpacing;\n\n if (errorMessages.length && differentResult) {\n for (const errorMessage of errorMessages) {\n utils.reportJSDoc(\n errorMessage, tag, enableFixer ? fix : null,\n );\n }\n // Stringification may have been equal previously (and thus no error reported)\n // because the stringification doesn't preserve everything\n } else if (differentResult) {\n utils.reportJSDoc(\n 'There was an error with type formatting', tag, enableFixer ? fix : null,\n );\n }\n };\n\n const tags = utils.getPresentTags([\n 'param',\n 'property',\n 'returns',\n 'this',\n 'throws',\n 'type',\n 'typedef',\n 'yields',\n ]);\n for (const tag of tags) {\n if (tag.type) {\n checkTypeFormats(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Formats JSDoc type values.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/type-formatting.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n arrayBrackets: {\n description: 'Determines how array generics are represented. Set to `angle` for the style `Array<type>` or `square` for the style `type[]`. Defaults to \"square\".',\n enum: [\n 'angle',\n 'square',\n ],\n type: 'string',\n },\n arrowFunctionPostReturnMarkerSpacing: {\n description: 'The space character (if any) to use after return markers (`=>`). Defaults to \" \".',\n type: 'string',\n },\n arrowFunctionPreReturnMarkerSpacing: {\n description: 'The space character (if any) to use before return markers (`=>`). Defaults to \" \".',\n type: 'string',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\n type: 'boolean',\n },\n functionOrClassParameterSpacing: {\n description: 'The space character (if any) to use between function or class parameters. Defaults to \" \".',\n type: 'string',\n },\n functionOrClassPostGenericSpacing: {\n description: 'The space character (if any) to use after a generic expression in a function or class. Defaults to \"\".',\n type: 'string',\n },\n functionOrClassPostReturnMarkerSpacing: {\n description: 'The space character (if any) to use after return markers (`:`). Defaults to \"\".',\n type: 'string',\n },\n functionOrClassPreReturnMarkerSpacing: {\n description: 'The space character (if any) to use before return markers (`:`). Defaults to \"\".',\n type: 'string',\n },\n functionOrClassTypeParameterSpacing: {\n description: 'The space character (if any) to use between type parameters in a function or class. Defaults to \" \".',\n type: 'string',\n },\n genericAndTupleElementSpacing: {\n description: 'The space character (if any) to use between elements in generics and tuples. Defaults to \" \".',\n type: 'string',\n },\n genericDot: {\n description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.<AnotherType>`). Defaults to `false`.',\n type: 'boolean',\n },\n keyValuePostColonSpacing: {\n description: 'The amount of spacing (if any) after the colon of a key-value or object-field pair. Defaults to \" \".',\n type: 'string',\n },\n keyValuePostKeySpacing: {\n description: 'The amount of spacing (if any) immediately after keys in a key-value or object-field pair. Defaults to \"\".',\n type: 'string',\n },\n keyValuePostOptionalSpacing: {\n description: 'The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair. Defaults to \"\".',\n type: 'string',\n },\n keyValuePostVariadicSpacing: {\n description: 'The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair. Defaults to \"\".',\n type: 'string',\n },\n methodQuotes: {\n description: 'The style of quotation mark for surrounding method names when quoted. Defaults to `double`',\n enum: [\n 'double',\n 'single',\n ],\n type: 'string',\n },\n objectFieldIndent: {\n description: `A string indicating the whitespace to be added on each line preceding an\nobject property-value field. Defaults to the empty string.`,\n type: 'string',\n },\n objectFieldQuote: {\n description: `Whether and how object field properties should be quoted (e.g., \\`{\"a\": string}\\`).\nSet to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\nrequired due to special characters within the field). Digits will be kept as is,\nregardless of setting (they can either represent a digit or a string digit).`,\n enum: [\n 'double',\n 'single',\n null,\n ],\n },\n objectFieldSeparator: {\n description: `For object properties, specify whether a \"semicolon\", \"comma\", \"linebreak\",\n\"semicolon-and-linebreak\", or \"comma-and-linebreak\" should be used after\neach object property-value pair.\n\nDefaults to \\`\"comma\"\\`.`,\n enum: [\n 'comma',\n 'comma-and-linebreak',\n 'linebreak',\n 'semicolon',\n 'semicolon-and-linebreak',\n ],\n type: 'string',\n },\n objectFieldSeparatorOptionalLinebreak: {\n description: `Whether \\`objectFieldSeparator\\` set to \\`\"semicolon-and-linebreak\"\\` or\n\\`\"comma-and-linebreak\"\\` should be allowed to optionally drop the linebreak.\n\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n objectFieldSeparatorTrailingPunctuation: {\n description: `If \\`separatorForSingleObjectField\\` is not in effect (i.e., if it is \\`false\\`\nor there are multiple property-value object fields present), this property\nwill determine whether to add punctuation corresponding to the\n\\`objectFieldSeparator\\` (e.g., a semicolon) to the final object field.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n objectTypeBracketSpacing: {\n description: 'The space character (if any) to add after an object\\'s initial curly bracket and before its ending curly bracket',\n type: 'string',\n },\n parameterDefaultValueSpacing: {\n description: 'The space character (if any) to use between the equal signs of a default value. Defaults to \" \".',\n type: 'string',\n },\n postMethodNameSpacing: {\n description: 'The space character (if any) to add after a method name. Defaults to \"\".',\n type: 'string',\n },\n postNewSpacing: {\n description: 'The space character (if any) to add after \"new\" in a constructor. Defaults to \" \".',\n type: 'string',\n },\n // propertyQuotes: {\n // description: `Whether and how namepath properties should be quoted (e.g., \\`ab.\"cd\".\"ef\"\\`).\n // Set to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\n // required due to whitespace within the property).`,\n // enum: [\n // 'double',\n // 'single',\n // null,\n // ],\n // },\n separatorForSingleObjectField: {\n description: `Whether to apply the \\`objectFieldSeparator\\` (e.g., a semicolon) when there\nis only one property-value object field present. Defaults to \\`false\\`.`,\n type: 'boolean',\n },\n stringQuotes: {\n description: `How string literals should be quoted (e.g., \\`\"abc\"\\`). Set to \\`single\\`\nor \\`double\\`. Defaults to 'double'.`,\n enum: [\n 'double',\n 'single',\n ],\n type: 'string',\n },\n typeBracketSpacing: {\n description: `A string of spaces that will be added immediately after the type's initial\ncurly bracket and immediately before its ending curly bracket. Defaults\nto the empty string.`,\n type: 'string',\n },\n unionSpacing: {\n description: 'Determines the spacing to add to unions (`|`). Defaults to a single space (`\" \"`).',\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAGA,IAAAE,aAAA,GAAAF,OAAA;AAK8B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9B,MAAMG,UAAU,GAAI,wCAAyC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAH,OAAA,GAE/C,IAAAI,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,MAAM;EACNC,KAAK;EACLC,QAAQ;EACRC;EACF;AACA,CAAC,KAAK;EACJ,MAAM;IACJC,aAAa,GAAG,QAAQ;IACxBC,oCAAoC,GAAG,GAAG;IAC1CC,mCAAmC,GAAG,GAAG;IACzCC,WAAW,GAAG,IAAI;IAClBC,+BAA+B,GAAG,GAAG;IACrCC,iCAAiC,GAAG,EAAE;IACtCC,sCAAsC,GAAG,GAAG;IAC5CC,qCAAqC,GAAG,EAAE;IAC1CC,mCAAmC,GAAG,GAAG;IACzCC,6BAA6B,GAAG,GAAG;IACnCC,UAAU,GAAG,KAAK;IAClBC,wBAAwB,GAAG,GAAG;IAC9BC,sBAAsB,GAAG,EAAE;IAC3BC,2BAA2B,GAAG,EAAE;IAChCC,2BAA2B,GAAG,EAAE;IAChCC,YAAY,GAAG,QAAQ;IACvBC,iBAAiB,GAAG,EAAE;IACtBC,gBAAgB,GAAG,IAAI;IACvBC,oBAAoB,GAAG,OAAO;IAC9BC,qCAAqC,GAAG,IAAI;IAC5CC,uCAAuC,GAAG,KAAK;IAC/CC,wBAAwB,GAAG,EAAE;IAC7BC,4BAA4B,GAAG,GAAG;IAClCC,qBAAqB,GAAG,EAAE;IAC1BC,cAAc,GAAG,GAAG;IACpB;IACAC,6BAA6B,GAAG,KAAK;IACrCC,YAAY,GAAG,QAAQ;IACvBC,kBAAkB,GAAG,EAAE;IACvBC,YAAY,GAAG;EACjB,CAAC,GAAGjC,OAAO,CAACkC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAM;IACJC;EACF,CAAC,GAAGhC,QAAQ;;EAEZ;AACF;AACA;EACE,MAAMiC,gBAAgB,GAAIC,GAAG,IAAK;IAChC,MAAMC,aAAa,GAAGD,GAAG,CAACE,IAAI;IAC9B,IAAIC,UAAU;IACd,IAAI;MACFA,UAAU,GAAGL,IAAI,KAAK,YAAY,GAChC,IAAAM,sBAAY,EAAC,qBAAuBH,aAAc,CAAC,GACnD,IAAAI,mBAAS,EAAC,qBAAuBJ,aAAa,EAAGH,IAAI,CAAC;IAC1D,CAAC,CAAC,MAAM;MACN;IACF;IAEA,MAAMQ,GAAG,GAAGA,CAAA,KAAM;MAChB,IAAAC,8BAAkB,EAAC1C,KAAK,EAAEmC,GAAG,EAAEG,UAAU,EAAEvC,MAAM,EAAE+B,kBAAkB,CAAC;IACxE,CAAC;;IAED;IACA,MAAMa,aAAa,GAAG,EAAE;IAExB,IAAIb,kBAAkB,KAAK,CAACK,GAAG,CAACE,IAAI,CAACO,UAAU,CAACd,kBAAkB,CAAC,IAAI,CAACK,GAAG,CAACE,IAAI,CAACQ,QAAQ,CAACf,kBAAkB,CAAC,CAAC,EAAE;MAC9Ga,aAAa,CAACG,IAAI,CAAC,gCAAgChB,kBAAkB,WAAW,CAAC;IACnF,CAAC,MAAM,IAAI,CAACA,kBAAkB,KAAM,MAAM,CAAEiB,IAAI,CAACZ,GAAG,CAACE,IAAI,CAAC,IAAK,MAAM,CAAEU,IAAI,CAACZ,GAAG,CAACE,IAAI,CAAC,CAAC,EAAE;MACtFM,aAAa,CAACG,IAAI,CAAC,8BAA8B,CAAC;IACpD;;IAEA;IACA,IAAAE,sBAAQ,EAACV,UAAU,EAAGW,GAAG,IAAK;MAC5B,IAAIC,YAAY,GAAG,EAAE;;MAErB;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACM,MAAMC,eAAe,GAAIC,IAAI,IAAK;QAChC,MAAMC,OAAO;QACb;AACR;AACA;AACA;AACA;AACA;AACA;AACA;QAAaJ,GAAI;;QAET;AACR;AACA;AACA;AACA;AACA;QACQ,MAAMK,OAAO,GAAG;UACdC,gBAAgB,EAAEH,IAAI,CAACG,gBAAgB,IAAIF,OAAO,CAACD,IAAI,EAAEG,gBAAgB,IAAI,GAAG;UAChFC,kBAAkB,EAAEJ,IAAI,CAACI,kBAAkB,IAAIH,OAAO,CAACD,IAAI,EAAEI,kBAAkB,IAAI,EAAE;UACrFC,uBAAuB,EAAEL,IAAI,CAACK,uBAAuB,IAAIJ,OAAO,CAACD,IAAI,EAAEK,uBAAuB,IAAI,GAAG;UACrGC,sBAAsB,EAAEN,IAAI,CAACM,sBAAsB,IAAIL,OAAO,CAACD,IAAI,EAAEM,sBAAsB,IAAI,EAAE;UACjGC,oBAAoB,EAAEP,IAAI,CAACO,oBAAoB,IAAIN,OAAO,CAACD,IAAI,EAAEO,oBAAoB,IAAI;QAC3F,CAAC;QAED,IAAIN,OAAO,CAAChB,IAAI,KAAK,+BAA+B,EAAE;UACpDiB,OAAO,CAAC3B,cAAc,GAAGyB,IAAI,CAACzB,cAAc;QAC9C;QAEA,IAAI0B,OAAO,CAAChB,IAAI,KAAK,0BAA0B,EAAE;UAC/CiB,OAAO,CAAC5B,qBAAqB,GAAG0B,IAAI,CAAC1B,qBAAqB,IAAI2B,OAAO,CAACD,IAAI,EAAE1B,qBAAqB,IAAI,EAAE;QACzG;QAEA,OAAO4B,OAAO;MAChB,CAAC;MAED,QAAQL,GAAG,CAACZ,IAAI;QACd,KAAK,+BAA+B;UAAE;YACpC,MAAMuB,QAAQ,GAAG,2EAA6EX,GAAI;YAClG;YACA,IAAI,CAACW,QAAQ,CAACR,IAAI,EAAEzB,cAAc,IAAI,GAAG,MAAMA,cAAc,EAAE;cAC7DiC,QAAQ,CAACR,IAAI;cACX;AACd;AACA;AACA;AACA;cAAmBD,eAAe,CAAC;gBACnBxB;cACF,CAAC,CAAE;cACLuB,YAAY,GAAG,mCAAmCvB,cAAc,GAAG;cACnE;YACF;UACF;QAEA,KAAK,mBAAmB;UAAE;YACxB,MAAMiC,QAAQ;YACZ;AACZ;AACA;YAAgBX,GAAG;YACT,IAAI,OAAO,IAAIW,QAAQ,IAAIA,QAAQ,CAACC,KAAK,EAAE;cACzC;cACA,IAAI,CAACD,QAAQ,CAACR,IAAI,EAAEK,uBAAuB,IAAI,GAAG,MAAMrD,oCAAoC,EAAE;gBAC5FwD,QAAQ,CAACR,IAAI;gBACb;AACd;AACA;AACA;AACA;gBAAmBD,eAAe,CAAC;kBACjBM,uBAAuB,EAAErD,oCAAoC;kBAC7D;kBACAsD,sBAAsB,EAAEE,QAAQ,CAACR,IAAI,EAAEM,sBAAsB,IAAI;gBACnE,CAAC,CAAE;gBACLR,YAAY,GAAG,yCAAyC9C,oCAAoC,GAAG;gBAC/F;gBACF;cACA,CAAC,MAAM,IAAI,CAACwD,QAAQ,CAACR,IAAI,EAAEM,sBAAsB,IAAI,GAAG,MAAMrD,mCAAmC,EAAE;gBACjGuD,QAAQ,CAACR,IAAI;gBACb;AACd;AACA;AACA;AACA;gBAAmBD,eAAe,CAAC;kBACjB;kBACAM,uBAAuB,EAAEG,QAAQ,CAACR,IAAI,EAAEK,uBAAuB,IAAI,GAAG;kBACtEC,sBAAsB,EAAErD;gBAC1B,CAAC,CAAE;gBACL6C,YAAY,GAAG,wCAAwC7C,mCAAmC,GAAG;gBAC7F;cACF;cAEA;YACF;UACF;QAEA,KAAK,wBAAwB;QAC7B,KAAK,yBAAyB;QAC9B,KAAK,0BAA0B;UAAE;YAC/B,MAAMuD,QAAQ;YACZ;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;YAAiBX,GAAI;YACX,IAAIW,QAAQ,CAACvB,IAAI,KAAK,0BAA0B,IAC9C,CAACuB,QAAQ,CAACR,IAAI,EAAE1B,qBAAqB,IAAI,EAAE,MAAMA,qBAAqB,EACtE;cACAkC,QAAQ,CAACR,IAAI,GAAG;gBACdU,KAAK,EAAEF,QAAQ,CAACR,IAAI,CAACU,KAAK;gBAC1B,GAAGX,eAAe,CAAC;kBACjBzB;gBACF,CAAC;cACH,CAAC;cACDwB,YAAY,GAAG,uCAAuCxB,qBAAqB,GAAG;cAC9E;YACF,CAAC,MAAM,IAAIkC,QAAQ,CAACvB,IAAI,KAAK,0BAA0B,IACrDuB,QAAQ,CAACR,IAAI,CAACU,KAAK,KAAKC,SAAS,IACjCH,QAAQ,CAACR,IAAI,CAACU,KAAK,KAAK5C,YAAY,EACpC;cACA0C,QAAQ,CAACR,IAAI,GAAG;gBACd,GAAGD,eAAe,CAAC;kBACjBzB,qBAAqB,EAAEkC,QAAQ,CAACR,IAAI,CAAC1B,qBAAqB,IAAI;gBAChE,CAAC,CAAC;gBACFoC,KAAK,EAAE5C;cACT,CAAC;cACDgC,YAAY,GAAG,mCAAmChC,YAAY,GAAG;cACjE;YACF;YAEA,IAAI,CAAC0C,QAAQ,CAACR,IAAI,EAAEG,gBAAgB,IAAI,GAAG,MAAMhD,+BAA+B,EAAE;cAChFqD,QAAQ,CAACR,IAAI,GAAGD,eAAe,CAAC;gBAC9BI,gBAAgB,EAAEhD;cACpB,CAAC,CAAC;cACF2C,YAAY,GAAG,gCAAgC3C,+BAA+B,GAAG;YACnF,CAAC,MAAM,IAAI,CAACqD,QAAQ,CAACR,IAAI,EAAEI,kBAAkB,IAAI,EAAE,MAAMhD,iCAAiC,EAAE;cAC1FoD,QAAQ,CAACR,IAAI,GAAGD,eAAe,CAAC;gBAC9BK,kBAAkB,EAAEhD;cACtB,CAAC,CAAC;cACF0C,YAAY,GAAG,mCAAmC1C,iCAAiC,GAAG;YACxF,CAAC,MAAM,IAAI,CAACoD,QAAQ,CAACR,IAAI,EAAEK,uBAAuB,IAAI,GAAG,MAAMhD,sCAAsC,EAAE;cACrGmD,QAAQ,CAACR,IAAI,GAAGD,eAAe,CAAC;gBAC9BM,uBAAuB,EAAEhD;cAC3B,CAAC,CAAC;cACFyC,YAAY,GAAG,yCAAyCzC,sCAAsC,GAAG;YACnG,CAAC,MAAM,IAAI,CAACmD,QAAQ,CAACR,IAAI,EAAEM,sBAAsB,IAAI,EAAE,MAAMhD,qCAAqC,EAAE;cAClGkD,QAAQ,CAACR,IAAI,GAAGD,eAAe,CAAC;gBAC9BO,sBAAsB,EAAEhD;cAC1B,CAAC,CAAC;cACFwC,YAAY,GAAG,wCAAwCxC,qCAAqC,GAAG;YACjG,CAAC,MAAM,IAAI,CAACkD,QAAQ,CAACR,IAAI,EAAEO,oBAAoB,IAAI,GAAG,MAAMhD,mCAAmC,EAAE;cAC/FiD,QAAQ,CAACR,IAAI,GAAGD,eAAe,CAAC;gBAC9BQ,oBAAoB,EAAEhD;cACxB,CAAC,CAAC;cACFuC,YAAY,GAAG,qCAAqCvC,mCAAmC,GAAG;YAC5F;YAEA;UACF;QAEA,KAAK,kBAAkB;UAAE;YACvB,MAAMiD,QAAQ,GAAG,8DAAgEX,GAAI;YACrF,IAAI,OAAO,IAAIW,QAAQ,CAACI,IAAI,IAAIJ,QAAQ,CAACI,IAAI,CAACC,KAAK,KAAK,OAAO,EAAE;cAC/D,IAAIL,QAAQ,CAACR,IAAI,CAACc,QAAQ,KAAK/D,aAAa,EAAE;gBAC5CyD,QAAQ,CAACR,IAAI,CAACc,QAAQ,GAAG/D,aAAa;gBACtC+C,YAAY,GAAG,iCAAiC/C,aAAa,EAAE;cACjE;YACF,CAAC,MAAM,IAAIyD,QAAQ,CAACR,IAAI,CAACe,GAAG,KAAKtD,UAAU,EAAE;cAC3C+C,QAAQ,CAACR,IAAI,CAACe,GAAG,GAAGtD,UAAU;cAC9BqC,YAAY,GAAG,uBAAuBrC,UAAU,EAAE;YACpD,CAAC,MAAM,IAAI,CAAC+C,QAAQ,CAACR,IAAI,CAACgB,cAAc,IAAI,GAAG,MAAMxD,6BAA6B,EAAE;cAClFgD,QAAQ,CAACR,IAAI,CAACgB,cAAc,GAAGxD,6BAA6B;cAC5DsC,YAAY,GAAG,8BAA8BtC,6BAA6B,GAAG;YAC/E;YAEA;UACF;QAEA,KAAK,mBAAmB;UAAE;YACxB,MAAMgD,QAAQ,GAAG,+DAAiEX,GAAI;YACtF;YACA,IAAI,CAACW,QAAQ,CAACR,IAAI,EAAEiB,cAAc,IAAI,EAAE,MAAMtD,sBAAsB,EAAE;cACpE6C,QAAQ,CAACR,IAAI,GAAG;gBACd;gBACAkB,gBAAgB,EAAEV,QAAQ,CAACR,IAAI,EAAEkB,gBAAgB,IAAI,GAAG;gBACxDD,cAAc,EAAEtD,sBAAsB;gBACtC;gBACAwD,mBAAmB,EAAEX,QAAQ,CAACR,IAAI,EAAEmB,mBAAmB,IAAI,EAAE;gBAC7DC,mBAAmB,EAAEZ,QAAQ,CAACR,IAAI,EAAEoB,mBAAmB,IAAI;cAC7D,CAAC;cACDtB,YAAY,GAAG,+BAA+BnC,sBAAsB,GAAG;cACzE;YACA,CAAC,MAAM,IAAI,CAAC6C,QAAQ,CAACR,IAAI,EAAEkB,gBAAgB,IAAI,GAAG,MAAMxD,wBAAwB,EAAE;cAChF8C,QAAQ,CAACR,IAAI,GAAG;gBACdkB,gBAAgB,EAAExD,wBAAwB;gBAC1C;gBACAuD,cAAc,EAAET,QAAQ,CAACR,IAAI,EAAEiB,cAAc,IAAI,EAAE;gBACnDE,mBAAmB,EAAEX,QAAQ,CAACR,IAAI,EAAEmB,mBAAmB,IAAI,EAAE;gBAC7DC,mBAAmB,EAAEZ,QAAQ,CAACR,IAAI,EAAEoB,mBAAmB,IAAI;cAC7D,CAAC;cACDtB,YAAY,GAAG,iCAAiCpC,wBAAwB,GAAG;cAC7E;YACA,CAAC,MAAM,IAAI,CAAC8C,QAAQ,CAACR,IAAI,EAAEmB,mBAAmB,IAAI,EAAE,MAAMvD,2BAA2B,EAAE;cACrF4C,QAAQ,CAACR,IAAI,GAAG;gBACd;gBACAkB,gBAAgB,EAAEV,QAAQ,CAACR,IAAI,EAAEkB,gBAAgB,IAAI,GAAG;gBACxDD,cAAc,EAAET,QAAQ,CAACR,IAAI,EAAEiB,cAAc,IAAI,EAAE;gBACnDE,mBAAmB,EAAEvD,2BAA2B;gBAChD;gBACAwD,mBAAmB,EAAEZ,QAAQ,CAACR,IAAI,EAAEoB,mBAAmB,IAAI;cAC7D,CAAC;cACDtB,YAAY,GAAG,4CAA4ClC,2BAA2B,GAAG;cAC3F;YACA,CAAC,MAAM,IAAI4C,QAAQ,CAACa,QAAQ,IAAI,CAACb,QAAQ,CAACR,IAAI,EAAEoB,mBAAmB,IAAI,EAAE,MAAMvD,2BAA2B,EAAE;cAC1G2C,QAAQ,CAACR,IAAI,GAAG;gBACd;gBACAkB,gBAAgB,EAAEV,QAAQ,CAACR,IAAI,EAAEkB,gBAAgB,IAAI,GAAG;gBACxDD,cAAc,EAAET,QAAQ,CAACR,IAAI,EAAEiB,cAAc,IAAI,EAAE;gBACnDE,mBAAmB,EAAEX,QAAQ,CAACR,IAAI,EAAEmB,mBAAmB,IAAI,EAAE;gBAC7DC,mBAAmB,EAAEvD;cACvB,CAAC;cACDiC,YAAY,GAAG,8CAA8CjC,2BAA2B,GAAG;YAC7F;YAEA;UACF;QAEA,KAAK,iBAAiB;UAAE;YACtB,MAAM2C,QAAQ,GAAG,6DAA+DX,GAAI;YACpF;YACA,MAAMyB,SAAS,GAAGd,QAAQ,CAACR,IAAI,CAACsB,SAAS,IAAI,OAAO;YACpD,IACGA,SAAS,KAAKrD,oBAAoB,KAChC,CAACC,qCAAqC,IACrC,EAAED,oBAAoB,CAACwB,QAAQ,CAAC,YAAY,CAAC,IAC3CxB,oBAAoB,CAACuB,UAAU,CAAC8B,SAAS,CAAC,CAAC,CAAC,IAClD,CAACd,QAAQ,CAACR,IAAI,CAACxB,6BAA6B,IAAI,KAAK,MAAMA,6BAA6B,IACvF,CAACgC,QAAQ,CAACR,IAAI,CAACuB,cAAc,IAAI,EAAE,MAAMxD,iBAAiB,IACzDuD,SAAS,CAAC7B,QAAQ,CAAC,YAAY,CAAE,IACnC,CAACe,QAAQ,CAACR,IAAI,CAACwB,mBAAmB,IAAI,KAAK,MAAMrD,uCAAuC,EACxF;cACAqC,QAAQ,CAACR,IAAI,CAACsB,SAAS,GAAGpD,qCAAqC,IAAI,CAACoD,SAAS,CAAC7B,QAAQ,CAAC,eAAe,CAAC,GACrGxB,oBAAoB,CAACwD,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,GACpDxD,oBAAoB;cACtBuC,QAAQ,CAACR,IAAI,CAACxB,6BAA6B,GAAGA,6BAA6B;cAC3EgC,QAAQ,CAACR,IAAI,CAACuB,cAAc,GAAGxD,iBAAiB;cAChDyC,QAAQ,CAACR,IAAI,CAACwB,mBAAmB,GAAGrD,uCAAuC;cAC3E2B,YAAY,GAAG,gBAAgB7B,oBAAoB,kBAAkB;YACvE,CAAC,MAAM,IAAI,CAACuC,QAAQ,CAACR,IAAI,CAAC0B,cAAc,IAAI,EAAE,MAAMtD,wBAAwB,EAAE;cAC5EoC,QAAQ,CAACR,IAAI,CAAC0B,cAAc,GAAGtD,wBAAwB;cACvD0B,YAAY,GAAG,0CAA0C1B,wBAAwB,GAAG;YACtF;YAEA;UACF;QAEA,KAAK,sBAAsB;UAAE;YAC3B,MAAMoC,QAAQ,GAAG,kEAAoEX,GAAI;YACzF,IAAI,CAAC7B,gBAAgB,IAClB,OAAOwC,QAAQ,CAACmB,GAAG,KAAK,QAAQ,KAE5B,oDAAoD,CAAEhC,IAAI,CAACa,QAAQ,CAACmB,GAAG,CAAC,IACzErF,UAAU,CAACqD,IAAI,CAACa,QAAQ,CAACmB,GAAG,CAAC,CAEhC,KACDnB,QAAQ,CAACR,IAAI,CAACU,KAAK,MAAM1C,gBAAgB,IAAI2C,SAAS,CAAC,KACtD,OAAOH,QAAQ,CAACmB,GAAG,KAAK,QAAQ,IAC7B,CAACrF,UAAU,CAACqD,IAAI,CAACa,QAAQ,CAACmB,GAAG,CAAC,CAAC,EACnC;cACAnB,QAAQ,CAACR,IAAI,CAACU,KAAK,GAAG1C,gBAAgB,IAAI2C,SAAS;cACnDb,YAAY,GAAG,oCAAoC9B,gBAAgB,EAAE;YACvE,CAAC,MAAM,IAAI,CAACwC,QAAQ,CAACR,IAAI,EAAEiB,cAAc,IAAI,EAAE,MAAMtD,sBAAsB,EAAE;cAC3E6C,QAAQ,CAACR,IAAI,CAACiB,cAAc,GAAGtD,sBAAsB;cACrDmC,YAAY,GAAG,+BAA+BnC,sBAAsB,GAAG;YACzE,CAAC,MAAM,IAAI,CAAC6C,QAAQ,CAACR,IAAI,EAAEkB,gBAAgB,IAAI,GAAG,MAAMxD,wBAAwB,EAAE;cAChF8C,QAAQ,CAACR,IAAI,CAACkB,gBAAgB,GAAGxD,wBAAwB;cACzDoC,YAAY,GAAG,iCAAiCpC,wBAAwB,GAAG;YAC7E,CAAC,MAAM,IAAI,CAAC8C,QAAQ,CAACR,IAAI,EAAEmB,mBAAmB,IAAI,EAAE,MAAMvD,2BAA2B,EAAE;cACrF4C,QAAQ,CAACR,IAAI,CAACmB,mBAAmB,GAAGvD,2BAA2B;cAC/DkC,YAAY,GAAG,4CAA4ClC,2BAA2B,GAAG;YAC3F;YAEA;UACF;QAEA,KAAK,sBAAsB;UAAE;YAC3B,MAAM4C,QAAQ,GAAG,kEAAoEX,GAAI;YACzF,IAAIW,QAAQ,CAACR,IAAI,CAACU,KAAK,KAAKjC,YAAY,EAAE;cACxC+B,QAAQ,CAACR,IAAI,CAACU,KAAK,GAAGjC,YAAY;cAClCqB,YAAY,GAAG,gBAAgBrB,YAAY,sBAAsB;YACnE;YAEA;UACF;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA,KAAK,gBAAgB;UAAE;YACrB,MAAM+B,QAAQ,GAAG,4DAA8DX,GAAI;YACnF;YACA,IAAI,CAACW,QAAQ,CAACR,IAAI,EAAEgB,cAAc,IAAI,GAAG,MAAMxD,6BAA6B,EAAE;cAC5EgD,QAAQ,CAACR,IAAI,GAAG;gBACdgB,cAAc,EAAExD;cAClB,CAAC;cACDsC,YAAY,GAAG,8BAA8BtC,6BAA6B,GAAG;YAC/E;YAEA;UACF;QAEA,KAAK,wBAAwB;UAAE;YAC7B,MAAMgD,QAAQ,GAAG,oEAAsEX,GAAI;YAC3F;YACA,IAAIW,QAAQ,CAACoB,YAAY,IAAI,CAACpB,QAAQ,CAACR,IAAI,EAAE6B,mBAAmB,IAAI,GAAG,MAAMxD,4BAA4B,EAAE;cACzGmC,QAAQ,CAACR,IAAI,GAAG;gBACd6B,mBAAmB,EAAExD;cACvB,CAAC;cACDyB,YAAY,GAAG,oCAAoCzB,4BAA4B,GAAG;YACpF;YAEA;UACF;QAEA,KAAK,gBAAgB;UAAE;YACrB,MAAMmC,QAAQ,GAAG,4DAA8DX,GAAI;YACnF;YACA,IAAI,CAACW,QAAQ,CAACR,IAAI,EAAE8B,OAAO,IAAI,GAAG,MAAMnD,YAAY,EAAE;cACpD6B,QAAQ,CAACR,IAAI,GAAG;gBACd8B,OAAO,EAAEnD;cACX,CAAC;cACDmB,YAAY,GAAG,iBAAiBnB,YAAY,uBAAuB;YACrE;YAEA;UACF;QAEA;UACE;MACJ;MAEA,IAAImB,YAAY,EAAE;QAChBP,aAAa,CAACG,IAAI,CAACI,YAAY,CAAC;MAClC;IACF,CAAC,CAAC;IAEF,MAAMiC,eAAe,GAAGhD,GAAG,CAACE,IAAI,KAC9BP,kBAAkB,GAAG,IAAAsD,uBAAS,EAAC9C,UAAU,CAAC,GAAGR,kBAAkB;IAEjE,IAAIa,aAAa,CAAC0C,MAAM,IAAIF,eAAe,EAAE;MAC3C,KAAK,MAAMjC,YAAY,IAAIP,aAAa,EAAE;QACxCzC,KAAK,CAACoF,WAAW,CACfpC,YAAY,EAAEf,GAAG,EAAE7B,WAAW,GAAGmC,GAAG,GAAG,IACzC,CAAC;MACH;MACF;MACA;IACA,CAAC,MAAM,IAAI0C,eAAe,EAAE;MAC1BjF,KAAK,CAACoF,WAAW,CACf,yCAAyC,EAAEnD,GAAG,EAAE7B,WAAW,GAAGmC,GAAG,GAAG,IACtE,CAAC;IACH;EACF,CAAC;EAED,MAAM8C,IAAI,GAAGrF,KAAK,CAACsF,cAAc,CAAC,CAChC,OAAO,EACP,UAAU,EACV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,CACT,CAAC;EACF,KAAK,MAAMrD,GAAG,IAAIoD,IAAI,EAAE;IACtB,IAAIpD,GAAG,CAACE,IAAI,EAAE;MACZH,gBAAgB,CAACC,GAAG,CAAC;IACvB;EACF;AACF,CAAC,EAAE;EACDsD,gBAAgB,EAAE,IAAI;EACtBrC,IAAI,EAAE;IACJsC,IAAI,EAAE;MACJC,WAAW,EAAE,4BAA4B;MACzCC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV7F,aAAa,EAAE;UACbwF,WAAW,EAAE,qJAAqJ;UAClKM,IAAI,EAAE,CACJ,OAAO,EACP,QAAQ,CACT;UACD5D,IAAI,EAAE;QACR,CAAC;QACDjC,oCAAoC,EAAE;UACpCuF,WAAW,EAAE,mFAAmF;UAChGtD,IAAI,EAAE;QACR,CAAC;QACDhC,mCAAmC,EAAE;UACnCsF,WAAW,EAAE,oFAAoF;UACjGtD,IAAI,EAAE;QACR,CAAC;QACD/B,WAAW,EAAE;UACXqF,WAAW,EAAE,kDAAkD;UAC/DtD,IAAI,EAAE;QACR,CAAC;QACD9B,+BAA+B,EAAE;UAC/BoF,WAAW,EAAE,4FAA4F;UACzGtD,IAAI,EAAE;QACR,CAAC;QACD7B,iCAAiC,EAAE;UACjCmF,WAAW,EAAE,wGAAwG;UACrHtD,IAAI,EAAE;QACR,CAAC;QACD5B,sCAAsC,EAAE;UACtCkF,WAAW,EAAE,iFAAiF;UAC9FtD,IAAI,EAAE;QACR,CAAC;QACD3B,qCAAqC,EAAE;UACrCiF,WAAW,EAAE,kFAAkF;UAC/FtD,IAAI,EAAE;QACR,CAAC;QACD1B,mCAAmC,EAAE;UACnCgF,WAAW,EAAE,sGAAsG;UACnHtD,IAAI,EAAE;QACR,CAAC;QACDzB,6BAA6B,EAAE;UAC7B+E,WAAW,EAAE,+FAA+F;UAC5GtD,IAAI,EAAE;QACR,CAAC;QACDxB,UAAU,EAAE;UACV8E,WAAW,EAAE,sIAAsI;UACnJtD,IAAI,EAAE;QACR,CAAC;QACDvB,wBAAwB,EAAE;UACxB6E,WAAW,EAAE,sGAAsG;UACnHtD,IAAI,EAAE;QACR,CAAC;QACDtB,sBAAsB,EAAE;UACtB4E,WAAW,EAAE,4GAA4G;UACzHtD,IAAI,EAAE;QACR,CAAC;QACDrB,2BAA2B,EAAE;UAC3B2E,WAAW,EAAE,uHAAuH;UACpItD,IAAI,EAAE;QACR,CAAC;QACDpB,2BAA2B,EAAE;UAC3B0E,WAAW,EAAE,uGAAuG;UACpHtD,IAAI,EAAE;QACR,CAAC;QACDnB,YAAY,EAAE;UACZyE,WAAW,EAAE,4FAA4F;UACzGM,IAAI,EAAE,CACJ,QAAQ,EACR,QAAQ,CACT;UACD5D,IAAI,EAAE;QACR,CAAC;QACDlB,iBAAiB,EAAE;UACjBwE,WAAW,EAAE;AACzB,2DAA2D;UAC/CtD,IAAI,EAAE;QACR,CAAC;QACDjB,gBAAgB,EAAE;UAChBuE,WAAW,EAAE;AACzB;AACA;AACA,6EAA6E;UACjEM,IAAI,EAAE,CACJ,QAAQ,EACR,QAAQ,EACR,IAAI;QAER,CAAC;QACD5E,oBAAoB,EAAE;UACpBsE,WAAW,EAAE;AACzB;AACA;AACA;AACA,yBAAyB;UACbM,IAAI,EAAE,CACJ,OAAO,EACP,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,yBAAyB,CAC1B;UACD5D,IAAI,EAAE;QACR,CAAC;QACDf,qCAAqC,EAAE;UACrCqE,WAAW,EAAE;AACzB;AACA;AACA,sBAAsB;UACVtD,IAAI,EAAE;QACR,CAAC;QACDd,uCAAuC,EAAE;UACvCoE,WAAW,EAAE;AACzB;AACA;AACA;AACA,uBAAuB;UACXtD,IAAI,EAAE;QACR,CAAC;QACDb,wBAAwB,EAAE;UACxBmE,WAAW,EAAE,kHAAkH;UAC/HtD,IAAI,EAAE;QACR,CAAC;QACDZ,4BAA4B,EAAE;UAC5BkE,WAAW,EAAE,kGAAkG;UAC/GtD,IAAI,EAAE;QACR,CAAC;QACDX,qBAAqB,EAAE;UACrBiE,WAAW,EAAE,0EAA0E;UACvFtD,IAAI,EAAE;QACR,CAAC;QACDV,cAAc,EAAE;UACdgE,WAAW,EAAE,oFAAoF;UACjGtD,IAAI,EAAE;QACR,CAAC;QACD;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACAT,6BAA6B,EAAE;UAC7B+D,WAAW,EAAE;AACzB,wEAAwE;UAC5DtD,IAAI,EAAE;QACR,CAAC;QACDR,YAAY,EAAE;UACZ8D,WAAW,EAAE;AACzB,qCAAqC;UACzBM,IAAI,EAAE,CACJ,QAAQ,EACR,QAAQ,CACT;UACD5D,IAAI,EAAE;QACR,CAAC;QACDP,kBAAkB,EAAE;UAClB6D,WAAW,EAAE;AACzB;AACA,qBAAqB;UACTtD,IAAI,EAAE;QACR,CAAC;QACDN,YAAY,EAAE;UACZ4D,WAAW,EAAE,oFAAoF;UACjGtD,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA6D,MAAA,CAAAtG,OAAA,GAAAA,OAAA,CAAAH,OAAA","ignoreList":[]}
|
package/dist/rules.d.ts
CHANGED
|
@@ -3136,6 +3136,10 @@ export interface Rules {
|
|
|
3136
3136
|
* Defaults to `false`.
|
|
3137
3137
|
*/
|
|
3138
3138
|
objectFieldSeparatorTrailingPunctuation?: boolean;
|
|
3139
|
+
/**
|
|
3140
|
+
* The space character (if any) to add after an object's initial curly bracket and before its ending curly bracket
|
|
3141
|
+
*/
|
|
3142
|
+
objectTypeBracketSpacing?: string;
|
|
3139
3143
|
/**
|
|
3140
3144
|
* The space character (if any) to use between the equal signs of a default value. Defaults to " ".
|
|
3141
3145
|
*/
|
package/package.json
CHANGED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
"url": "http://gajus.com"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@es-joy/jsdoccomment": "~0.
|
|
8
|
+
"@es-joy/jsdoccomment": "~0.82.0",
|
|
9
9
|
"@es-joy/resolve.exports": "1.2.0",
|
|
10
10
|
"are-docs-informative": "^0.0.2",
|
|
11
11
|
"comment-parser": "1.4.4",
|
|
12
12
|
"debug": "^4.4.3",
|
|
13
13
|
"escape-string-regexp": "^4.0.0",
|
|
14
|
-
"espree": "^11.
|
|
14
|
+
"espree": "^11.1.0",
|
|
15
15
|
"esquery": "^1.7.0",
|
|
16
16
|
"html-entities": "^2.6.0",
|
|
17
17
|
"object-deep-merge": "^2.0.0",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@types/node": "^25.0.9",
|
|
48
48
|
"@types/semver": "^7.7.1",
|
|
49
49
|
"@types/spdx-expression-parse": "^3.0.5",
|
|
50
|
-
"@typescript-eslint/types": "^8.53.
|
|
50
|
+
"@typescript-eslint/types": "^8.53.1",
|
|
51
51
|
"babel-plugin-add-module-exports": "^1.0.4",
|
|
52
52
|
"babel-plugin-istanbul": "^7.0.1",
|
|
53
53
|
"babel-plugin-transform-import-meta": "^2.3.3",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"glob": "^13.0.0",
|
|
62
62
|
"globals": "^17.0.0",
|
|
63
63
|
"husky": "^9.1.7",
|
|
64
|
-
"jsdoc-type-pratt-parser": "^7.
|
|
64
|
+
"jsdoc-type-pratt-parser": "^7.1.0",
|
|
65
65
|
"json-schema": "^0.4.0",
|
|
66
66
|
"json-schema-to-typescript": "^15.0.4",
|
|
67
67
|
"lint-staged": "^16.2.7",
|
|
@@ -70,12 +70,12 @@
|
|
|
70
70
|
"playwright": "^1.57.0",
|
|
71
71
|
"replace": "^1.2.2",
|
|
72
72
|
"rimraf": "^6.1.2",
|
|
73
|
-
"rollup": "^4.55.
|
|
73
|
+
"rollup": "^4.55.2",
|
|
74
74
|
"semantic-release": "^25.0.2",
|
|
75
75
|
"sinon": "^21.0.1",
|
|
76
76
|
"ts-api-utils": "^2.4.0",
|
|
77
77
|
"typescript": "5.9.3",
|
|
78
|
-
"typescript-eslint": "^8.53.
|
|
78
|
+
"typescript-eslint": "^8.53.1"
|
|
79
79
|
},
|
|
80
80
|
"engines": {
|
|
81
81
|
"node": "^20.19.0 || ^22.13.0 || >=24"
|
|
@@ -192,5 +192,5 @@
|
|
|
192
192
|
"test-cov": "TIMING=1 c8 --reporter text pnpm run test-no-cov",
|
|
193
193
|
"test-index": "pnpm run test-no-cov test/rules/index.js"
|
|
194
194
|
},
|
|
195
|
-
"version": "62.
|
|
195
|
+
"version": "62.3.0"
|
|
196
196
|
}
|
|
@@ -268,12 +268,87 @@ export default iterateJsdoc(({
|
|
|
268
268
|
return result;
|
|
269
269
|
};
|
|
270
270
|
|
|
271
|
+
/**
|
|
272
|
+
* Recursively extracts types from a namespace declaration.
|
|
273
|
+
* @param {string} prefix - The namespace prefix (e.g., "MyNamespace" or "Outer.Inner").
|
|
274
|
+
* @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.
|
|
275
|
+
* @returns {string[]} Array of fully qualified type names.
|
|
276
|
+
*/
|
|
277
|
+
const getNamespaceTypes = (prefix, moduleDeclaration) => {
|
|
278
|
+
/* c8 ignore next 3 -- Guard for ambient modules without body. */
|
|
279
|
+
if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {
|
|
280
|
+
return [];
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return moduleDeclaration.body.body.flatMap((item) => {
|
|
284
|
+
/** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */
|
|
285
|
+
let declaration = item;
|
|
286
|
+
|
|
287
|
+
if (item.type === 'ExportNamedDeclaration' && item.declaration) {
|
|
288
|
+
declaration = item.declaration;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {
|
|
292
|
+
/* c8 ignore next 4 -- Guard for anonymous class declarations. */
|
|
293
|
+
if (!declaration.id) {
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return [
|
|
298
|
+
`${prefix}.${declaration.id.name}`,
|
|
299
|
+
];
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (declaration.type === 'TSInterfaceDeclaration') {
|
|
303
|
+
return [
|
|
304
|
+
`${prefix}.${declaration.id.name}`,
|
|
305
|
+
...declaration.body.body.map((prop) => {
|
|
306
|
+
// Only `TSPropertySignature` and `TSMethodSignature` have 'key'.
|
|
307
|
+
if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {
|
|
308
|
+
return '';
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Key can be computed or a literal, only handle Identifier.
|
|
312
|
+
if (prop.key.type !== 'Identifier') {
|
|
313
|
+
return '';
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const propName = prop.key.name;
|
|
317
|
+
/* c8 ignore next -- `propName` is always truthy for Identifiers. */
|
|
318
|
+
return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';
|
|
319
|
+
}).filter(Boolean),
|
|
320
|
+
];
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Handle nested namespaces.
|
|
324
|
+
if (declaration.type === 'TSModuleDeclaration') {
|
|
325
|
+
/* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */
|
|
326
|
+
const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';
|
|
327
|
+
/* c8 ignore next 3 -- Guard. */
|
|
328
|
+
if (!nestedName) {
|
|
329
|
+
return [];
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return [
|
|
333
|
+
`${prefix}.${nestedName}`,
|
|
334
|
+
...getNamespaceTypes(`${prefix}.${nestedName}`, declaration),
|
|
335
|
+
];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).
|
|
339
|
+
return [];
|
|
340
|
+
});
|
|
341
|
+
};
|
|
342
|
+
|
|
271
343
|
/**
|
|
272
344
|
* We treat imports differently as we can't introspect their children.
|
|
273
345
|
* @type {string[]}
|
|
274
346
|
*/
|
|
275
347
|
const imports = [];
|
|
276
348
|
|
|
349
|
+
/** @type {Set<string>} */
|
|
350
|
+
const closedTypes = new Set();
|
|
351
|
+
|
|
277
352
|
const allDefinedTypes = new Set(globalScope.variables.map(({
|
|
278
353
|
name,
|
|
279
354
|
}) => {
|
|
@@ -296,6 +371,7 @@ export default iterateJsdoc(({
|
|
|
296
371
|
)?.parent;
|
|
297
372
|
switch (globalItem?.type) {
|
|
298
373
|
case 'ClassDeclaration':
|
|
374
|
+
closedTypes.add(name);
|
|
299
375
|
return [
|
|
300
376
|
name,
|
|
301
377
|
...globalItem.body.body.map((item) => {
|
|
@@ -330,6 +406,12 @@ export default iterateJsdoc(({
|
|
|
330
406
|
return `${name}.${property}`;
|
|
331
407
|
}).filter(Boolean),
|
|
332
408
|
];
|
|
409
|
+
case 'TSModuleDeclaration':
|
|
410
|
+
closedTypes.add(name);
|
|
411
|
+
return [
|
|
412
|
+
name,
|
|
413
|
+
...getNamespaceTypes(name, globalItem),
|
|
414
|
+
];
|
|
333
415
|
case 'VariableDeclarator':
|
|
334
416
|
if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (
|
|
335
417
|
/** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (
|
|
@@ -394,6 +476,29 @@ export default iterateJsdoc(({
|
|
|
394
476
|
|
|
395
477
|
return [];
|
|
396
478
|
})())
|
|
479
|
+
.concat((() => {
|
|
480
|
+
// Detect static property assignments like `MyClass.Prop = ...`
|
|
481
|
+
const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */ (
|
|
482
|
+
sourceCode.ast
|
|
483
|
+
).body;
|
|
484
|
+
|
|
485
|
+
return programBody.flatMap((statement) => {
|
|
486
|
+
if (
|
|
487
|
+
statement.type === 'ExpressionStatement' &&
|
|
488
|
+
statement.expression.type === 'AssignmentExpression' &&
|
|
489
|
+
statement.expression.left.type === 'MemberExpression' &&
|
|
490
|
+
statement.expression.left.object.type === 'Identifier' &&
|
|
491
|
+
statement.expression.left.property.type === 'Identifier' &&
|
|
492
|
+
closedTypes.has(statement.expression.left.object.name)
|
|
493
|
+
) {
|
|
494
|
+
return [
|
|
495
|
+
`${statement.expression.left.object.name}.${statement.expression.left.property.name}`,
|
|
496
|
+
];
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
return [];
|
|
500
|
+
});
|
|
501
|
+
})())
|
|
397
502
|
.concat(...getValidRuntimeIdentifiers(node && (
|
|
398
503
|
(sourceCode.getScope &&
|
|
399
504
|
/* c8 ignore next 3 */
|
|
@@ -529,9 +634,13 @@ export default iterateJsdoc(({
|
|
|
529
634
|
|
|
530
635
|
if (type === 'JsdocTypeName') {
|
|
531
636
|
const structuredTypes = structuredTags[tag.tag]?.type;
|
|
637
|
+
const rootNamespace = val.split('.')[0];
|
|
638
|
+
const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) &&
|
|
639
|
+
!closedTypes.has(rootNamespace);
|
|
640
|
+
|
|
532
641
|
if (!allDefinedTypes.has(val) &&
|
|
533
642
|
!definedNamesAndNamepaths.has(val) &&
|
|
534
|
-
(!Array.isArray(structuredTypes) || !structuredTypes.includes(val))
|
|
643
|
+
(!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid
|
|
535
644
|
) {
|
|
536
645
|
const parent =
|
|
537
646
|
/**
|
|
@@ -41,6 +41,7 @@ export default iterateJsdoc(({
|
|
|
41
41
|
objectFieldSeparator = 'comma',
|
|
42
42
|
objectFieldSeparatorOptionalLinebreak = true,
|
|
43
43
|
objectFieldSeparatorTrailingPunctuation = false,
|
|
44
|
+
objectTypeBracketSpacing = '',
|
|
44
45
|
parameterDefaultValueSpacing = ' ',
|
|
45
46
|
postMethodNameSpacing = '',
|
|
46
47
|
postNewSpacing = ' ',
|
|
@@ -345,6 +346,9 @@ export default iterateJsdoc(({
|
|
|
345
346
|
typeNode.meta.propertyIndent = objectFieldIndent;
|
|
346
347
|
typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;
|
|
347
348
|
errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;
|
|
349
|
+
} else if ((typeNode.meta.bracketSpacing ?? '') !== objectTypeBracketSpacing) {
|
|
350
|
+
typeNode.meta.bracketSpacing = objectTypeBracketSpacing;
|
|
351
|
+
errorMessage = `Object type bracket spacing should be "${objectTypeBracketSpacing}"`;
|
|
348
352
|
}
|
|
349
353
|
|
|
350
354
|
break;
|
|
@@ -615,6 +619,10 @@ will determine whether to add punctuation corresponding to the
|
|
|
615
619
|
Defaults to \`false\`.`,
|
|
616
620
|
type: 'boolean',
|
|
617
621
|
},
|
|
622
|
+
objectTypeBracketSpacing: {
|
|
623
|
+
description: 'The space character (if any) to add after an object\'s initial curly bracket and before its ending curly bracket',
|
|
624
|
+
type: 'string',
|
|
625
|
+
},
|
|
618
626
|
parameterDefaultValueSpacing: {
|
|
619
627
|
description: 'The space character (if any) to use between the equal signs of a default value. Defaults to " ".',
|
|
620
628
|
type: 'string',
|
package/src/rules.d.ts
CHANGED
|
@@ -3136,6 +3136,10 @@ export interface Rules {
|
|
|
3136
3136
|
* Defaults to `false`.
|
|
3137
3137
|
*/
|
|
3138
3138
|
objectFieldSeparatorTrailingPunctuation?: boolean;
|
|
3139
|
+
/**
|
|
3140
|
+
* The space character (if any) to add after an object's initial curly bracket and before its ending curly bracket
|
|
3141
|
+
*/
|
|
3142
|
+
objectTypeBracketSpacing?: string;
|
|
3139
3143
|
/**
|
|
3140
3144
|
* The space character (if any) to use between the equal signs of a default value. Defaults to " ".
|
|
3141
3145
|
*/
|