eslint-plugin-jsdoc 39.3.21 → 39.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -22332,6 +22332,39 @@ function quux () {}
|
|
|
22332
22332
|
function quux () {}
|
|
22333
22333
|
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
22334
22334
|
// Message: Syntax error in supresss type: blah
|
|
22335
|
+
|
|
22336
|
+
/**
|
|
22337
|
+
* @param {Object[]} employees
|
|
22338
|
+
* @param {string} employees[.name - The name of an employee.
|
|
22339
|
+
*/
|
|
22340
|
+
function quux () {}
|
|
22341
|
+
// Message: Invalid name: unpaired brackets
|
|
22342
|
+
|
|
22343
|
+
/**
|
|
22344
|
+
* @param {Object[]} employees
|
|
22345
|
+
* @param {string} [] - The name of an employee.
|
|
22346
|
+
*/
|
|
22347
|
+
function quux () {}
|
|
22348
|
+
// Message: Invalid name: empty name
|
|
22349
|
+
|
|
22350
|
+
/**
|
|
22351
|
+
* @param {Object[]} employees
|
|
22352
|
+
* @param {string} [] - The name of an employee.
|
|
22353
|
+
*/
|
|
22354
|
+
function quux () {}
|
|
22355
|
+
// Message: Invalid name: empty name
|
|
22356
|
+
|
|
22357
|
+
/**
|
|
22358
|
+
* @param {string} [name=] - The name of an employee.
|
|
22359
|
+
*/
|
|
22360
|
+
function quux () {}
|
|
22361
|
+
// Message: Invalid name: empty default value
|
|
22362
|
+
|
|
22363
|
+
/**
|
|
22364
|
+
* @param {string} [name==] - The name of an employee.
|
|
22365
|
+
*/
|
|
22366
|
+
function quux () {}
|
|
22367
|
+
// Message: Invalid name: invalid default value syntax
|
|
22335
22368
|
````
|
|
22336
22369
|
|
|
22337
22370
|
The following patterns are not considered problems:
|
|
@@ -22663,6 +22696,18 @@ function quux() {
|
|
|
22663
22696
|
*/
|
|
22664
22697
|
function quux ( id, options ) {
|
|
22665
22698
|
}
|
|
22699
|
+
|
|
22700
|
+
|
|
22701
|
+
/**
|
|
22702
|
+
* Assign the project to a list of employees.
|
|
22703
|
+
* @param {Object[]} employees - The employees who are responsible for the project.
|
|
22704
|
+
* @param {string} employees[].name - The name of an employee.
|
|
22705
|
+
* @param {string} employees[].department - The employee's department.
|
|
22706
|
+
*/
|
|
22707
|
+
function assign(employees) {
|
|
22708
|
+
// ...
|
|
22709
|
+
}
|
|
22710
|
+
// "jsdoc/valid-types": ["error"|"warn", {"allowEmptyNamepaths":true,"checkSeesForNamepaths":false}]
|
|
22666
22711
|
````
|
|
22667
22712
|
|
|
22668
22713
|
|
|
@@ -11,9 +11,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
11
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
13
|
const extraTypes = ['null', 'undefined', 'void', 'string', 'boolean', 'object', 'function', 'symbol', 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', 'Array', 'Object', 'RegExp', 'Date', 'Function'];
|
|
14
|
-
|
|
14
|
+
const typescriptGlobals = [
|
|
15
15
|
// https://www.typescriptlang.org/docs/handbook/utility-types.html
|
|
16
|
-
|
|
16
|
+
'Partial', 'Required', 'Readonly', 'Record', 'Pick', 'Omit', 'Exclude', 'Extract', 'NonNullable', 'Parameters', 'ConstructorParameters', 'ReturnType', 'InstanceType', 'ThisParameterType', 'OmitThisParameter', 'ThisType', 'Uppercase', 'Lowercase', 'Capitalize', 'Uncapitalize'];
|
|
17
17
|
const stripPseudoTypes = str => {
|
|
18
18
|
return str && str.replace(/(?:\.|<>|\.<>|\[\])$/u, '');
|
|
19
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.js","names":["extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","parseComment","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","tryParseType","parseType","traverse","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\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',\n];\n\n// https://www.typescriptlang.org/docs/handbook/utility-types.html\nconst typescriptGlobals = [\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\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = 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((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\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 const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (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('template');\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 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 }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"noUndefinedTypes.js","names":["extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","parseComment","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","tryParseType","parseType","traverse","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\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',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\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\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = 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((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\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 const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (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('template');\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 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 }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
package/dist/rules/validTypes.js
CHANGED
|
@@ -92,6 +92,15 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
92
92
|
}
|
|
93
93
|
return true;
|
|
94
94
|
};
|
|
95
|
+
if (tag.problems.length) {
|
|
96
|
+
const msg = tag.problems.reduce((str, {
|
|
97
|
+
message
|
|
98
|
+
}) => {
|
|
99
|
+
return str + '; ' + message;
|
|
100
|
+
}, '').slice(2);
|
|
101
|
+
report(`Invalid name: ${msg}`, null, tag);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
95
104
|
if (tag.tag === 'borrows') {
|
|
96
105
|
const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '').trim();
|
|
97
106
|
if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validTypes.js","names":["asExpression","suppressTypes","Set","tryParsePathIgnoreError","path","tryParse","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parse","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","parsedTypes","traverse","node","value","undefined","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import {\n tryParse,\n parse,\n traverse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n const {\n value: type,\n } = node;\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in supresss type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = [\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validTypes.js","names":["asExpression","suppressTypes","Set","tryParsePathIgnoreError","path","tryParse","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parse","problems","length","msg","reduce","str","message","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","parsedTypes","traverse","node","value","undefined","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import {\n tryParse,\n parse,\n traverse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.problems.length) {\n const msg = tag.problems.reduce((str, {\n message,\n }) => {\n return str + '; ' + message;\n }, '').slice(2);\n report(`Invalid name: ${msg}`, null, tag);\n continue;\n }\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n const {\n value: type,\n } = node;\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in supresss type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = [\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED