blob: 3e38caa67ec2d5b676049d2acc116dc433301629 [file] [log] [blame]
{"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","options","allowEmptyNamepaths","checkSeesForNamepaths","tags","forEach","tag","validNamepathParsing","namepath","tagName","error","handled","includes","endChar","slice","memberofError","startChar","charAt","validTypeParsing","type","hasTypePosition","tagMightHaveTypePosition","Boolean","mustHaveTypePosition","tagMustHaveTypePosition","hasNameOrNamepathPosition","tagMightHaveNamePosition","name","mustHaveNameOrNamepathPosition","tagMustHaveNamePosition","hasEither","tagMightHaveEitherTypeOrNamePosition","mustHaveEither","tagMustHaveEitherTypeOrNamePosition","thisNamepath","description","replace","test","thatNamepath","iterateAllJsdocs","meta","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {parse} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\nimport warnRemovedSettings from '../warnRemovedSettings';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n}) => {\n warnRemovedSettings(context, 'valid-types');\n\n const {\n allowEmptyNamepaths = true,\n checkSeesForNamepaths = false,\n } = context.options[0] || {};\n\n if (!jsdoc.tags) {\n return;\n }\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n try {\n parse(namepath);\n } catch (error) {\n let handled = false;\n\n if (tagName) {\n if (['memberof', 'memberof!'].includes(tagName)) {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n try {\n parse(namepath.slice(0, -1));\n handled = true;\n } catch (memberofError) {\n // Use the original error for including the whole type\n }\n }\n } else if (tagName === 'borrows') {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n try {\n parse(namepath.slice(1));\n handled = true;\n } catch (memberofError) {\n // Use the original error for including the whole type\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type);\n } catch (error) {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);\n\n const hasNameOrNamepathPosition = utils.tagMightHaveNamePosition(tag.tag) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);\n const mustHaveNameOrNamepathPosition = utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;\n\n const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && hasTypePosition || hasNameOrNamepathPosition;\n const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);\n\n if (tag.tag === 'borrows') {\n const thisNamepath = tag.description.replace(asExpression, '');\n\n if (!asExpression.test(tag.description) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${tag.description}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n } else {\n if (mustHaveEither && !hasEither && !mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have either a type or namepath`, null, tag);\n\n return;\n }\n\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n } else if (mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have a type`, null, tag);\n }\n\n if (hasNameOrNamepathPosition) {\n validNamepathParsing(tag.name, tag.tag);\n } else if (mustHaveNameOrNamepathPosition) {\n report(`Tag @${tag.tag} must have a name/namepath`, null, tag);\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: true,\n type: 'boolean',\n },\n checkSeesForNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}