eslint-plugin-jsdoc 38.0.8 → 38.1.2
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 +48 -6
- package/dist/rules/checkTypes.js +42 -36
- package/dist/rules/checkTypes.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4890,11 +4890,12 @@ as a lone type. However, one additional complexity is that TypeScript allows and
|
|
|
4890
4890
|
actually [currently requires](https://github.com/microsoft/TypeScript/issues/20555)
|
|
4891
4891
|
`Object` (with the initial upper-case) if used in the syntax
|
|
4892
4892
|
`Object.<keyType, valueType>` or `Object<keyType, valueType`, perhaps to
|
|
4893
|
-
adhere to
|
|
4893
|
+
adhere to that which [JSDoc documents](https://jsdoc.app/tags-type.html).
|
|
4894
4894
|
|
|
4895
4895
|
So, for optimal compatibility with TypeScript (especially since TypeScript
|
|
4896
|
-
tools can be used on plain JavaScript with JSDoc), we are now
|
|
4897
|
-
TypeScript approach by default
|
|
4896
|
+
tools can be used on plain JavaScript with JSDoc), we are now requiring this
|
|
4897
|
+
TypeScript approach by default (if you set `object` type `preferredTypes` in
|
|
4898
|
+
TypeScript mode, the defaults will not apply).
|
|
4898
4899
|
|
|
4899
4900
|
Basically, for primitives, we want to define the type as a primitive, because
|
|
4900
4901
|
that's what we use in 99.9% of cases. For everything else, we use the type
|
|
@@ -5498,7 +5499,7 @@ function quux (foo) {
|
|
|
5498
5499
|
function a () {}
|
|
5499
5500
|
|
|
5500
5501
|
/**
|
|
5501
|
-
* @typedef {Object} foo
|
|
5502
|
+
* @typedef {Object<string>} foo
|
|
5502
5503
|
*/
|
|
5503
5504
|
function b () {}
|
|
5504
5505
|
// Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"object":"Object"}}}
|
|
@@ -5557,6 +5558,36 @@ function quux (foo) {
|
|
|
5557
5558
|
}
|
|
5558
5559
|
// Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","Object.<>":"Object<>","object<>":"Object<>"}}}
|
|
5559
5560
|
// Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object<>".
|
|
5561
|
+
|
|
5562
|
+
/**
|
|
5563
|
+
* @param {object.<string>} foo
|
|
5564
|
+
*/
|
|
5565
|
+
function quux (foo) {
|
|
5566
|
+
|
|
5567
|
+
}
|
|
5568
|
+
// Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","Object.<>":"Object<>","object<>":"Object<>"}}}
|
|
5569
|
+
// Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object<>".
|
|
5570
|
+
|
|
5571
|
+
/**
|
|
5572
|
+
* @param {object.<string>} foo
|
|
5573
|
+
*/
|
|
5574
|
+
function quux (foo) {
|
|
5575
|
+
|
|
5576
|
+
}
|
|
5577
|
+
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
5578
|
+
// Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object<>".
|
|
5579
|
+
|
|
5580
|
+
/**
|
|
5581
|
+
*
|
|
5582
|
+
* @param {Object} param
|
|
5583
|
+
* @return {Object | String}
|
|
5584
|
+
*/
|
|
5585
|
+
function abc(param) {
|
|
5586
|
+
if (param.a)
|
|
5587
|
+
return {};
|
|
5588
|
+
return 'abc';
|
|
5589
|
+
}
|
|
5590
|
+
// Message: Invalid JSDoc @param "param" type "Object"; prefer: "object".
|
|
5560
5591
|
````
|
|
5561
5592
|
|
|
5562
5593
|
The following patterns are not considered problems:
|
|
@@ -5817,7 +5848,7 @@ function b () {}
|
|
|
5817
5848
|
function a () {}
|
|
5818
5849
|
|
|
5819
5850
|
/**
|
|
5820
|
-
* @typedef {Object} foo
|
|
5851
|
+
* @typedef {Object<string>} foo
|
|
5821
5852
|
*/
|
|
5822
5853
|
function b () {}
|
|
5823
5854
|
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
@@ -5846,7 +5877,7 @@ function quux (foo) {
|
|
|
5846
5877
|
}
|
|
5847
5878
|
|
|
5848
5879
|
/**
|
|
5849
|
-
* @param {Object
|
|
5880
|
+
* @param {Object<string>} foo
|
|
5850
5881
|
*/
|
|
5851
5882
|
function quux (foo) {
|
|
5852
5883
|
|
|
@@ -5864,6 +5895,17 @@ function a () {}
|
|
|
5864
5895
|
*/
|
|
5865
5896
|
function a () {}
|
|
5866
5897
|
// Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":"Object<>","object<>":"Object<>"}}}
|
|
5898
|
+
|
|
5899
|
+
/**
|
|
5900
|
+
* Does something.
|
|
5901
|
+
*
|
|
5902
|
+
* @param {Object<string,string>} spec - Foo.
|
|
5903
|
+
*/
|
|
5904
|
+
function foo(spec) {
|
|
5905
|
+
return spec;
|
|
5906
|
+
}
|
|
5907
|
+
|
|
5908
|
+
foo()
|
|
5867
5909
|
````
|
|
5868
5910
|
|
|
5869
5911
|
|
package/dist/rules/checkTypes.js
CHANGED
|
@@ -76,10 +76,19 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
76
76
|
return utils.tagMightHaveTypePosition(tag.tag);
|
|
77
77
|
});
|
|
78
78
|
const {
|
|
79
|
-
preferredTypes,
|
|
79
|
+
preferredTypes: preferredTypesOriginal,
|
|
80
80
|
structuredTags,
|
|
81
81
|
mode
|
|
82
82
|
} = settings;
|
|
83
|
+
const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal);
|
|
84
|
+
const preferredTypes = { ...(injectObjectPreferredTypes ? {
|
|
85
|
+
Object: 'object',
|
|
86
|
+
'object.<>': 'Object<>',
|
|
87
|
+
'Object.<>': 'Object<>',
|
|
88
|
+
'object<>': 'Object<>'
|
|
89
|
+
} : {}),
|
|
90
|
+
...preferredTypesOriginal
|
|
91
|
+
};
|
|
83
92
|
const {
|
|
84
93
|
noDefaults,
|
|
85
94
|
unifyParentAndChildTypeChecks,
|
|
@@ -100,47 +109,43 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
100
109
|
let hasMatchingPreferredType = false;
|
|
101
110
|
let isGenericMatch = false;
|
|
102
111
|
let typeName = typeNodeName;
|
|
112
|
+
const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';
|
|
103
113
|
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
|
|
108
|
-
var _parentNode$meta, _parentNode$meta2;
|
|
114
|
+
if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
|
|
115
|
+
var _parentNode$meta, _parentNode$meta2;
|
|
109
116
|
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
const brackets = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets;
|
|
118
|
+
const dot = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.dot;
|
|
112
119
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
if (brackets === 'angle') {
|
|
121
|
+
const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];
|
|
122
|
+
isGenericMatch = checkPostFixes.some(checkPostFix => {
|
|
123
|
+
if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName + checkPostFix]) !== undefined) {
|
|
124
|
+
typeName += checkPostFix;
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
120
127
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
return false;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
124
131
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
+
if (!isGenericMatch && property) {
|
|
133
|
+
const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];
|
|
134
|
+
isGenericMatch = checkPostFixes.some(checkPostFix => {
|
|
135
|
+
if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[checkPostFix]) !== undefined) {
|
|
136
|
+
typeName = checkPostFix;
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
132
139
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
140
|
+
return false;
|
|
141
|
+
});
|
|
136
142
|
}
|
|
137
|
-
|
|
138
|
-
const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
|
|
139
|
-
const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
|
|
140
|
-
isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;
|
|
141
|
-
hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
|
|
142
143
|
}
|
|
143
144
|
|
|
145
|
+
const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
|
|
146
|
+
const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
|
|
147
|
+
isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;
|
|
148
|
+
hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
|
|
144
149
|
return [hasMatchingPreferredType, typeName, isGenericMatch];
|
|
145
150
|
};
|
|
146
151
|
/**
|
|
@@ -159,14 +164,15 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
159
164
|
let changedPreferred = preferred;
|
|
160
165
|
|
|
161
166
|
for (const strictNativeType of strictNativeTypes) {
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
var _parentNode$left, _parentNode$left2;
|
|
168
|
+
|
|
169
|
+
if (strictNativeType === 'object' && ( // This is not set to remap with exact type match (e.g.,
|
|
164
170
|
// `object: 'Object'`), so can ignore (including if circular)
|
|
165
171
|
!(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) || // Although present on `preferredTypes` for remapping, this is a
|
|
166
172
|
// parent object without a parent match (and not
|
|
167
173
|
// `unifyParentAndChildTypeChecks`) and we don't want
|
|
168
174
|
// `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
|
|
169
|
-
parentNode !== null && parentNode !== void 0 && parentNode.elements.length && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.value) === 'Object')) {
|
|
175
|
+
parentNode !== null && parentNode !== void 0 && parentNode.elements.length && (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left = parentNode.left) === null || _parentNode$left === void 0 ? void 0 : _parentNode$left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left2 = parentNode.left) === null || _parentNode$left2 === void 0 ? void 0 : _parentNode$left2.value) === 'Object')) {
|
|
170
176
|
continue;
|
|
171
177
|
}
|
|
172
178
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","types","preferredSetting","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n // Todo: Avoid typescript condition if moving to default typescript\n strictNativeType === 'object' && mode === 'typescript' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements.length && (\n parentNode?.left.type === 'JsdocTypeName' &&\n parentNode?.left.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","types","preferredSetting","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n const preferredTypes = {\n ...injectObjectPreferredTypes ? {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n } : {},\n ...preferredTypesOriginal,\n };\n\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements.length && (\n parentNode?.left?.type === 'JsdocTypeName' &&\n parentNode?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
|
package/package.json
CHANGED