eslint-plugin-jsdoc 39.3.5 → 39.3.12
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 +273 -52
- package/dist/WarnSettings.js +0 -5
- package/dist/WarnSettings.js.map +1 -1
- package/dist/alignTransform.js +69 -61
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js +7 -26
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/defaultTagOrder.js +30 -14
- package/dist/defaultTagOrder.js.map +1 -1
- package/dist/exportParser.js +34 -143
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js +7 -26
- package/dist/generateRule.js.map +1 -1
- package/dist/getDefaultTagStructureForMode.js +189 -93
- package/dist/getDefaultTagStructureForMode.js.map +1 -1
- package/dist/index.js +0 -51
- package/dist/index.js.map +1 -1
- package/dist/iterateJsdoc.js +44 -207
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +72 -221
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js +0 -8
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkAlignment.js +0 -8
- package/dist/rules/checkAlignment.js.map +1 -1
- package/dist/rules/checkExamples.js +25 -63
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +0 -7
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +9 -30
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js +9 -47
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js +1 -18
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkSyntax.js +2 -5
- package/dist/rules/checkSyntax.js.map +1 -1
- package/dist/rules/checkTagNames.js +0 -18
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +17 -46
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/checkValues.js +0 -18
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/emptyTags.js +6 -11
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/implementsOnClasses.js +0 -6
- package/dist/rules/implementsOnClasses.js.map +1 -1
- package/dist/rules/matchDescription.js +0 -20
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js +2 -17
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +10 -34
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js +0 -8
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js +2 -16
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js +0 -7
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js +2 -16
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +2 -16
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js +3 -9
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js +0 -7
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +13 -34
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js +2 -26
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js +0 -17
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +0 -9
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js +0 -16
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js +13 -58
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +6 -53
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireParamDescription.js +0 -4
- package/dist/rules/requireParamDescription.js.map +1 -1
- package/dist/rules/requireParamName.js +0 -4
- package/dist/rules/requireParamName.js.map +1 -1
- package/dist/rules/requireParamType.js +0 -4
- package/dist/rules/requireParamType.js.map +1 -1
- package/dist/rules/requireProperty.js +0 -9
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requirePropertyDescription.js +0 -4
- package/dist/rules/requirePropertyDescription.js.map +1 -1
- package/dist/rules/requirePropertyName.js +0 -4
- package/dist/rules/requirePropertyName.js.map +1 -1
- package/dist/rules/requirePropertyType.js +0 -4
- package/dist/rules/requirePropertyType.js.map +1 -1
- package/dist/rules/requireReturns.js +13 -23
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +12 -20
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireReturnsDescription.js +0 -6
- package/dist/rules/requireReturnsDescription.js.map +1 -1
- package/dist/rules/requireReturnsType.js +0 -4
- package/dist/rules/requireReturnsType.js.map +1 -1
- package/dist/rules/requireThrows.js +6 -15
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js +13 -29
- package/dist/rules/requireYields.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js +8 -29
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/dist/rules/sortTags.js +17 -30
- package/dist/rules/sortTags.js.map +1 -1
- package/dist/rules/tagLines.js +0 -26
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js +22 -53
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js +7 -4
- package/dist/tagNames.js.map +1 -1
- package/dist/utils/hasReturnValue.js +22 -66
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPropertyNames.js","names":["validatePropertyNames","targetTagName","enableFixer","jsdoc","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type"],"sources":["../../src/rules/checkPropertyNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} enableFixer\n * @param jsdoc\n * @param utils\n * @returns {boolean}\n */\nconst validatePropertyNames = (\n targetTagName,\n enableFixer,\n jsdoc, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], 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 utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {string[]} jsdocPropertyNames\n * @param jsdoc\n * @param {Function} report\n */\nconst validatePropertyNamesDeep = (\n targetTagName,\n jsdocPropertyNames, jsdoc, report,\n) => {\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n name: jsdocPropertyName,\n idx,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({\n tagName: 'property',\n });\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-property-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkPropertyNames.js","names":["validatePropertyNames","targetTagName","enableFixer","jsdoc","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type"],"sources":["../../src/rules/checkPropertyNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} enableFixer\n * @param jsdoc\n * @param utils\n * @returns {boolean}\n */\nconst validatePropertyNames = (\n targetTagName,\n enableFixer,\n jsdoc, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], 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 utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {string[]} jsdocPropertyNames\n * @param jsdoc\n * @param {Function} report\n */\nconst validatePropertyNamesDeep = (\n targetTagName,\n jsdocPropertyNames, jsdoc, report,\n) => {\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n name: jsdocPropertyName,\n idx,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({\n tagName: 'property',\n });\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-property-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
9
|
var _default = (0, _iterateJsdoc.default)(({
|
|
13
10
|
jsdoc,
|
|
14
11
|
report,
|
|
@@ -16,8 +13,9 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
16
13
|
}) => {
|
|
17
14
|
const {
|
|
18
15
|
mode
|
|
19
|
-
} = settings;
|
|
16
|
+
} = settings;
|
|
20
17
|
|
|
18
|
+
// Don't check for "permissive" and "closure"
|
|
21
19
|
if (mode === 'jsdoc' || mode === 'typescript') {
|
|
22
20
|
for (const tag of jsdoc.tags) {
|
|
23
21
|
if (tag.type.slice(-1) === '=') {
|
|
@@ -36,7 +34,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
36
34
|
type: 'suggestion'
|
|
37
35
|
}
|
|
38
36
|
});
|
|
39
|
-
|
|
40
37
|
exports.default = _default;
|
|
41
38
|
module.exports = exports.default;
|
|
42
39
|
//# sourceMappingURL=checkSyntax.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkSyntax.js","names":["iterateJsdoc","jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url"],"sources":["../../src/rules/checkSyntax.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkSyntax.js","names":["iterateJsdoc","jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url"],"sources":["../../src/rules/checkSyntax.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAAA,eAE5B,IAAAA,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGD,QAAQ;;EAEZ;EACA,IAAIC,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,YAAY,EAAE;IAC7C,KAAK,MAAMC,GAAG,IAAIJ,KAAK,CAACK,IAAI,EAAE;MAC5B,IAAID,GAAG,CAACE,IAAI,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC9BN,MAAM,CAAC,qDAAqD,EAAE,IAAI,EAAEG,GAAG,CAAC;QACxE;MACF;IACF;EACF;AACF,CAAC,EAAE;EACDI,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,oGAAoG;MACjHC,GAAG,EAAE;IACP,CAAC;IACDN,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
|
|
@@ -4,16 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _escapeStringRegexp = _interopRequireDefault(require("escape-string-regexp"));
|
|
9
|
-
|
|
10
8
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/
|
|
15
11
|
const jsxTagNames = new Set(['jsx', 'jsxFrag', 'jsxImportSource', 'jsxRuntime']);
|
|
16
|
-
|
|
17
12
|
var _default = (0, _iterateJsdoc.default)(({
|
|
18
13
|
sourceCode,
|
|
19
14
|
jsdoc,
|
|
@@ -34,59 +29,47 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
34
29
|
} = settings;
|
|
35
30
|
const definedStructuredTags = Object.keys(structuredTags);
|
|
36
31
|
const definedNonPreferredTags = Object.keys(tagNamePreference);
|
|
37
|
-
|
|
38
32
|
if (definedNonPreferredTags.length) {
|
|
39
33
|
definedPreferredTags = Object.values(tagNamePreference).map(preferredTag => {
|
|
40
34
|
if (typeof preferredTag === 'string') {
|
|
41
35
|
// May become an empty string but will be filtered out below
|
|
42
36
|
return preferredTag;
|
|
43
37
|
}
|
|
44
|
-
|
|
45
38
|
if (!preferredTag) {
|
|
46
39
|
return undefined;
|
|
47
40
|
}
|
|
48
|
-
|
|
49
41
|
if (typeof preferredTag !== 'object') {
|
|
50
42
|
utils.reportSettings('Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.');
|
|
51
43
|
}
|
|
52
|
-
|
|
53
44
|
return preferredTag.replacement;
|
|
54
45
|
}).filter(preferredType => {
|
|
55
46
|
return preferredType;
|
|
56
47
|
});
|
|
57
48
|
}
|
|
58
|
-
|
|
59
49
|
for (const jsdocTag of jsdoc.tags) {
|
|
60
50
|
const tagName = jsdocTag.tag;
|
|
61
|
-
|
|
62
51
|
if (jsxTags && jsxTagNames.has(tagName)) {
|
|
63
52
|
continue;
|
|
64
53
|
}
|
|
65
|
-
|
|
66
54
|
if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags, ...definedStructuredTags])) {
|
|
67
55
|
let preferredTagName = utils.getPreferredTagName({
|
|
68
56
|
allowObjectReturn: true,
|
|
69
57
|
defaultMessage: `Blacklisted tag found (\`@${tagName}\`)`,
|
|
70
58
|
tagName
|
|
71
59
|
});
|
|
72
|
-
|
|
73
60
|
if (!preferredTagName) {
|
|
74
61
|
continue;
|
|
75
62
|
}
|
|
76
|
-
|
|
77
63
|
let message;
|
|
78
|
-
|
|
79
64
|
if (typeof preferredTagName === 'object') {
|
|
80
65
|
({
|
|
81
66
|
message,
|
|
82
67
|
replacement: preferredTagName
|
|
83
68
|
} = preferredTagName);
|
|
84
69
|
}
|
|
85
|
-
|
|
86
70
|
if (!message) {
|
|
87
71
|
message = `Invalid JSDoc tag (preference). Replace "${tagName}" JSDoc tag with "${preferredTagName}".`;
|
|
88
72
|
}
|
|
89
|
-
|
|
90
73
|
if (preferredTagName !== tagName) {
|
|
91
74
|
report(message, fixer => {
|
|
92
75
|
const replacement = sourceCode.getText(jsdocNode).replace(new RegExp(`@${(0, _escapeStringRegexp.default)(tagName)}\\b`, 'u'), `@${preferredTagName}`);
|
|
@@ -123,7 +106,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
123
106
|
type: 'suggestion'
|
|
124
107
|
}
|
|
125
108
|
});
|
|
126
|
-
|
|
127
109
|
exports.default = _default;
|
|
128
110
|
module.exports = exports.default;
|
|
129
111
|
//# sourceMappingURL=checkTagNames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTagNames.js","names":["jsxTagNames","Set","iterateJsdoc","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n jsxTags,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkTagNames.js","names":["jsxTagNames","Set","iterateJsdoc","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n jsxTags,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
package/dist/rules/checkTypes.js
CHANGED
|
@@ -4,14 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
9
|
-
|
|
10
8
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
|
|
11
|
+
|
|
15
12
|
/**
|
|
16
13
|
* Adjusts the parent type node `meta` for generic matches (or type node
|
|
17
14
|
* `type` for `JsdocTypeAny`) and sets the type node `value`.
|
|
@@ -24,10 +21,8 @@ const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', '
|
|
|
24
21
|
* @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
|
|
25
22
|
* @returns {void}
|
|
26
23
|
*/
|
|
27
|
-
|
|
28
24
|
const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {
|
|
29
25
|
let ret = preferred;
|
|
30
|
-
|
|
31
26
|
if (isGenericMatch) {
|
|
32
27
|
if (preferred === '[]') {
|
|
33
28
|
parentNode.meta.brackets = 'square';
|
|
@@ -35,14 +30,12 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent
|
|
|
35
30
|
ret = 'Array';
|
|
36
31
|
} else {
|
|
37
32
|
const dotBracketEnd = preferred.match(/\.(?:<>)?$/u);
|
|
38
|
-
|
|
39
33
|
if (dotBracketEnd) {
|
|
40
34
|
parentNode.meta.brackets = 'angle';
|
|
41
35
|
parentNode.meta.dot = true;
|
|
42
36
|
ret = preferred.slice(0, -dotBracketEnd[0].length);
|
|
43
37
|
} else {
|
|
44
38
|
const bracketEnd = preferred.endsWith('<>');
|
|
45
|
-
|
|
46
39
|
if (bracketEnd) {
|
|
47
40
|
parentNode.meta.brackets = 'angle';
|
|
48
41
|
parentNode.meta.dot = false;
|
|
@@ -56,14 +49,13 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent
|
|
|
56
49
|
} else if (type === 'JsdocTypeAny') {
|
|
57
50
|
node.type = 'JsdocTypeName';
|
|
58
51
|
}
|
|
52
|
+
node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, '');
|
|
59
53
|
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
// For bare pseudo-types like `<>`
|
|
62
55
|
if (!ret) {
|
|
63
56
|
node.value = typeNodeName;
|
|
64
57
|
}
|
|
65
58
|
};
|
|
66
|
-
|
|
67
59
|
var _default = (0, _iterateJsdoc.default)(({
|
|
68
60
|
jsdocNode,
|
|
69
61
|
sourceCode,
|
|
@@ -81,7 +73,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
81
73
|
mode
|
|
82
74
|
} = settings;
|
|
83
75
|
const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal);
|
|
84
|
-
const preferredTypes = {
|
|
76
|
+
const preferredTypes = {
|
|
77
|
+
...(injectObjectPreferredTypes ? {
|
|
85
78
|
Object: 'object',
|
|
86
79
|
'object.<>': 'Object<>',
|
|
87
80
|
'Object.<>': 'Object<>',
|
|
@@ -94,6 +87,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
94
87
|
unifyParentAndChildTypeChecks,
|
|
95
88
|
exemptTagContexts = []
|
|
96
89
|
} = context.options[0] || {};
|
|
90
|
+
|
|
97
91
|
/**
|
|
98
92
|
* Gets information about the preferred type: whether there is a matching
|
|
99
93
|
* preferred type, what the type is, and whether it is a match to a generic.
|
|
@@ -104,19 +98,15 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
104
98
|
* @param {string} property
|
|
105
99
|
* @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
|
|
106
100
|
*/
|
|
107
|
-
|
|
108
101
|
const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
|
|
109
102
|
let hasMatchingPreferredType = false;
|
|
110
103
|
let isGenericMatch = false;
|
|
111
104
|
let typeName = typeNodeName;
|
|
112
105
|
const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';
|
|
113
|
-
|
|
114
106
|
if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
|
|
115
107
|
var _parentNode$meta, _parentNode$meta2;
|
|
116
|
-
|
|
117
108
|
const brackets = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets;
|
|
118
109
|
const dot = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.dot;
|
|
119
|
-
|
|
120
110
|
if (brackets === 'angle') {
|
|
121
111
|
const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];
|
|
122
112
|
isGenericMatch = checkPostFixes.some(checkPostFix => {
|
|
@@ -124,11 +114,9 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
124
114
|
typeName += checkPostFix;
|
|
125
115
|
return true;
|
|
126
116
|
}
|
|
127
|
-
|
|
128
117
|
return false;
|
|
129
118
|
});
|
|
130
119
|
}
|
|
131
|
-
|
|
132
120
|
if (!isGenericMatch && property) {
|
|
133
121
|
const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];
|
|
134
122
|
isGenericMatch = checkPostFixes.some(checkPostFix => {
|
|
@@ -136,18 +124,17 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
136
124
|
typeName = checkPostFix;
|
|
137
125
|
return true;
|
|
138
126
|
}
|
|
139
|
-
|
|
140
127
|
return false;
|
|
141
128
|
});
|
|
142
129
|
}
|
|
143
130
|
}
|
|
144
|
-
|
|
145
131
|
const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
|
|
146
132
|
const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
|
|
147
133
|
isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;
|
|
148
134
|
hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
|
|
149
135
|
return [hasMatchingPreferredType, typeName, isGenericMatch];
|
|
150
136
|
};
|
|
137
|
+
|
|
151
138
|
/**
|
|
152
139
|
* Iterates strict types to see if any should be added to `invalidTypes` (and
|
|
153
140
|
* the the relevant strict type returned as the new preferred type).
|
|
@@ -158,34 +145,32 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
158
145
|
* @param {string[]} invalidTypes
|
|
159
146
|
* @returns {string} The `preferred` type string, optionally changed
|
|
160
147
|
*/
|
|
161
|
-
|
|
162
|
-
|
|
163
148
|
const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
|
|
164
149
|
let changedPreferred = preferred;
|
|
165
|
-
|
|
166
150
|
for (const strictNativeType of strictNativeTypes) {
|
|
167
151
|
var _parentNode$elements, _parentNode$left, _parentNode$left2;
|
|
168
|
-
|
|
169
|
-
|
|
152
|
+
if (strictNativeType === 'object' && (
|
|
153
|
+
// This is not set to remap with exact type match (e.g.,
|
|
170
154
|
// `object: 'Object'`), so can ignore (including if circular)
|
|
171
|
-
!(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) ||
|
|
155
|
+
!(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) ||
|
|
156
|
+
// Although present on `preferredTypes` for remapping, this is a
|
|
172
157
|
// parent object without a parent match (and not
|
|
173
158
|
// `unifyParentAndChildTypeChecks`) and we don't want
|
|
174
159
|
// `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
|
|
175
160
|
parentNode !== null && parentNode !== void 0 && (_parentNode$elements = parentNode.elements) !== null && _parentNode$elements !== 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')) {
|
|
176
161
|
continue;
|
|
177
162
|
}
|
|
178
|
-
|
|
179
|
-
|
|
163
|
+
if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && (
|
|
164
|
+
// Don't report if user has own map for a strict native type
|
|
180
165
|
!preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) {
|
|
181
166
|
changedPreferred = strictNativeType;
|
|
182
167
|
invalidTypes.push([typeNodeName, changedPreferred]);
|
|
183
168
|
break;
|
|
184
169
|
}
|
|
185
170
|
}
|
|
186
|
-
|
|
187
171
|
return changedPreferred;
|
|
188
172
|
};
|
|
173
|
+
|
|
189
174
|
/**
|
|
190
175
|
* Collect invalid type info.
|
|
191
176
|
*
|
|
@@ -198,18 +183,14 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
198
183
|
* @param {string[]} invalidTypes
|
|
199
184
|
* @returns {void}
|
|
200
185
|
*/
|
|
201
|
-
|
|
202
|
-
|
|
203
186
|
const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {
|
|
204
187
|
let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;
|
|
205
188
|
const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
|
|
206
189
|
let preferred;
|
|
207
190
|
let types;
|
|
208
|
-
|
|
209
191
|
if (hasMatchingPreferredType) {
|
|
210
192
|
const preferredSetting = preferredTypes[typeName];
|
|
211
193
|
typeNodeName = typeName === '[]' ? typeName : typeNodeName;
|
|
212
|
-
|
|
213
194
|
if (!preferredSetting) {
|
|
214
195
|
invalidTypes.push([typeNodeName]);
|
|
215
196
|
} else if (typeof preferredSetting === 'string') {
|
|
@@ -231,52 +212,44 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
231
212
|
invalidTypes.push([typeNodeName, types]);
|
|
232
213
|
} else if (!noDefaults && type === 'JsdocTypeName') {
|
|
233
214
|
preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);
|
|
234
|
-
}
|
|
235
|
-
|
|
215
|
+
}
|
|
236
216
|
|
|
217
|
+
// For fixer
|
|
237
218
|
if (preferred) {
|
|
238
219
|
adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
|
|
239
220
|
}
|
|
240
221
|
};
|
|
241
|
-
|
|
242
222
|
for (const jsdocTag of jsdocTagsWithPossibleType) {
|
|
243
223
|
const invalidTypes = [];
|
|
244
224
|
let typeAst;
|
|
245
|
-
|
|
246
225
|
try {
|
|
247
226
|
typeAst = mode === 'permissive' ? (0, _jsdoccomment.tryParse)(jsdocTag.type) : (0, _jsdoccomment.parse)(jsdocTag.type, mode);
|
|
248
227
|
} catch {
|
|
249
228
|
continue;
|
|
250
229
|
}
|
|
251
|
-
|
|
252
230
|
const tagName = jsdocTag.tag;
|
|
253
231
|
(0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
|
|
254
232
|
const {
|
|
255
233
|
type,
|
|
256
234
|
value
|
|
257
235
|
} = node;
|
|
258
|
-
|
|
259
236
|
if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {
|
|
260
237
|
return;
|
|
261
238
|
}
|
|
262
|
-
|
|
263
239
|
getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);
|
|
264
240
|
});
|
|
265
|
-
|
|
266
241
|
if (invalidTypes.length) {
|
|
267
242
|
const fixedType = (0, _jsdoccomment.stringify)(typeAst);
|
|
243
|
+
|
|
268
244
|
/**
|
|
269
245
|
* @param {any} fixer The ESLint fixer
|
|
270
246
|
* @returns {string}
|
|
271
247
|
*/
|
|
272
|
-
|
|
273
248
|
const fix = fixer => {
|
|
274
249
|
return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
|
|
275
250
|
};
|
|
276
|
-
|
|
277
251
|
for (const [badType, preferredType = '', message] of invalidTypes) {
|
|
278
252
|
const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : '';
|
|
279
|
-
|
|
280
253
|
if (exemptTagContexts.some(({
|
|
281
254
|
tag,
|
|
282
255
|
types
|
|
@@ -285,7 +258,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
285
258
|
})) {
|
|
286
259
|
continue;
|
|
287
260
|
}
|
|
288
|
-
|
|
289
261
|
report(message || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? '; ' : '.') + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), preferredType ? fix : null, jsdocTag, message ? {
|
|
290
262
|
tagName,
|
|
291
263
|
tagValue
|
|
@@ -338,7 +310,6 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
338
310
|
type: 'suggestion'
|
|
339
311
|
}
|
|
340
312
|
});
|
|
341
|
-
|
|
342
313
|
exports.default = _default;
|
|
343
314
|
module.exports = exports.default;
|
|
344
315
|
//# sourceMappingURL=checkTypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTypes.js","names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","iterateJsdoc","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","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"sources":["../../src/rules/checkTypes.js"],"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"],"mappings":";;;;;;;AAAA;;AAMA;;;;AAEA,MAAMA,iBAAiB,GAAG,CACxB,WADwB,EAExB,MAFwB,EAGxB,SAHwB,EAIxB,QAJwB,EAKxB,QALwB,EAMxB,QANwB,EAOxB,QAPwB,EAQxB,QARwB,EASxB,OATwB,EAUxB,UAVwB,EAWxB,MAXwB,EAYxB,QAZwB,CAA1B;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,WAAW,GAAG,CAACC,IAAD,EAAOC,SAAP,EAAkBC,cAAlB,EAAkCC,YAAlC,EAAgDC,IAAhD,EAAsDC,UAAtD,KAAqE;EACvF,IAAIC,GAAG,GAAGL,SAAV;;EACA,IAAIC,cAAJ,EAAoB;IAClB,IAAID,SAAS,KAAK,IAAlB,EAAwB;MACtBI,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,QAA3B;MACAH,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,KAAtB;MACAH,GAAG,GAAG,OAAN;IACD,CAJD,MAIO;MACL,MAAMI,aAAa,GAAGT,SAAS,CAACU,KAAV,CAAgB,aAAhB,CAAtB;;MACA,IAAID,aAAJ,EAAmB;QACjBL,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,OAA3B;QACAH,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,IAAtB;QACAH,GAAG,GAAGL,SAAS,CAACW,KAAV,CAAgB,CAAhB,EAAmB,CAACF,aAAa,CAAC,CAAD,CAAb,CAAiBG,MAArC,CAAN;MACD,CAJD,MAIO;QACL,MAAMC,UAAU,GAAGb,SAAS,CAACc,QAAV,CAAmB,IAAnB,CAAnB;;QACA,IAAID,UAAJ,EAAgB;UACdT,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,OAA3B;UACAH,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,KAAtB;UACAH,GAAG,GAAGL,SAAS,CAACW,KAAV,CAAgB,CAAhB,EAAmB,CAAC,CAApB,CAAN;QACD,CAJD,MAIO,IACLP,UAAU,CAACE,IAAX,CAAgBC,QAAhB,KAA6B,QAA7B,KACCL,YAAY,KAAK,IAAjB,IAAyBA,YAAY,KAAK,OAD3C,CADK,EAGL;UACAE,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,OAA3B;UACAH,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,KAAtB;QACD;MACF;IACF;EACF,CA1BD,MA0BO,IAAIT,IAAI,KAAK,cAAb,EAA6B;IAClCI,IAAI,CAACJ,IAAL,GAAY,eAAZ;EACD;;EAEDI,IAAI,CAACY,KAAL,GAAaV,GAAG,CAACW,OAAJ,CAAY,uBAAZ,EAAqC,EAArC,CAAb,CAhCuF,CAkCvF;;EACA,IAAI,CAACX,GAAL,EAAU;IACRF,IAAI,CAACY,KAAL,GAAab,YAAb;EACD;AACF,CAtCD;;eAwCe,IAAAe,qBAAA,EAAa,CAAC;EAC3BC,SAD2B;EAE3BC,UAF2B;EAG3BC,MAH2B;EAI3BC,KAJ2B;EAK3BC,QAL2B;EAM3BC;AAN2B,CAAD,KAOtB;EACJ,MAAMC,yBAAyB,GAAGH,KAAK,CAACI,UAAN,CAAkBC,GAAD,IAAS;IAC1D,OAAOL,KAAK,CAACM,wBAAN,CAA+BD,GAAG,CAACA,GAAnC,CAAP;EACD,CAFiC,CAAlC;EAIA,MAAM;IACJE,cAAc,EAAEC,sBADZ;IAEJC,cAFI;IAGJC;EAHI,IAIFT,QAJJ;EAMA,MAAMU,0BAA0B,GAAG,EAAE,YAAYH,sBAAZ,IACnC,YAAYA,sBADuB,IAEnC,eAAeA,sBAFoB,IAGnC,eAAeA,sBAHoB,IAInC,cAAcA,sBAJmB,CAAnC;EAMA,MAAMD,cAAc,GAAG,EACrB,IAAGI,0BAA0B,GAAG;MAC9BC,MAAM,EAAE,QADsB;MAE9B,aAAa,UAFiB;MAG9B,aAAa,UAHiB;MAI9B,YAAY;IAJkB,CAAH,GAKzB,EALJ,CADqB;IAOrB,GAAGJ;EAPkB,CAAvB;EAUA,MAAM;IACJK,UADI;IAEJC,6BAFI;IAGJC,iBAAiB,GAAG;EAHhB,IAIFb,OAAO,CAACc,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;EAMA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EACE,MAAMC,oBAAoB,GAAG,CAACC,KAAD,EAAQrC,YAAR,EAAsBE,UAAtB,EAAkCoC,QAAlC,KAA+C;IAC1E,IAAIC,wBAAwB,GAAG,KAA/B;IACA,IAAIxC,cAAc,GAAG,KAArB;IACA,IAAIyC,QAAQ,GAAGxC,YAAf;IAEA,MAAMyC,eAAe,GAAGvC,UAAU,KAAKwC,SAAf,IAA4BxC,UAAU,CAACL,IAAX,KAAoB,kBAAhD,IAAsEyC,QAAQ,KAAK,MAA3G;;IACA,IAAIL,6BAA6B,IAAIQ,eAArC,EAAsD;MAAA;;MACpD,MAAMpC,QAAQ,GAAGH,UAAH,aAAGA,UAAH,2CAAGA,UAAU,CAAEE,IAAf,qDAAG,iBAAkBC,QAAnC;MACA,MAAMC,GAAG,GAAGJ,UAAH,aAAGA,UAAH,4CAAGA,UAAU,CAAEE,IAAf,sDAAG,kBAAkBE,GAA9B;;MAEA,IAAID,QAAQ,KAAK,OAAjB,EAA0B;QACxB,MAAMsC,cAAc,GAAGrC,GAAG,GAAG,CAC3B,GAD2B,EACtB,KADsB,CAAH,GAEtB,CACF,IADE,CAFJ;QAKAP,cAAc,GAAG4C,cAAc,CAACC,IAAf,CAAqBC,YAAD,IAAkB;UACrD,IAAI,CAAAnB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAG1B,YAAY,GAAG6C,YAAlB,CAAd,MAAkDH,SAAtD,EAAiE;YAC/DF,QAAQ,IAAIK,YAAZ;YAEA,OAAO,IAAP;UACD;;UAED,OAAO,KAAP;QACD,CARgB,CAAjB;MASD;;MAED,IAAI,CAAC9C,cAAD,IAAmBuC,QAAvB,EAAiC;QAC/B,MAAMK,cAAc,GAAGrC,GAAG,GAAG,CAC3B,GAD2B,EACtB,KADsB,CAAH,GAEtB,CACFD,QAAQ,KAAK,OAAb,GAAuB,IAAvB,GAA8B,IAD5B,CAFJ;QAMAN,cAAc,GAAG4C,cAAc,CAACC,IAAf,CAAqBC,YAAD,IAAkB;UACrD,IAAI,CAAAnB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGmB,YAAH,CAAd,MAAmCH,SAAvC,EAAkD;YAChDF,QAAQ,GAAGK,YAAX;YAEA,OAAO,IAAP;UACD;;UAED,OAAO,KAAP;QACD,CARgB,CAAjB;MASD;IACF;;IAED,MAAMC,eAAe,GAAG,CAAApB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAG1B,YAAH,CAAd,MAAmC0C,SAAnC,IACtB,CAACX,MAAM,CAACgB,MAAP,CAAcrB,cAAd,EAA8BsB,QAA9B,CAAuChD,YAAvC,CADH;IAEA,MAAMiD,wBAAwB,GAAGX,QAAQ,IAAIQ,eAAZ,IAA+Bb,6BAAhE;IACAlC,cAAc,GAAGA,cAAc,IAAIkD,wBAAnC;IAEAV,wBAAwB,GAAGxC,cAAc,IACvC+C,eAAe,IAAI,CAACR,QADtB;IAGA,OAAO,CACLC,wBADK,EACqBC,QADrB,EAC+BzC,cAD/B,CAAP;EAGD,CAzDD;EA2DA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;EACE,MAAMmD,gBAAgB,GAAG,CAAClD,YAAD,EAAeF,SAAf,EAA0BI,UAA1B,EAAsCiD,YAAtC,KAAuD;IAC9E,IAAIC,gBAAgB,GAAGtD,SAAvB;;IACA,KAAK,MAAMuD,gBAAX,IAA+B1D,iBAA/B,EAAkD;MAAA;;MAChD,IACE0D,gBAAgB,KAAK,QAArB,MAEE;MACA;MACA,EAAC3B,cAAD,aAACA,cAAD,eAACA,cAAc,CAAG1B,YAAH,CAAf,KACA;MACA;MACA;MACA;MACAE,UAAU,SAAV,IAAAA,UAAU,WAAV,4BAAAA,UAAU,CAAEoD,QAAZ,sEAAsB5C,MAAtB,IACE,CAAAR,UAAU,SAAV,IAAAA,UAAU,WAAV,gCAAAA,UAAU,CAAEqD,IAAZ,sEAAkB1D,IAAlB,MAA2B,eAA3B,IACA,CAAAK,UAAU,SAAV,IAAAA,UAAU,WAAV,iCAAAA,UAAU,CAAEqD,IAAZ,wEAAkB1C,KAAlB,MAA4B,QAXhC,CADF,EAeE;QACA;MACD;;MAED,IAAIwC,gBAAgB,KAAKrD,YAArB,IACFqD,gBAAgB,CAACG,WAAjB,OAAmCxD,YAAY,CAACwD,WAAb,EADjC,MAGF;MACC,CAAC9B,cAAD,IAAmB,CAAAA,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAG2B,gBAAH,CAAd,MAAuCX,SAJzD,CAAJ,EAKE;QACAU,gBAAgB,GAAGC,gBAAnB;QACAF,YAAY,CAACM,IAAb,CAAkB,CAChBzD,YADgB,EACFoD,gBADE,CAAlB;QAGA;MACD;IACF;;IAED,OAAOA,gBAAP;EACD,CArCD;EAuCA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;EACE,MAAMM,eAAe,GAAG,CAAC7D,IAAD,EAAOgB,KAAP,EAAc8C,OAAd,EAAuBrB,QAAvB,EAAiCrC,IAAjC,EAAuCC,UAAvC,EAAmDiD,YAAnD,KAAoE;IAC1F,IAAInD,YAAY,GAAGH,IAAI,KAAK,cAAT,GAA0B,GAA1B,GAAgCgB,KAAnD;IAEA,MAAM,CACJ0B,wBADI,EAEJC,QAFI,EAGJzC,cAHI,IAIFqC,oBAAoB,CAACvC,IAAD,EAAOG,YAAP,EAAqBE,UAArB,EAAiCoC,QAAjC,CAJxB;IAMA,IAAIxC,SAAJ;IACA,IAAI8D,KAAJ;;IACA,IAAIrB,wBAAJ,EAA8B;MAC5B,MAAMsB,gBAAgB,GAAGnC,cAAc,CAACc,QAAD,CAAvC;MACAxC,YAAY,GAAGwC,QAAQ,KAAK,IAAb,GAAoBA,QAApB,GAA+BxC,YAA9C;;MAEA,IAAI,CAAC6D,gBAAL,EAAuB;QACrBV,YAAY,CAACM,IAAb,CAAkB,CAChBzD,YADgB,CAAlB;MAGD,CAJD,MAIO,IAAI,OAAO6D,gBAAP,KAA4B,QAAhC,EAA0C;QAC/C/D,SAAS,GAAG+D,gBAAZ;QACAV,YAAY,CAACM,IAAb,CAAkB,CAChBzD,YADgB,EACFF,SADE,CAAlB;MAGD,CALM,MAKA,IAAI,OAAO+D,gBAAP,KAA4B,QAAhC,EAA0C;QAC/C/D,SAAS,GAAG+D,gBAAH,aAAGA,gBAAH,uBAAGA,gBAAgB,CAAEC,WAA9B;QACAX,YAAY,CAACM,IAAb,CAAkB,CAChBzD,YADgB,EAEhBF,SAFgB,EAGhB+D,gBAHgB,aAGhBA,gBAHgB,uBAGhBA,gBAAgB,CAAEE,OAHF,CAAlB;MAKD,CAPM,MAOA;QACL5C,KAAK,CAAC6C,cAAN,CACE,wFADF;QAIA;MACD;IACF,CA3BD,MA2BO,IAAIjC,MAAM,CAACkC,OAAP,CAAerC,cAAf,EAA+BgB,IAA/B,CAAoC,CAAC,CAC9CpB,GAD8C,EAE9C;MACE3B,IAAI,EAAEqE;IADR,CAF8C,CAAD,KAKzC;MACJN,KAAK,GAAGM,IAAR;MAEA,OAAO1C,GAAG,KAAKmC,OAAR,IACLQ,KAAK,CAACC,OAAN,CAAcR,KAAd,CADK,IAEL,CAACA,KAAK,CAACZ,QAAN,CAAehD,YAAf,CAFH;IAGD,CAXU,CAAJ,EAWH;MACFmD,YAAY,CAACM,IAAb,CAAkB,CAChBzD,YADgB,EACF4D,KADE,CAAlB;IAGD,CAfM,MAeA,IAAI,CAAC5B,UAAD,IAAenC,IAAI,KAAK,eAA5B,EAA6C;MAClDC,SAAS,GAAGoD,gBAAgB,CAAClD,YAAD,EAAeF,SAAf,EAA0BI,UAA1B,EAAsCiD,YAAtC,CAA5B;IACD,CAvDyF,CAyD1F;;;IACA,IAAIrD,SAAJ,EAAe;MACbF,WAAW,CAACC,IAAD,EAAOC,SAAP,EAAkBC,cAAlB,EAAkCC,YAAlC,EAAgDC,IAAhD,EAAsDC,UAAtD,CAAX;IACD;EACF,CA7DD;;EA+DA,KAAK,MAAMmE,QAAX,IAAuB/C,yBAAvB,EAAkD;IAChD,MAAM6B,YAAY,GAAG,EAArB;IACA,IAAImB,OAAJ;;IAEA,IAAI;MACFA,OAAO,GAAGzC,IAAI,KAAK,YAAT,GAAwB,IAAA0C,sBAAA,EAASF,QAAQ,CAACxE,IAAlB,CAAxB,GAAkD,IAAA2E,mBAAA,EAAMH,QAAQ,CAACxE,IAAf,EAAqBgC,IAArB,CAA5D;IACD,CAFD,CAEE,MAAM;MACN;IACD;;IAED,MAAM8B,OAAO,GAAGU,QAAQ,CAAC7C,GAAzB;IAEA,IAAAiD,sBAAA,EAASH,OAAT,EAAkB,CAACrE,IAAD,EAAOC,UAAP,EAAmBoC,QAAnB,KAAgC;MAChD,MAAM;QACJzC,IADI;QAEJgB;MAFI,IAGFZ,IAHJ;;MAIA,IAAI,CAAC,CACH,eADG,EACc,cADd,EAEH+C,QAFG,CAEMnD,IAFN,CAAL,EAEkB;QAChB;MACD;;MAED6D,eAAe,CAAC7D,IAAD,EAAOgB,KAAP,EAAc8C,OAAd,EAAuBrB,QAAvB,EAAiCrC,IAAjC,EAAuCC,UAAvC,EAAmDiD,YAAnD,CAAf;IACD,CAZD;;IAcA,IAAIA,YAAY,CAACzC,MAAjB,EAAyB;MACvB,MAAMgE,SAAS,GAAG,IAAAC,uBAAA,EAAUL,OAAV,CAAlB;MAEA;AACN;AACA;AACA;;MACM,MAAMM,GAAG,GAAIC,KAAD,IAAW;QACrB,OAAOA,KAAK,CAACC,WAAN,CACL9D,SADK,EAELC,UAAU,CAAC8D,OAAX,CAAmB/D,SAAnB,EAA8BF,OAA9B,CACG,IAAGuD,QAAQ,CAACxE,IAAK,GADpB,EAEG,IAAG6E,SAAU,GAFhB,CAFK,CAAP;MAOD,CARD;;MAUA,KAAK,MAAM,CACTM,OADS,EAETC,aAAa,GAAG,EAFP,EAGTlB,OAHS,CAAX,IAIKZ,YAJL,EAImB;QACjB,MAAM+B,QAAQ,GAAGb,QAAQ,CAACc,IAAT,GAAiB,KAAId,QAAQ,CAACc,IAAK,GAAnC,GAAwC,EAAzD;;QACA,IAAIjD,iBAAiB,CAACU,IAAlB,CAAuB,CAAC;UAC1BpB,GAD0B;UAE1BoC;QAF0B,CAAD,KAGrB;UACJ,OAAOpC,GAAG,KAAKmC,OAAR,KACJC,KAAK,KAAK,IAAV,IAAkBA,KAAK,CAACZ,QAAN,CAAeqB,QAAQ,CAACxE,IAAxB,CADd,CAAP;QAED,CANG,CAAJ,EAMI;UACF;QACD;;QAEDqB,MAAM,CACJ6C,OAAO,IACJ,kBAAiBJ,OAAQ,GAAEuB,QAAS,UAASF,OAAQ,GAAtD,IACCC,aAAa,GAAG,IAAH,GAAU,GADxB,KAECA,aAAa,GAAI,WAAUG,IAAI,CAACT,SAAL,CAAeM,aAAf,CAA8B,GAA5C,GAAiD,EAF/D,CAFE,EAKJA,aAAa,GAAGL,GAAH,GAAS,IALlB,EAMJP,QANI,EAOJN,OAAO,GAAG;UACRJ,OADQ;UAERuB;QAFQ,CAAH,GAGH,IAVA,CAAN;MAYD;IACF;EACF;AACF,CAnTc,EAmTZ;EACDG,gBAAgB,EAAE,IADjB;EAEDjF,IAAI,EAAE;IACJkF,IAAI,EAAE;MACJC,WAAW,EAAE,wBADT;MAEJC,GAAG,EAAE;IAFD,CADF;IAKJC,OAAO,EAAE,MALL;IAMJC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KADxB;MAEEC,UAAU,EAAE;QACV1D,iBAAiB,EAAE;UACjB2D,KAAK,EAAE;YACLF,oBAAoB,EAAE,KADjB;YAELC,UAAU,EAAE;cACVpE,GAAG,EAAE;gBACH3B,IAAI,EAAE;cADH,CADK;cAIV+D,KAAK,EAAE;gBACLkC,KAAK,EAAE,CACL;kBACEjG,IAAI,EAAE;gBADR,CADK,EAIL;kBACEgG,KAAK,EAAE;oBACLhG,IAAI,EAAE;kBADD,CADT;kBAIEA,IAAI,EAAE;gBAJR,CAJK;cADF;YAJG,CAFP;YAoBLA,IAAI,EAAE;UApBD,CADU;UAuBjBA,IAAI,EAAE;QAvBW,CADT;QA0BVmC,UAAU,EAAE;UACVnC,IAAI,EAAE;QADI,CA1BF;QA6BVoC,6BAA6B,EAAE;UAC7BpC,IAAI,EAAE;QADuB;MA7BrB,CAFd;MAmCEA,IAAI,EAAE;IAnCR,CADM,CANJ;IA6CJA,IAAI,EAAE;EA7CF;AAFL,CAnTY,C"}
|
|
1
|
+
{"version":3,"file":"checkTypes.js","names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","iterateJsdoc","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","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"sources":["../../src/rules/checkTypes.js"],"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"],"mappings":"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"}
|