projecte_ionic/node_modules/eslint-plugin-jsdoc/dist/rules/checkParamNames.js.map
2022-02-09 18:30:03 +01:00

1 line
18 KiB
Plaintext
Executable file

{"version":3,"sources":["../../src/rules/checkParamNames.js"],"names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","enableFixer","functionParameterNames","jsdoc","_jsdocNode","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","splice","functionParameterName","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","trim","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","forEach","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","push","extraProperties","match","hasMissing","length","missingProperty","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","context","jsdocNode","checkTypesPattern","options","lastSlashPos","lastIndexOf","RegExp","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst validateParameterNames = (\n targetTagName : string,\n allowExtraTrailingParamDocs: boolean,\n checkDestructured : boolean,\n checkRestProperty : boolean,\n checkTypesRegex : RegExp,\n enableFixer: boolean,\n functionParameterNames : Array<string>, jsdoc, _jsdocNode, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([, tag]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([, tag]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n\n return paramTags.some(([, tag], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n jsdoc.tags.splice(tagsIndex, 1);\n } : null);\n\n return true;\n }\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n const functionParameterName = functionParameterNames[index - dotted];\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [parameterName, {\n names: properties, hasPropertyRest, rests, annotationParamName,\n }] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([, paramTag]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([, paramTag]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n expectedNames.forEach((name, idx) => {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n return;\n }\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n return;\n }\n missingProperties.push(name);\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n });\n\n const extraProperties = [];\n if (!hasPropertyRest || checkRestProperty) {\n actualNames.forEach((name, idx) => {\n const match = name.startsWith(tag.name.trim() + '.');\n if (match && !expectedNames.some(utils.comparePaths(name)) && !utils.comparePaths(name)(tag.name)) {\n extraProperties.push([name, paramTags[idx][1]]);\n }\n });\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n missingProperties.forEach((missingProperty) => {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tag);\n });\n }\n\n if (extraProperties.length) {\n extraProperties.forEach(([extraProperty, tg]) => {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n });\n\n return true;\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {name} = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([, {name}]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validateParameterNamesDeep = (\n targetTagName : string, _allowExtraTrailingParamDocs: boolean,\n jsdocParameterNames : Array<string>, jsdoc, report : Function,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({name: jsdocParameterName, idx}) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n } = context.options[0] || {};\n\n const lastSlashPos = checkTypesPattern.lastIndexOf('/');\n const checkTypesRegex = lastSlashPos === -1 ?\n new RegExp(checkTypesPattern) :\n new RegExp(checkTypesPattern.slice(1, lastSlashPos), checkTypesPattern.slice(lastSlashPos + 1));\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n const functionParameterNames = utils.getFunctionParameterNames();\n const targetTagName = utils.getPreferredTagName({tagName: 'param'});\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n enableFixer,\n functionParameterNames,\n jsdoc, jsdocNode, utils, report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs,\n jsdocParameterNamesDeep,\n jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkParamNames.js"}