eslint-plugin-jsdoc
Version:
JSDoc linting rules for ESLint.
1 lines • 7.32 kB
Source Map (JSON)
{"version":3,"file":"tsPreferFunctionType.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdocUtils","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","indent","jsdoc","utils","enableFixer","options","checkType","tag","potentialType","type","parsedType","parseType","traverse","nde","parentNode","property","index","object","elements","length","reportJSDoc","func","arrow","constructor","meta","parameters","parenthesis","returnType","typeParameters","Array","isArray","idx","indexOf","Error","rewireByParsedType","tags","filterTags","Boolean","tagMightHaveTypePosition","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","module"],"sources":["../../src/rules/tsPreferFunctionType.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n parse as parseType,\n traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n utils,\n}) => {\n const {\n enableFixer = true,\n } = context.options[0] || {};\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkType = (tag) => {\n const potentialType = tag.type;\n\n /** @type {import('jsdoc-type-pratt-parser').RootResult} */\n let parsedType;\n try {\n parsedType = parseType(\n /** @type {string} */ (potentialType), 'typescript',\n );\n } catch {\n return;\n }\n\n traverse(parsedType, (nde, parentNode) => {\n // @ts-expect-error Adding our own property for use below\n nde.parentNode = parentNode;\n });\n\n traverse(parsedType, (nde, parentNode, property, index) => {\n switch (nde.type) {\n case 'JsdocTypeCallSignature': {\n const object = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (\n parentNode\n );\n if (typeof index === 'number' && object.elements.length === 1) {\n utils.reportJSDoc(\n 'Call signature found; function type preferred.',\n tag,\n enableFixer ? () => {\n const func = /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */ ({\n arrow: true,\n constructor: false,\n meta: /** @type {Required<import('jsdoc-type-pratt-parser').MethodSignatureResult['meta']>} */ (\n nde.meta\n ),\n parameters: nde.parameters,\n parenthesis: true,\n returnType: nde.returnType,\n type: 'JsdocTypeFunction',\n typeParameters: nde.typeParameters,\n });\n\n if (property && 'parentNode' in object && object.parentNode) {\n if (typeof object.parentNode === 'object' &&\n 'elements' in object.parentNode &&\n Array.isArray(object.parentNode.elements)\n ) {\n const idx = object.parentNode.elements.indexOf(object);\n object.parentNode.elements[idx] = func;\n /* c8 ignore next 6 -- Guard */\n } else {\n throw new Error(\n // @ts-expect-error Ok\n `Rule currently unable to handle type ${object.parentNode.type}`,\n );\n }\n } else {\n parsedType = func;\n }\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n }\n\n break;\n }\n }\n });\n };\n\n const tags = utils.filterTags(({\n tag,\n }) => {\n return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n });\n\n for (const tag of tags) {\n if (tag.type) {\n checkType(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefers function types over call signatures when there are no other properties.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-prefer-function-type.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether to enable the fixer or not',\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}