eslint-plugin-jsdoc 28.4.0 → 28.6.1
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 +102 -7
- package/dist/iterateJsdoc.js +1 -1
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +10 -5
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/requireJsdoc.js +10 -3
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/validTypes.js +33 -3
- package/dist/rules/validTypes.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -188,7 +188,9 @@ how many line breaks to add when a block is missing.
|
|
|
188
188
|
<a name="eslint-plugin-jsdoc-settings-mode"></a>
|
|
189
189
|
### Mode
|
|
190
190
|
|
|
191
|
-
- `settings.jsdoc.mode` - Set to `
|
|
191
|
+
- `settings.jsdoc.mode` - Set to `typescript`, `closure`, or `jsdoc` (the
|
|
192
|
+
default unless the `@typescript-eslint` parser is in use in which case
|
|
193
|
+
`typescript` will be the default).
|
|
192
194
|
Note that if you do not wish to use separate `.eslintrc.*` files for a project
|
|
193
195
|
containing both JavaScript and TypeScript, you can also use [`overrides`](https://eslint.org/docs/user-guide/configuring). You may also set to `"permissive"` to
|
|
194
196
|
try to be as accommodating to any of the styles, but this is not recommended.
|
|
@@ -197,11 +199,17 @@ how many line breaks to add when a block is missing.
|
|
|
197
199
|
- `no-undefined-types`: Only check `@template` for types in "closure" and
|
|
198
200
|
"typescript" modes
|
|
199
201
|
- `check-syntax`: determines aspects that may be enforced
|
|
202
|
+
- `valid-types`: in non-Closure mode, `@extends`, `@package` and access tags
|
|
203
|
+
(e.g., `@private`) with a bracketed type are reported as are missing
|
|
204
|
+
names with `@typedef`
|
|
200
205
|
- For type/namepath-checking rules, determine which tags will be checked for
|
|
201
206
|
types/namepaths (Closure allows types on some tags which the others do not,
|
|
202
207
|
so these tags will additionally be checked in "closure" mode)
|
|
203
208
|
- For type-checking rules, impacts parsing of types (through
|
|
204
|
-
[jsdoctypeparser](https://github.com/jsdoctypeparser/jsdoctypeparser)
|
|
209
|
+
[jsdoctypeparser](https://github.com/jsdoctypeparser/jsdoctypeparser)
|
|
210
|
+
dependency); note that some TypeScript features are
|
|
211
|
+
[not yet](https://github.com/gajus/eslint-plugin-jsdoc/issues/145)
|
|
212
|
+
[supported](https://github.com/jsdoctypeparser/jsdoctypeparser/issues/50)
|
|
205
213
|
- Check preferred tag names
|
|
206
214
|
- Disallows namepath on `@interface` for "closure" mode in `valid-types` (and
|
|
207
215
|
avoids checking in other rules)
|
|
@@ -7371,6 +7379,14 @@ interface quux {
|
|
|
7371
7379
|
}
|
|
7372
7380
|
// Options: [{"descriptionStyle":"tag"}]
|
|
7373
7381
|
|
|
7382
|
+
interface quux {
|
|
7383
|
+
/**
|
|
7384
|
+
* If the thing should be checked.
|
|
7385
|
+
*/
|
|
7386
|
+
checked?: boolean
|
|
7387
|
+
}
|
|
7388
|
+
// Options: [{"contexts":["TSPropertySignature"]}]
|
|
7389
|
+
|
|
7374
7390
|
/**
|
|
7375
7391
|
*
|
|
7376
7392
|
*/
|
|
@@ -8351,6 +8367,12 @@ function myFunction() {
|
|
|
8351
8367
|
// Settings: {"jsdoc":{"minLines":1}}
|
|
8352
8368
|
// Message: Missing JSDoc comment.
|
|
8353
8369
|
|
|
8370
|
+
function myFunction() {
|
|
8371
|
+
|
|
8372
|
+
}
|
|
8373
|
+
// Options: [{"enableFixer":false}]
|
|
8374
|
+
// Message: Missing JSDoc comment.
|
|
8375
|
+
|
|
8354
8376
|
export var test = function () {
|
|
8355
8377
|
|
|
8356
8378
|
};
|
|
@@ -13188,6 +13210,18 @@ function quux () {
|
|
|
13188
13210
|
}
|
|
13189
13211
|
// Settings: {"jsdoc":{"tagNamePreference":{"throws":false}}}
|
|
13190
13212
|
// Message: Unexpected tag `@throws`
|
|
13213
|
+
|
|
13214
|
+
/**
|
|
13215
|
+
*
|
|
13216
|
+
*/
|
|
13217
|
+
const directThrowAfterArrow = (b) => {
|
|
13218
|
+
const a = () => {};
|
|
13219
|
+
if (b) {
|
|
13220
|
+
throw new Error('oops')
|
|
13221
|
+
}
|
|
13222
|
+
return a;
|
|
13223
|
+
};
|
|
13224
|
+
// Message: Missing JSDoc @throws declaration.
|
|
13191
13225
|
````
|
|
13192
13226
|
|
|
13193
13227
|
The following patterns are not considered problems:
|
|
@@ -13236,6 +13270,16 @@ function quux () {
|
|
|
13236
13270
|
throw new Error('err')
|
|
13237
13271
|
}
|
|
13238
13272
|
// Options: [{"exemptedBy":["type"]}]
|
|
13273
|
+
|
|
13274
|
+
/**
|
|
13275
|
+
*
|
|
13276
|
+
*/
|
|
13277
|
+
const itself = (n) => n;
|
|
13278
|
+
|
|
13279
|
+
/**
|
|
13280
|
+
* Not tracking on nested function
|
|
13281
|
+
*/
|
|
13282
|
+
const nested = () => () => {throw new Error('oops');};
|
|
13239
13283
|
````
|
|
13240
13284
|
|
|
13241
13285
|
|
|
@@ -13489,6 +13533,20 @@ function foo(bar) {}
|
|
|
13489
13533
|
*/
|
|
13490
13534
|
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
13491
13535
|
// Message: @interface should not have a name in "closure" mode.
|
|
13536
|
+
|
|
13537
|
+
/**
|
|
13538
|
+
* @typedef {SomeType}
|
|
13539
|
+
*/
|
|
13540
|
+
function quux () {}
|
|
13541
|
+
// Settings: {"jsdoc":{"mode":"jsdoc"}}
|
|
13542
|
+
// Message: @typedef must have a name in "jsdoc" mode.
|
|
13543
|
+
|
|
13544
|
+
/**
|
|
13545
|
+
* @private {SomeType}
|
|
13546
|
+
*/
|
|
13547
|
+
function quux () {}
|
|
13548
|
+
// Settings: {"jsdoc":{"mode":"jsdoc"}}
|
|
13549
|
+
// Message: @private should not have a bracketed type in "jsdoc" mode.
|
|
13492
13550
|
````
|
|
13493
13551
|
|
|
13494
13552
|
The following patterns are not considered problems:
|
|
@@ -13617,10 +13675,16 @@ function quux() {
|
|
|
13617
13675
|
*/
|
|
13618
13676
|
class Bar {};
|
|
13619
13677
|
|
|
13678
|
+
/**
|
|
13679
|
+
* @extends Foo<String>
|
|
13680
|
+
*/
|
|
13681
|
+
class Bar {};
|
|
13682
|
+
|
|
13620
13683
|
/**
|
|
13621
13684
|
* @extends {Foo<String>}
|
|
13622
13685
|
*/
|
|
13623
13686
|
class Bar {};
|
|
13687
|
+
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
13624
13688
|
|
|
13625
13689
|
/**
|
|
13626
13690
|
* @typedef {number|string} UserDefinedType
|
|
@@ -13630,17 +13694,13 @@ function quux() {
|
|
|
13630
13694
|
* @typedef {number|string}
|
|
13631
13695
|
*/
|
|
13632
13696
|
let UserDefinedGCCType;
|
|
13697
|
+
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
13633
13698
|
|
|
13634
13699
|
/**
|
|
13635
13700
|
* @modifies {foo|bar}
|
|
13636
13701
|
*/
|
|
13637
13702
|
function quux (foo, bar, baz) {}
|
|
13638
13703
|
|
|
13639
|
-
/**
|
|
13640
|
-
* @private {BadTypeNotCheckedInJsdoc<}
|
|
13641
|
-
*/
|
|
13642
|
-
function quux () {}
|
|
13643
|
-
|
|
13644
13704
|
/**
|
|
13645
13705
|
* @this {Navigator}
|
|
13646
13706
|
*/
|
|
@@ -13664,6 +13724,14 @@ function quux () {}
|
|
|
13664
13724
|
*/
|
|
13665
13725
|
function quux () {}
|
|
13666
13726
|
|
|
13727
|
+
/**
|
|
13728
|
+
* Foo function.
|
|
13729
|
+
*
|
|
13730
|
+
* @interface foo
|
|
13731
|
+
*/
|
|
13732
|
+
function foo(bar) {}
|
|
13733
|
+
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
13734
|
+
|
|
13667
13735
|
/**
|
|
13668
13736
|
* Foo function.
|
|
13669
13737
|
*
|
|
@@ -13672,6 +13740,13 @@ function quux () {}
|
|
|
13672
13740
|
function foo(bar) {}
|
|
13673
13741
|
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
13674
13742
|
|
|
13743
|
+
/**
|
|
13744
|
+
* Foo function.
|
|
13745
|
+
*
|
|
13746
|
+
* @param {[number, string]} bar - The bar array.
|
|
13747
|
+
*/
|
|
13748
|
+
function foo(bar) {}
|
|
13749
|
+
|
|
13675
13750
|
/**
|
|
13676
13751
|
* Foo function.
|
|
13677
13752
|
*
|
|
@@ -13679,6 +13754,26 @@ function foo(bar) {}
|
|
|
13679
13754
|
*/
|
|
13680
13755
|
function foo(bar) {}
|
|
13681
13756
|
// Settings: {"jsdoc":{"mode":"permissive"}}
|
|
13757
|
+
|
|
13758
|
+
/**
|
|
13759
|
+
* @typedef {SomeType}
|
|
13760
|
+
*/
|
|
13761
|
+
function quux () {}
|
|
13762
|
+
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
13763
|
+
|
|
13764
|
+
/**
|
|
13765
|
+
* @private {SomeType}
|
|
13766
|
+
*/
|
|
13767
|
+
function quux () {}
|
|
13768
|
+
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
13769
|
+
|
|
13770
|
+
/**
|
|
13771
|
+
* @param
|
|
13772
|
+
*/
|
|
13773
|
+
function quux() {
|
|
13774
|
+
|
|
13775
|
+
}
|
|
13776
|
+
// Options: [{"allowEmptyNamepaths":false}]
|
|
13682
13777
|
````
|
|
13683
13778
|
|
|
13684
13779
|
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -420,7 +420,7 @@ const getSettings = context => {
|
|
|
420
420
|
implementsReplacesDocs: (_context$settings$jsd11 = context.settings.jsdoc) === null || _context$settings$jsd11 === void 0 ? void 0 : _context$settings$jsd11.implementsReplacesDocs,
|
|
421
421
|
augmentsExtendsReplacesDocs: (_context$settings$jsd12 = context.settings.jsdoc) === null || _context$settings$jsd12 === void 0 ? void 0 : _context$settings$jsd12.augmentsExtendsReplacesDocs,
|
|
422
422
|
// Many rules, e.g., `check-tag-names`
|
|
423
|
-
mode: (_context$settings$jsd13 = (_context$settings$jsd14 = context.settings.jsdoc) === null || _context$settings$jsd14 === void 0 ? void 0 : _context$settings$jsd14.mode) !== null && _context$settings$jsd13 !== void 0 ? _context$settings$jsd13 : 'jsdoc'
|
|
423
|
+
mode: (_context$settings$jsd13 = (_context$settings$jsd14 = context.settings.jsdoc) === null || _context$settings$jsd14 === void 0 ? void 0 : _context$settings$jsd14.mode) !== null && _context$settings$jsd13 !== void 0 ? _context$settings$jsd13 : context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'
|
|
424
424
|
};
|
|
425
425
|
/* eslint-enable sort-keys-fix/sort-keys-fix */
|
|
426
426
|
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["globalState","Map","skipSeeLink","parser","str","data","tag","test","parseComment","commentNode","indent","trim","value","parsers","commentParser","PARSERS","parse_tag","includes","parse_type","parse_name","errors","length","result","match","description","undefined","source","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","getPreferredTagNameObject","tagName","ret","jsdocUtils","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","type","isVirtualFunction","hasATag","stringify","tagBlock","getIndent","text","getText","noTrim","lastTag","tags","replace","slice","reportJSDoc","msg","handler","fixer","replaceText","flattenRoots","params","getFunctionParameterNames","isConstructor","kind","parent","isGetter","isSetter","getJsdocTagsDeep","name","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","hasSchemaOption","prop","schemaProperties","meta","schema","properties","options","default","avoidDocs","classHasTag","exemptedBy","getPresentTags","tagMustHaveEitherTypeOrNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveNamePosition","tagMightHaveNamePosition","tagMustHaveTypePosition","tagMightHaveTypePosition","isNamepathDefiningTag","hasDefinedTypeReturnTag","hasReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","getClassJsdoc","classNode","classJsdocNode","repeat","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","_","forEach","matchingJsdocTag","getSettings","ignorePrivate","Number","preferredTypes","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterate","lines","iterator","state","sourceLine","charAt","checkPrivate","some","iterateAllJsdocs","trackedJsdocs","callIterator","jsdocNodes","lastCall","exit","create","reducedNode","comment","nonComment","push","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contexts","contextDefaults","enforcedContexts","checkJsdoc","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-named-default\nimport {default as commentParser, stringify as commentStringify} from 'comment-parser';\nimport _ from 'lodash';\nimport jsdocUtils from './jsdocUtils';\nimport {getJSDocComment, getReducedASTNode} from './eslint/getJSDocComment';\n\nconst globalState = new Map();\n\nconst skipSeeLink = (parser) => {\n return (str, data) => {\n if (data.tag === 'see' && (/\\{@link.+?\\}/u).test(str)) {\n return null;\n }\n\n return parser(str, data);\n };\n};\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @param {boolean} [trim=true]\n * @returns {object}\n */\nconst parseComment = (commentNode, indent, trim = true) => {\n // Preserve JSDoc block start/end indentation.\n return commentParser(`${indent}/*${commentNode.value}${indent}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n parsers: [\n commentParser.PARSERS.parse_tag,\n skipSeeLink(\n (str, data) => {\n if (['default', 'defaultvalue'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_type(str, data);\n },\n ),\n skipSeeLink(\n (str, data) => {\n if ([\n 'example', 'return', 'returns', 'throws', 'exception',\n 'access', 'version', 'since', 'license', 'author',\n 'default', 'defaultvalue',\n ].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n ),\n\n // parse_description\n (str, data) => {\n // Only expected throw in previous step is if bad name (i.e.,\n // missing end bracket on optional name), but `@example`\n // skips name parsing\n /* istanbul ignore next */\n if (data.errors && data.errors.length) {\n return null;\n }\n\n // Tweak original regex to capture only single optional space\n const result = str.match(/^ ?((.|\\s)+)?/u);\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n if (result) {\n return {\n data: {\n description: result[1] === undefined ? '' : result[1],\n },\n source: result[0],\n };\n }\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n return null;\n },\n ],\n trim,\n })[0] || {};\n};\n\nconst getBasicUtils = (context, {tagNamePreference, mode}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.getPreferredTagNameObject = ({tagName}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);\n };\n\n utils.stringify = (tagBlock, tag) => {\n const indent = tag ?\n jsdocUtils.getIndent({\n text: sourceCode.getText(\n tag,\n tag.loc.start.column,\n ),\n }) :\n jsdocUtils.getIndent(sourceCode);\n\n if (ruleConfig.noTrim) {\n const lastTag = tagBlock.tags[tagBlock.tags.length - 1];\n lastTag.description = lastTag.description.replace(/\\n$/, '');\n }\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, node);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n };\n\n utils.isGetter = () => {\n return node && node.parent.kind === 'get';\n };\n\n utils.isSetter = () => {\n return node && node.parent.kind === 'set';\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({tagName});\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n const hasSchemaOption = (prop) => {\n const schemaProperties = ruleConfig.meta.schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n // eslint-disable-next-line complexity\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (\n !hasSchemaOption('checkConstructors') &&\n (\n utils.isConstructor() ||\n utils.hasATag([\n 'class',\n 'constructor',\n ])) ||\n !hasSchemaOption('checkGetters') &&\n utils.isGetter() ||\n !hasSchemaOption('checkSetters') &&\n utils.isSetter()) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : ['inheritdoc'],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.tagMustHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveEitherTypeOrNamePosition(tagName);\n };\n\n utils.tagMightHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveEitherTypeOrNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveNamePosition(tagName);\n };\n\n utils.tagMightHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMustHaveTypePosition(mode, tagName);\n };\n\n utils.tagMightHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMightHaveTypePosition(mode, tagName);\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(mode, tagName);\n };\n\n utils.hasDefinedTypeReturnTag = (tag) => {\n return jsdocUtils.hasDefinedTypeReturnTag(tag);\n };\n\n utils.hasReturnValue = () => {\n return jsdocUtils.hasReturnValue(node);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {tags} = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [...ancestors, node].reverse().find((parent) => {\n return parent && ['ClassDeclaration', 'ClassExpression'].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indent = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indent);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags || [], {\n tag: targetTagName,\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'jsdoc',\n };\n /* eslint-enable sort-keys-fix/sort-keys-fix */\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber},\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\nconst iterate = (\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdoc = parseComment(jsdocNode, indent, !ruleConfig.noTrim);\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n );\n\n if (\n settings.ignorePrivate &&\n !ruleConfig.checkPrivate &&\n (utils.hasTag('private') || _.filter(jsdoc.tags, {\n tag: 'access',\n }).some(({description}) => {\n return description === 'private';\n }))\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n const trackedJsdocs = [];\n\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n jsdocNodes.forEach((jsdocNode) => {\n if (!(/^\\/\\*\\*\\s/).test(sourceCode.getText(jsdocNode))) {\n return;\n }\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n state, true,\n );\n });\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const comment = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(comment)) {\n return;\n }\n if (!comment) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(comment);\n callIterator(context, node, [comment], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.includes(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {lines} = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n let contexts;\n if (ruleConfig.contextDefaults) {\n contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n if (contexts.includes('any')) {\n return iterateAllJsdocs(iterator, ruleConfig).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n );\n };\n\n if (ruleConfig.contextDefaults) {\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc,\n };\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
|
|
1
|
+
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["globalState","Map","skipSeeLink","parser","str","data","tag","test","parseComment","commentNode","indent","trim","value","parsers","commentParser","PARSERS","parse_tag","includes","parse_type","parse_name","errors","length","result","match","description","undefined","source","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","getPreferredTagNameObject","tagName","ret","jsdocUtils","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","type","isVirtualFunction","hasATag","stringify","tagBlock","getIndent","text","getText","noTrim","lastTag","tags","replace","slice","reportJSDoc","msg","handler","fixer","replaceText","flattenRoots","params","getFunctionParameterNames","isConstructor","kind","parent","isGetter","isSetter","getJsdocTagsDeep","name","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","hasSchemaOption","prop","schemaProperties","meta","schema","properties","options","default","avoidDocs","classHasTag","exemptedBy","getPresentTags","tagMustHaveEitherTypeOrNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveNamePosition","tagMightHaveNamePosition","tagMustHaveTypePosition","tagMightHaveTypePosition","isNamepathDefiningTag","hasDefinedTypeReturnTag","hasReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","getClassJsdoc","classNode","classJsdocNode","repeat","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","_","forEach","matchingJsdocTag","getSettings","ignorePrivate","Number","preferredTypes","parserPath","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterate","lines","iterator","state","sourceLine","charAt","checkPrivate","some","iterateAllJsdocs","trackedJsdocs","callIterator","jsdocNodes","lastCall","exit","create","reducedNode","comment","nonComment","push","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contexts","contextDefaults","enforcedContexts","checkJsdoc","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-named-default\nimport {default as commentParser, stringify as commentStringify} from 'comment-parser';\nimport _ from 'lodash';\nimport jsdocUtils from './jsdocUtils';\nimport {getJSDocComment, getReducedASTNode} from './eslint/getJSDocComment';\n\nconst globalState = new Map();\n\nconst skipSeeLink = (parser) => {\n return (str, data) => {\n if (data.tag === 'see' && (/\\{@link.+?\\}/u).test(str)) {\n return null;\n }\n\n return parser(str, data);\n };\n};\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @param {boolean} [trim=true]\n * @returns {object}\n */\nconst parseComment = (commentNode, indent, trim = true) => {\n // Preserve JSDoc block start/end indentation.\n return commentParser(`${indent}/*${commentNode.value}${indent}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n parsers: [\n commentParser.PARSERS.parse_tag,\n skipSeeLink(\n (str, data) => {\n if (['default', 'defaultvalue'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_type(str, data);\n },\n ),\n skipSeeLink(\n (str, data) => {\n if ([\n 'example', 'return', 'returns', 'throws', 'exception',\n 'access', 'version', 'since', 'license', 'author',\n 'default', 'defaultvalue',\n ].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n ),\n\n // parse_description\n (str, data) => {\n // Only expected throw in previous step is if bad name (i.e.,\n // missing end bracket on optional name), but `@example`\n // skips name parsing\n /* istanbul ignore next */\n if (data.errors && data.errors.length) {\n return null;\n }\n\n // Tweak original regex to capture only single optional space\n const result = str.match(/^ ?((.|\\s)+)?/u);\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n if (result) {\n return {\n data: {\n description: result[1] === undefined ? '' : result[1],\n },\n source: result[0],\n };\n }\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n return null;\n },\n ],\n trim,\n })[0] || {};\n};\n\nconst getBasicUtils = (context, {tagNamePreference, mode}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.getPreferredTagNameObject = ({tagName}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);\n };\n\n utils.stringify = (tagBlock, tag) => {\n const indent = tag ?\n jsdocUtils.getIndent({\n text: sourceCode.getText(\n tag,\n tag.loc.start.column,\n ),\n }) :\n jsdocUtils.getIndent(sourceCode);\n\n if (ruleConfig.noTrim) {\n const lastTag = tagBlock.tags[tagBlock.tags.length - 1];\n lastTag.description = lastTag.description.replace(/\\n$/, '');\n }\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, node);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n };\n\n utils.isGetter = () => {\n return node && node.parent.kind === 'get';\n };\n\n utils.isSetter = () => {\n return node && node.parent.kind === 'set';\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({tagName});\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n const hasSchemaOption = (prop) => {\n const schemaProperties = ruleConfig.meta.schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n // eslint-disable-next-line complexity\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (\n !hasSchemaOption('checkConstructors') &&\n (\n utils.isConstructor() ||\n utils.hasATag([\n 'class',\n 'constructor',\n ])) ||\n !hasSchemaOption('checkGetters') &&\n utils.isGetter() ||\n !hasSchemaOption('checkSetters') &&\n utils.isSetter()) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : ['inheritdoc'],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.tagMustHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveEitherTypeOrNamePosition(tagName);\n };\n\n utils.tagMightHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveEitherTypeOrNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveNamePosition(tagName);\n };\n\n utils.tagMightHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMustHaveTypePosition(mode, tagName);\n };\n\n utils.tagMightHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMightHaveTypePosition(mode, tagName);\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(mode, tagName);\n };\n\n utils.hasDefinedTypeReturnTag = (tag) => {\n return jsdocUtils.hasDefinedTypeReturnTag(tag);\n };\n\n utils.hasReturnValue = () => {\n return jsdocUtils.hasReturnValue(node);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {tags} = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [...ancestors, node].reverse().find((parent) => {\n return parent && ['ClassDeclaration', 'ClassExpression'].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indent = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indent);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags || [], {\n tag: targetTagName,\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable sort-keys-fix/sort-keys-fix */\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber},\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\nconst iterate = (\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdoc = parseComment(jsdocNode, indent, !ruleConfig.noTrim);\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n );\n\n if (\n settings.ignorePrivate &&\n !ruleConfig.checkPrivate &&\n (utils.hasTag('private') || _.filter(jsdoc.tags, {\n tag: 'access',\n }).some(({description}) => {\n return description === 'private';\n }))\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n const trackedJsdocs = [];\n\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n jsdocNodes.forEach((jsdocNode) => {\n if (!(/^\\/\\*\\*\\s/).test(sourceCode.getText(jsdocNode))) {\n return;\n }\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n state, true,\n );\n });\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const comment = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(comment)) {\n return;\n }\n if (!comment) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(comment);\n callIterator(context, node, [comment], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.includes(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {lines} = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n let contexts;\n if (ruleConfig.contextDefaults) {\n contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n if (contexts.includes('any')) {\n return iterateAllJsdocs(iterator, ruleConfig).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n );\n };\n\n if (ruleConfig.contextDefaults) {\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc,\n };\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
|
package/dist/jsdocUtils.js
CHANGED
|
@@ -363,8 +363,9 @@ const typescriptNamepathDefiningTags = new Set([...closureNamepathDefiningTags,
|
|
|
363
363
|
const namepathDefiningTags = new Set([...typescriptNamepathDefiningTags, // Optional "name" and no curly brackets
|
|
364
364
|
// this block impacts `no-undefined-types` and `valid-types` (search for
|
|
365
365
|
// "isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition")
|
|
366
|
-
'module']);
|
|
367
|
-
|
|
366
|
+
'module']); // These *reference* names/namepaths and do not define them
|
|
367
|
+
|
|
368
|
+
const tagsWithOptionalNamePositionBase = new Set([// `borrows` has a different format, however, so needs special parsing;
|
|
368
369
|
// seems to require both, and as "namepath"'s
|
|
369
370
|
'borrows', // Signature seems to require a "name" (of an event) and no counter-examples
|
|
370
371
|
'emits', 'fires', 'listens', // Signature seems to require a "namepath" (and no counter-examples)
|
|
@@ -380,7 +381,10 @@ const typescriptTagsWithOptionalNamePosition = new Set([...typescriptNamepathDef
|
|
|
380
381
|
const closureTagsWithOptionalNamePosition = new Set([...closureNamepathDefiningTags, ...tagsWithOptionalNamePositionBase]); // Todo: `@link` seems to require a namepath OR URL and might be checked as such.
|
|
381
382
|
// The doc signature of `event` seems to require a "name"
|
|
382
383
|
|
|
383
|
-
const tagsWithMandatoryNamePosition = new Set([//
|
|
384
|
+
const tagsWithMandatoryNamePosition = new Set([// Though no signature provided requiring, per https://jsdoc.app/tags-param.html:
|
|
385
|
+
// "The @param tag requires you to specify the name of the parameter you are documenting."
|
|
386
|
+
'param', 'arg', 'argument', // No docs indicate required, but since parallel to `param`, we treat as such:
|
|
387
|
+
'property', 'prop', // "name" (and a special syntax for the `external` name)
|
|
384
388
|
'external', 'host', // "namepath"
|
|
385
389
|
'callback', 'name', 'typedef']);
|
|
386
390
|
const tagsWithMandatoryTypeOrNamePosition = new Set([// "namepath"
|
|
@@ -515,11 +519,12 @@ const hasReturnValue = node => {
|
|
|
515
519
|
* Checks if a node has a throws statement.
|
|
516
520
|
*
|
|
517
521
|
* @param {object} node
|
|
522
|
+
* @param {boolean} innerFunction
|
|
518
523
|
* @returns {boolean}
|
|
519
524
|
*/
|
|
520
525
|
|
|
521
526
|
|
|
522
|
-
const hasThrowValue = node => {
|
|
527
|
+
const hasThrowValue = (node, innerFunction) => {
|
|
523
528
|
if (!node) {
|
|
524
529
|
return false;
|
|
525
530
|
}
|
|
@@ -529,7 +534,7 @@ const hasThrowValue = node => {
|
|
|
529
534
|
case 'FunctionDeclaration':
|
|
530
535
|
case 'ArrowFunctionExpression':
|
|
531
536
|
{
|
|
532
|
-
return
|
|
537
|
+
return !innerFunction && hasThrowValue(node.body, true);
|
|
533
538
|
}
|
|
534
539
|
|
|
535
540
|
case 'BlockStatement':
|
package/dist/jsdocUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","getParamName","param","isProperty","_","has","left","propertyNames","annotationParamName","properties","roots","prop","value","elements","idx","includes","argument","parameter","Error","getJsdocTagsDeep","jsdoc","targetTagName","ret","tags","forEach","tag","modeWarnSettings","getTagNamesForMode","mode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","mapKeys","replace","tagNames","preferredTagName","entries","find","aliases","isValidTag","definedTags","validTagNames","keys","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryTypePosition","Set","tagsWithMandatoryTypePositionClosure","tagsWithOptionalTypePosition","tagsWithOptionalTypePositionClosure","closureNamepathDefiningTags","typescriptNamepathDefiningTags","namepathDefiningTags","tagsWithOptionalNamePositionBase","tagsWithOptionalNamePosition","typescriptTagsWithOptionalNamePosition","closureTagsWithOptionalNamePosition","tagsWithMandatoryNamePosition","tagsWithMandatoryTypeOrNamePosition","isNamepathDefiningTag","tagName","tagMightHaveTypePosition","tagMustHaveTypePosition","tagMightHaveNamePosition","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","hasThrowValue","parseClosureTemplateTag","description","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","indent","text","match","charAt"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAIA;AACA;AACA,MAAMA,YAAY,GAAG,CAACC,MAAD,EAASC,IAAI,GAAG,EAAhB,KAAuB;AAC1C,MAAIC,cAAc,GAAG,KAArB;AACA,MAAIC,eAAe,GAAG,KAAtB;AACA,QAAMC,KAAK,GAAG,EAAd,CAH0C,CAK1C;;AACA,QAAMC,KAAK,GAAGL,MAAM,CAACM,MAAP,CAAc,CAACC,GAAD,EAAMC,GAAN,KAAc;AACxC,QAAIC,KAAK,CAACC,OAAN,CAAcF,GAAd,CAAJ,EAAwB;AACtB,UAAIG,GAAJ;;AACA,UAAIF,KAAK,CAACC,OAAN,CAAcF,GAAG,CAAC,CAAD,CAAjB,CAAJ,EAA2B;AACzBG,QAAAA,GAAG,GAAGH,GAAG,CAAC,CAAD,CAAT;AACD,OAFD,MAEO;AACL,YAAIA,GAAG,CAAC,CAAD,CAAH,CAAON,cAAX,EAA2B;AACzBA,UAAAA,cAAc,GAAG,IAAjB;AACD;;AACD,YAAIM,GAAG,CAAC,CAAD,CAAH,CAAOL,eAAX,EAA4B;AAC1BA,UAAAA,eAAe,GAAG,IAAlB;AACD;;AACDQ,QAAAA,GAAG,GAAGH,GAAG,CAAC,CAAD,CAAH,CAAOH,KAAb;AACD;;AAED,YAAMO,SAAS,GAAGb,YAAY,CAACY,GAAD,EAAMV,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAG,CAAC,CAAD,CAAI,EAArB,GAAyBA,GAAG,CAAC,CAAD,CAAtC,CAA9B;;AACA,UAAII,SAAS,CAACV,cAAd,EAA8B;AAC5BA,QAAAA,cAAc,GAAG,IAAjB;AACD;;AACD,UAAIU,SAAS,CAACT,eAAd,EAA+B;AAC7BA,QAAAA,eAAe,GAAG,IAAlB;AACD;;AACD,YAAMU,KAAK,GAAG,CACZZ,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAG,CAAC,CAAD,CAAI,EAArB,GAAyBA,GAAG,CAAC,CAAD,CADpB,EAEZ,GAAGI,SAAS,CAACP,KAFD,EAGZS,MAHY,CAGLC,OAHK,CAAd;AAIAX,MAAAA,KAAK,CAACY,IAAN,CAAW,KAAX,EAAkB,GAAGJ,SAAS,CAACR,KAA/B;AAEA,aAAOG,GAAG,CAACU,MAAJ,CAAWJ,KAAX,CAAP;AACD;;AACD,QAAI,OAAOL,GAAP,KAAe,QAAnB,EAA6B;AAC3B,UAAIA,GAAG,CAACU,cAAR,EAAwB;AACtBf,QAAAA,eAAe,GAAG,IAAlB;AACAC,QAAAA,KAAK,CAACY,IAAN,CAAW,IAAX;AACD,OAHD,MAGO;AACLZ,QAAAA,KAAK,CAACY,IAAN,CAAW,KAAX;AACD;;AACD,UAAIR,GAAG,CAACW,WAAR,EAAqB;AACnBjB,QAAAA,cAAc,GAAG,IAAjB;AACD;;AACDK,MAAAA,GAAG,CAACS,IAAJ,CAASf,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAG,CAACY,IAAK,EAAvB,GAA2BZ,GAAG,CAACY,IAA5C;AACD,KAXD,MAWO,IAAI,OAAOZ,GAAP,KAAe,WAAnB,EAAgC;AACrCJ,MAAAA,KAAK,CAACY,IAAN,CAAW,KAAX;AACAT,MAAAA,GAAG,CAACS,IAAJ,CAASf,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAI,EAAlB,GAAsBA,GAAnC;AACD;;AAED,WAAOD,GAAP;AACD,GA/Ca,EA+CX,EA/CW,CAAd;AAiDA,SAAO;AACLJ,IAAAA,eADK;AAELD,IAAAA,cAFK;AAGLG,IAAAA,KAHK;AAILD,IAAAA;AAJK,GAAP;AAMD,CA7DD;;AAgEA,MAAMiB,kCAAkC,GAAIC,aAAD,IAAsB;AAC/D,MAAIA,aAAa,CAACC,IAAd,KAAuB,kBAAvB,IAA6CD,aAAa,CAACC,IAAd,KAAuB,iCAAxE,EAA2G;AACzG,WAAOC,SAAP;AACD;;AACD,MAAIF,aAAa,CAACG,cAAd,IAAgCH,aAAa,CAACG,cAAd,CAA6BA,cAA7B,CAA4CF,IAA5C,KAAqD,eAAzF,EAA0G;AACxG,WAAO,CAACD,aAAa,CAACI,GAAd,CAAkBN,IAAnB,EAAyBE,aAAa,CAACG,cAAd,CAA6BA,cAA7B,CAA4CE,OAA5C,CAAoDC,GAApD,CAAyDC,MAAD,IAAY;AAClG,aAAOR,kCAAkC,CAACQ,MAAD,CAAzC;AACD,KAF+B,CAAzB,CAAP;AAGD;;AAED,SAAOP,aAAa,CAACI,GAAd,CAAkBN,IAAzB;AACD,CAXD;;AAaA,MAAMU,yBAAyB,GAAIC,YAAD,IAAsC;AACtE;AACA,QAAMC,YAAY,GAAG,CAACC,KAAD,EAAQC,UAAR,KAAuB;AAAA;;AAC1C,QAAIC,gBAAEC,GAAF,CAAMH,KAAN,EAAa,gBAAb,KAAkCE,gBAAEC,GAAF,CAAMH,KAAN,EAAa,qBAAb,CAAtC,EAA2E;AACzE,YAAMR,cAAc,GAAGU,gBAAEC,GAAF,CAAMH,KAAN,EAAa,qBAAb,IAAsCA,KAAK,CAACI,IAAN,CAAWZ,cAAjD,GAAkEQ,KAAK,CAACR,cAA/F;;AACA,UAAIA,cAAc,CAACA,cAAf,CAA8BF,IAA9B,KAAuC,eAA3C,EAA4D;AAC1D,cAAMe,aAAa,GAAGb,cAAc,CAACA,cAAf,CAA8BE,OAA9B,CAAsCC,GAAtC,CAA2CC,MAAD,IAAY;AAC1E,iBAAOR,kCAAkC,CAACQ,MAAD,CAAzC;AACD,SAFqB,CAAtB;AAGA,cAAMjB,SAAS,GAAG,EAChB,GAAGb,YAAY,CAACuC,aAAD,CADC;AAEhBC,UAAAA,mBAAmB,EAAEN,KAAK,CAACb;AAFX,SAAlB;;AAIA,YAAIe,gBAAEC,GAAF,CAAMH,KAAN,EAAa,MAAb,KAAwBE,gBAAEC,GAAF,CAAMH,KAAN,EAAa,WAAb,CAA5B,EAAuD;AACrD,iBAAO,CAACE,gBAAEC,GAAF,CAAMH,KAAN,EAAa,WAAb,IAA4BA,KAAK,CAACI,IAAN,CAAWjB,IAAvC,GAA8Ca,KAAK,CAACb,IAArD,EAA2DR,SAA3D,CAAP;AACD;;AAED,eAAO,CAACY,SAAD,EAAYZ,SAAZ,CAAP;AACD;AACF;;AAED,QAAIuB,gBAAEC,GAAF,CAAMH,KAAN,EAAa,MAAb,CAAJ,EAA0B;AACxB,aAAOA,KAAK,CAACb,IAAb;AACD;;AAED,QAAIe,gBAAEC,GAAF,CAAMH,KAAN,EAAa,WAAb,CAAJ,EAA+B;AAC7B,aAAOA,KAAK,CAACI,IAAN,CAAWjB,IAAlB;AACD;;AAED,QAAIa,KAAK,CAACV,IAAN,KAAe,eAAf,IAAkC,gBAAAU,KAAK,CAACI,IAAN,4DAAYd,IAAZ,MAAqB,eAA3D,EAA4E;AAAA;;AAC1E,YAAMiB,UAAU,GAAGP,KAAK,CAACO,UAAN,qBAAoBP,KAAK,CAACI,IAA1B,iDAAoB,aAAYG,UAAhC,CAAnB;AACA,YAAMC,KAAK,GAAGD,UAAU,CAACZ,GAAX,CAAgBc,IAAD,IAAU;AACrC,eAAOV,YAAY,CAACU,IAAD,EAAO,IAAP,CAAnB;AACD,OAFa,CAAd;AAIA,aAAO,CAAClB,SAAD,EAAYzB,YAAY,CAAC0C,KAAD,CAAxB,CAAP;AACD;;AAED,QAAIR,KAAK,CAACV,IAAN,KAAe,UAAnB,EAA+B;AAC7B,UAAIU,KAAK,CAACU,KAAN,CAAYpB,IAAZ,KAAqB,eAAzB,EAA0C;AACxC,eAAO,CAACU,KAAK,CAACP,GAAN,CAAUN,IAAX,EAAiBa,KAAK,CAACU,KAAN,CAAYH,UAAZ,CAAuBZ,GAAvB,CAA4Bc,IAAD,IAAU;AAC3D,iBAAOV,YAAY,CAACU,IAAD,EAAOR,UAAP,CAAnB;AACD,SAFuB,CAAjB,CAAP;AAGD,OAL4B,CAO7B;;AACA;;;AACA,UAAID,KAAK,CAACP,GAAN,CAAUH,IAAV,KAAmB,YAAvB,EAAqC;AACnC,eAAOU,KAAK,CAACP,GAAN,CAAUN,IAAjB;AACD;AACF;;AAED,QAAIa,KAAK,CAACV,IAAN,KAAe,cAAf,IAAiC,iBAAAU,KAAK,CAACI,IAAN,8DAAYd,IAAZ,MAAqB,cAA1D,EAA0E;AAAA;;AACxE,YAAMqB,QAAQ,GAAGX,KAAK,CAACW,QAAN,qBAAkBX,KAAK,CAACI,IAAxB,iDAAkB,aAAYO,QAA9B,CAAjB;AACA,YAAMH,KAAK,GAAGG,QAAQ,CAAChB,GAAT,CAAa,CAACc,IAAD,EAAOG,GAAP,KAAe;AACxC,eAAO;AACLzB,UAAAA,IAAI,EAAEyB,GADD;AAEL1B,UAAAA,WAAW,EAAEuB,IAAI,CAACnB,IAAL,KAAc;AAFtB,SAAP;AAID,OALa,CAAd;AAOA,aAAO,CAACC,SAAD,EAAYzB,YAAY,CAAC0C,KAAD,CAAxB,CAAP;AACD;;AAED,QAAI,CAAC,aAAD,EAAgB,0BAAhB,EAA4CK,QAA5C,CAAqDb,KAAK,CAACV,IAA3D,CAAJ,EAAsE;AACpE,aAAO;AACLL,QAAAA,cAAc,EAAEgB,UADX;AAELd,QAAAA,IAAI,EAAEa,KAAK,CAACc,QAAN,CAAe3B,IAFhB;AAGLD,QAAAA,WAAW,EAAE;AAHR,OAAP;AAKD;;AAED,QAAIc,KAAK,CAACV,IAAN,KAAe,qBAAnB,EAA0C;AACxC,aAAOS,YAAY,CAACC,KAAK,CAACe,SAAP,EAAkB,IAAlB,CAAnB;AACD;;AAED,UAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;AACD,GA3ED;;AA6EA,SAAOlB,YAAY,CAAC/B,MAAb,CAAoB4B,GAApB,CAAyBK,KAAD,IAAW;AACxC,WAAOD,YAAY,CAACC,KAAD,CAAnB;AACD,GAFM,CAAP;AAGD,CAlFD;AAoFA;;;;;;AAIA,MAAMiB,gBAAgB,GAAG,CAACC,KAAD,EAAiBC,aAAjB,KAA4D;AACnF,QAAMC,GAAG,GAAG,EAAZ;AACA,GAACF,KAAK,CAACG,IAAN,IAAc,EAAf,EAAmBC,OAAnB,CAA2B,CAAC;AAACnC,IAAAA,IAAD;AAAOoC,IAAAA,GAAP;AAAYjC,IAAAA;AAAZ,GAAD,EAAoBsB,GAApB,KAA4B;AACrD,QAAIW,GAAG,KAAKJ,aAAZ,EAA2B;AACzB;AACD;;AACDC,IAAAA,GAAG,CAACrC,IAAJ,CAAS;AACP6B,MAAAA,GADO;AAEPzB,MAAAA,IAFO;AAGPG,MAAAA;AAHO,KAAT;AAKD,GATD;AAWA,SAAO8B,GAAP;AACD,CAdD;;AAgBA,MAAMI,gBAAgB,GAAG,4BAAzB;;AAEA,MAAMC,kBAAkB,GAAG,CAACC,IAAD,EAAOC,OAAP,KAAmB;AAC5C,UAAQD,IAAR;AACA,SAAK,OAAL;AACE,aAAOE,mBAAP;;AACF,SAAK,YAAL;AACE,aAAOC,wBAAP;;AACF,SAAK,SAAL;AAAgB,SAAK,YAAL;AACd,aAAOC,qBAAP;;AACF;AACE,UAAI,CAACN,gBAAgB,CAACO,aAAjB,CAA+BJ,OAA/B,EAAwC,MAAxC,CAAL,EAAsD;AACpDA,QAAAA,OAAO,CAACK,MAAR,CAAe;AACbC,UAAAA,GAAG,EAAE;AACHC,YAAAA,KAAK,EAAE;AACLC,cAAAA,MAAM,EAAE,CADH;AAELC,cAAAA,IAAI,EAAE;AAFD;AADJ,WADQ;AAObC,UAAAA,OAAO,EAAG,wBAAuBX,IAAK;AAPzB,SAAf;AASAF,QAAAA,gBAAgB,CAACc,mBAAjB,CAAqCX,OAArC,EAA8C,MAA9C;AACD,OAZH,CAcE;;;AACA,aAAOC,mBAAP;AAtBF;AAwBD,CAzBD;;AA2BA,MAAMW,mBAAmB,GAAG,CAC1BZ,OAD0B,EAE1BD,IAF0B,EAG1BvC,IAH0B,EAI1BqD,aAAsB,GAAG,EAJC,KAKP;AAAA;;AACnB,QAAMC,UAAU,GAAGC,MAAM,CAACC,MAAP,CAAcH,aAAd,CAAnB;;AACA,MAAIC,UAAU,CAAC5B,QAAX,CAAoB1B,IAApB,KAA6BsD,UAAU,CAACG,IAAX,CAAiBC,OAAD,IAAa;AAC5D,WAAOA,OAAO,IAAI,OAAOA,OAAP,KAAmB,QAA9B,IAA0CA,OAAO,CAACC,WAAR,KAAwB3D,IAAzE;AACD,GAFgC,CAAjC,EAEI;AACF,WAAOA,IAAP;AACD,GANkB,CAQnB;AACA;AACA;AACA;AACA;;;AACA,QAAM4D,kBAAkB,GAAG7C,gBAAE8C,OAAF,CAAUR,aAAV,EAAyB,CAAC9B,KAAD,EAAQjB,GAAR,KAAgB;AAClE,WAAOA,GAAG,CAACwD,OAAJ,CAAY,MAAZ,EAAoB,EAApB,CAAP;AACD,GAF0B,CAA3B;;AAIA,MAAI/C,gBAAEC,GAAF,CAAM4C,kBAAN,EAA0B5D,IAA1B,CAAJ,EAAqC;AACnC,WAAO4D,kBAAkB,CAAC5D,IAAD,CAAzB;AACD;;AAED,QAAM+D,QAAQ,GAAGzB,kBAAkB,CAACC,IAAD,EAAOC,OAAP,CAAnC;AAEA,QAAMwB,gBAAgB,2BAAGT,MAAM,CAACU,OAAP,CAAeF,QAAf,EAAyBG,IAAzB,CAA8B,CAAC,GAAGC,OAAH,CAAD,KAAiB;AACtE,WAAOA,OAAO,CAACzC,QAAR,CAAiB1B,IAAjB,CAAP;AACD,GAFwB,CAAH,yDAAG,qBAEpB,CAFoB,CAAzB;;AAGA,MAAIgE,gBAAJ,EAAsB;AACpB,WAAOA,gBAAP;AACD;;AAED,SAAOhE,IAAP;AACD,CApCD;;AAsCA,MAAMoE,UAAU,GAAG,CACjB5B,OADiB,EAEjBD,IAFiB,EAGjBvC,IAHiB,EAIjBqE,WAJiB,KAKJ;AACb,QAAMN,QAAQ,GAAGzB,kBAAkB,CAACC,IAAD,EAAOC,OAAP,CAAnC;AACA,QAAM8B,aAAa,GAAGf,MAAM,CAACgB,IAAP,CAAYR,QAAZ,EAAsBlE,MAAtB,CAA6BkB,gBAAEyD,OAAF,CAAUjB,MAAM,CAACC,MAAP,CAAcO,QAAd,CAAV,CAA7B,CAAtB;AACA,QAAMU,cAAc,GAAGJ,WAAvB;AACA,QAAMK,OAAO,GAAGJ,aAAa,CAACzE,MAAd,CAAqB4E,cAArB,CAAhB;AAEA,SAAOC,OAAO,CAAChD,QAAR,CAAiB1B,IAAjB,CAAP;AACD,CAZD;;AAcA,MAAM2E,MAAM,GAAG,CAAC5C,KAAD,EAAiBC,aAAjB,KAAsD;AACnE,QAAM4C,cAAc,GAAG5C,aAAa,CAAC6C,WAAd,EAAvB;AAEA,SAAO9D,gBAAE0C,IAAF,CAAO1B,KAAK,CAACG,IAAb,EAAoB4C,GAAD,IAAkB;AAC1C,WAAOA,GAAG,CAAC1C,GAAJ,CAAQyC,WAAR,OAA0BD,cAAjC;AACD,GAFM,CAAP;AAGD,CAND;;AAQA,MAAMG,OAAO,GAAG,CAAChD,KAAD,EAAiBiD,cAAjB,KAAsD;AACpE,SAAOA,cAAc,CAACvB,IAAf,CAAqBzB,aAAD,IAAmB;AAC5C,WAAO2C,MAAM,CAAC5C,KAAD,EAAQC,aAAR,CAAb;AACD,GAFM,CAAP;AAGD,CAJD;AAMA;;;;;;;;;;AAQA,MAAMiD,uBAAuB,GAAI7C,GAAD,IAAS;AACvC;AACA,MAAI,OAAOA,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA1C,EAAgD;AAC9C,WAAO,KAAP;AACD,GAJsC,CAMvC;;;AACA,QAAM8C,OAAO,GAAG9C,GAAG,CAACjC,IAAJ,CAASgF,IAAT,EAAhB;;AACA,MAAID,OAAO,KAAK,WAAZ,IAA2BA,OAAO,KAAK,MAA3C,EAAmD;AACjD,WAAO,KAAP;AACD,GAVsC,CAYvC;AACA;;;AACA,SAAO,IAAP;AACD,CAfD;;AAiBA,MAAME,6BAA6B,GAAG,IAAIC,GAAJ,CAAQ,CAC5C;AACA;AACA,YAH4C,EAK5C;AACA,MAN4C,CAAR,CAAtC;AASA,MAAMC,oCAAoC,GAAG,IAAID,GAAJ,CAAQ,CACnD,GAAGD,6BADgD,EAEnD,MAFmD,EAGnD,QAHmD,CAAR,CAA7C,C,CAMA;AACA;AACA;AACA;AACA;;AACA,MAAMG,4BAA4B,GAAG,IAAIF,GAAJ,CAAQ,CAC3C;AACA,MAF2C,EAG3C,QAH2C,EAGjC,KAHiC,EAK3C,SAL2C,EAO3C;AACA,UAR2C,EAQ/B,SAR+B,EAU3C,OAV2C,EAUlC,aAVkC,EAW3C,UAX2C,EAW/B,OAX+B,EAa3C;AACA,QAd2C,EAe3C,WAf2C,EAiB3C;AACA;AACA,OAnB2C,EAmBlC,KAnBkC,EAmB3B,UAnB2B,EAoB3C,UApB2C,EAoB/B,MApB+B,EAsB3C;AACA,SAvB2C,EAuBhC,QAvBgC,EAwB3C,QAxB2C,EAwBjC,WAxBiC,EAyB3C,QAzB2C,EAyBjC,OAzBiC,EA2B3C;AACA;AACA;AACA,UA9B2C,CAAR,CAArC;AAiCA,MAAMG,mCAAmC,GAAG,IAAIH,GAAJ,CAAQ,CAClD,GAAGE,4BAD+C,EAGlD,QAHkD,EAKlD;AACA;AACA,SAPkD,EAQlD,SARkD,EASlD,WATkD,EAWlD;AACA,QAZkD,EAalD,QAbkD,CAAR,CAA5C,C,CAgBA;;AACA,MAAME,2BAA2B,GAAG,IAAIJ,GAAJ,CAAQ,CAC1C;AACA;AACA;AACA,UAJ0C,EAI9B,MAJ8B,EAK1C,OAL0C,EAO1C;AACA,OAR0C,EAQjC,aARiC,EAS1C,UAT0C,EAS9B,OAT8B,EAU1C,UAV0C,EAU9B,MAV8B,EAUtB,QAVsB,EAW1C,QAX0C,EAWhC,KAXgC,EAY1C,OAZ0C,EAa1C,WAb0C,EAe1C;AACA,MAhB0C,EAiB1C,SAjB0C,EAkB1C,UAlB0C,CAAR,CAApC;AAqBA,MAAMK,8BAA8B,GAAG,IAAIL,GAAJ,CAAQ,CAC7C,GAAGI,2BAD0C,EAG7C;AACA,WAJ6C,CAAR,CAAvC;AAOA,MAAME,oBAAoB,GAAG,IAAIN,GAAJ,CAAQ,CACnC,GAAGK,8BADgC,EAGnC;AACA;AACA;AACA,QANmC,CAAR,CAA7B;AASA,MAAME,gCAAgC,GAAG,IAAIP,GAAJ,CAAQ,CAC/C,OAD+C,EAG/C;AACA;AACA,SAL+C,EAO/C;AACA,OAR+C,EAQtC,OARsC,EAS/C,SAT+C,EAW/C;AACA,OAZ+C,EAa/C,UAb+C,EAanC,SAbmC,EAc/C,OAd+C,EAe/C,MAf+C,EAiB/C;AACA;AACA,UAnB+C,EAmBnC,WAnBmC,EAqB/C;AACA,OAtB+C,EAwB/C;AACA,KAzB+C,CAAR,CAAzC,C,CA4BA;AACA;;AACA,MAAMQ,4BAA4B,GAAG,IAAIR,GAAJ,CAAQ,CAC3C,GAAGM,oBADwC,EAE3C,GAAGC,gCAFwC,CAAR,CAArC;AAKA,MAAME,sCAAsC,GAAG,IAAIT,GAAJ,CAAQ,CACrD,GAAGK,8BADkD,EAErD,GAAGE,gCAFkD,CAAR,CAA/C;AAKA,MAAMG,mCAAmC,GAAG,IAAIV,GAAJ,CAAQ,CAClD,GAAGI,2BAD+C,EAElD,GAAGG,gCAF+C,CAAR,CAA5C,C,CAKA;AAEA;;AACA,MAAMI,6BAA6B,GAAG,IAAIX,GAAJ,CAAQ,CAC5C;AACA,UAF4C,EAEhC,MAFgC,EAI5C;AACA,UAL4C,EAM5C,MAN4C,EAO5C,SAP4C,CAAR,CAAtC;AAUA,MAAMY,mCAAmC,GAAG,IAAIZ,GAAJ,CAAQ,CAClD;AACA,OAFkD,EAGlD,UAHkD,EAGtC,SAHsC,EAIlD,SAJkD,EAKlD,OALkD,EAMlD,UANkD,EAMtC,WANsC,EAOlD,MAPkD,EAQlD,MARkD,EASlD,SATkD,EAWlD;AACA,UAZkD,EAYtC,MAZsC,EAclD;AACA,OAfkD,CAAR,CAA5C;;AAkBA,MAAMa,qBAAqB,GAAG,CAAC3D,IAAD,EAAO4D,OAAP,KAAmB;AAC/C,MAAI5D,IAAI,KAAK,SAAb,EAAwB;AACtB,WAAOkD,2BAA2B,CAACzE,GAA5B,CAAgCmF,OAAhC,CAAP;AACD;;AACD,MAAI5D,IAAI,KAAK,YAAb,EAA2B;AACzB,WAAOmD,8BAA8B,CAAC1E,GAA/B,CAAmCmF,OAAnC,CAAP;AACD;;AAED,SAAOR,oBAAoB,CAAC3E,GAArB,CAAyBmF,OAAzB,CAAP;AACD,CATD;;AAWA,MAAMC,wBAAwB,GAAG,CAAC7D,IAAD,EAAOH,GAAP,KAAe;AAC9C,MAAIG,IAAI,KAAK,SAAb,EAAwB;AACtB,WAAO+C,oCAAoC,CAACtE,GAArC,CAAyCoB,GAAzC,KACLoD,mCAAmC,CAACxE,GAApC,CAAwCoB,GAAxC,CADF;AAED;;AAED,SAAOgD,6BAA6B,CAACpE,GAA9B,CAAkCoB,GAAlC,KACLmD,4BAA4B,CAACvE,GAA7B,CAAiCoB,GAAjC,CADF;AAED,CARD;;AAUA,MAAMiE,uBAAuB,GAAG,CAAC9D,IAAD,EAAOH,GAAP,KAAe;AAC7C,MAAIG,IAAI,KAAK,SAAb,EAAwB;AACtB,WAAO+C,oCAAoC,CAACtE,GAArC,CAAyCoB,GAAzC,CAAP;AACD;;AAED,SAAOgD,6BAA6B,CAACpE,GAA9B,CAAkCoB,GAAlC,CAAP;AACD,CAND;;AAQA,MAAMkE,wBAAwB,GAAG,CAAC/D,IAAD,EAAOH,GAAP,KAAe;AAC9C,MAAIG,IAAI,KAAK,SAAb,EAAwB;AACtB,WAAOwD,mCAAmC,CAAC/E,GAApC,CAAwCoB,GAAxC,CAAP;AACD;;AACD,MAAIG,IAAI,KAAK,YAAb,EAA2B;AACzB,WAAOuD,sCAAsC,CAAC9E,GAAvC,CAA2CoB,GAA3C,CAAP;AACD;;AAED,SAAOyD,4BAA4B,CAAC7E,GAA7B,CAAiCoB,GAAjC,CAAP;AACD,CATD;;AAWA,MAAMmE,uBAAuB,GAAInE,GAAD,IAAS;AACvC,SAAO4D,6BAA6B,CAAChF,GAA9B,CAAkCoB,GAAlC,CAAP;AACD,CAFD;;AAIA,MAAMoE,oCAAoC,GAAG,CAACjE,IAAD,EAAOH,GAAP,KAAe;AAC1D,SAAOgE,wBAAwB,CAAC7D,IAAD,EAAOH,GAAP,CAAxB,IAAuCkE,wBAAwB,CAAC/D,IAAD,EAAOH,GAAP,CAAtE;AACD,CAFD;;AAIA,MAAMqE,mCAAmC,GAAIrE,GAAD,IAAS;AACnD,SAAO6D,mCAAmC,CAACjF,GAApC,CAAwCoB,GAAxC,CAAP;AACD,CAFD;AAIA;;;;;;AAMA;;;AACA,MAAMsE,cAAc,GAAIC,IAAD,IAAU;AAC/B,MAAI,CAACA,IAAL,EAAW;AACT,WAAO,KAAP;AACD;;AACD,UAAQA,IAAI,CAACxG,IAAb;AACA,SAAK,oBAAL;AACA,SAAK,qBAAL;AACA,SAAK,yBAAL;AAAgC;AAC9B,eAAOwG,IAAI,CAACC,UAAL,IAAmBF,cAAc,CAACC,IAAI,CAACE,IAAN,CAAxC;AACD;;AACD,SAAK,gBAAL;AAAuB;AACrB,eAAOF,IAAI,CAACE,IAAL,CAAUpD,IAAV,CAAgBqD,QAAD,IAAc;AAClC,iBAAOA,QAAQ,CAAC3G,IAAT,KAAkB,qBAAlB,IAA2CuG,cAAc,CAACI,QAAD,CAAhE;AACD,SAFM,CAAP;AAGD;;AACD,SAAK,gBAAL;AACA,SAAK,kBAAL;AACA,SAAK,cAAL;AACA,SAAK,gBAAL;AACA,SAAK,gBAAL;AACA,SAAK,eAAL;AAAsB;AACpB,eAAOJ,cAAc,CAACC,IAAI,CAACE,IAAN,CAArB;AACD;;AACD,SAAK,aAAL;AAAoB;AAClB,eAAOH,cAAc,CAACC,IAAI,CAACI,UAAN,CAAd,IAAmCL,cAAc,CAACC,IAAI,CAACK,SAAN,CAAxD;AACD;;AACD,SAAK,cAAL;AAAqB;AACnB,eAAON,cAAc,CAACC,IAAI,CAACM,KAAN,CAAd,IACLP,cAAc,CAACC,IAAI,CAACO,OAAL,IAAgBP,IAAI,CAACO,OAAL,CAAaL,IAA9B,CADT,IAELH,cAAc,CAACC,IAAI,CAACQ,SAAN,CAFhB;AAGD;;AACD,SAAK,iBAAL;AAAwB;AACtB,eAAOR,IAAI,CAACS,KAAL,CAAW3D,IAAX,CACJ4D,QAAD,IAAc;AACZ,iBAAOA,QAAQ,CAACN,UAAT,CAAoBtD,IAApB,CAAyBiD,cAAzB,CAAP;AACD,SAHI,CAAP;AAKD;;AACD,SAAK,iBAAL;AAAwB;AACtB;AACA,YAAIC,IAAI,CAAChF,QAAL,KAAkB,IAAtB,EAA4B;AAC1B,iBAAO,KAAP;AACD;;AAED,eAAO,IAAP;AACD;;AACD;AAAS;AACP,eAAO,KAAP;AACD;AA5CD;AA8CD,CAlDD;AAoDA;;;;;;;;AAMA,MAAM2F,aAAa,GAAIX,IAAD,IAAU;AAC9B,MAAI,CAACA,IAAL,EAAW;AACT,WAAO,KAAP;AACD;;AACD,UAAQA,IAAI,CAACxG,IAAb;AACA,SAAK,oBAAL;AACA,SAAK,qBAAL;AACA,SAAK,yBAAL;AAAgC;AAC9B,eAAOwG,IAAI,CAACC,UAAL,IAAmBU,aAAa,CAACX,IAAI,CAACE,IAAN,CAAvC;AACD;;AACD,SAAK,gBAAL;AAAuB;AACrB,eAAOF,IAAI,CAACE,IAAL,CAAUpD,IAAV,CAAgBqD,QAAD,IAAc;AAClC,iBAAOA,QAAQ,CAAC3G,IAAT,KAAkB,qBAAlB,IAA2CmH,aAAa,CAACR,QAAD,CAA/D;AACD,SAFM,CAAP;AAGD;;AACD,SAAK,gBAAL;AACA,SAAK,kBAAL;AACA,SAAK,cAAL;AACA,SAAK,gBAAL;AACA,SAAK,gBAAL;AACA,SAAK,eAAL;AAAsB;AACpB,eAAOQ,aAAa,CAACX,IAAI,CAACE,IAAN,CAApB;AACD;;AACD,SAAK,aAAL;AAAoB;AAClB,eAAOS,aAAa,CAACX,IAAI,CAACI,UAAN,CAAb,IAAkCO,aAAa,CAACX,IAAI,CAACK,SAAN,CAAtD;AACD;AAED;;AACA,SAAK,cAAL;AAAqB;AACnB,eAAOM,aAAa,CAACX,IAAI,CAACO,OAAL,IAAgBP,IAAI,CAACO,OAAL,CAAaL,IAA9B,CAAb,IACHS,aAAa,CAACX,IAAI,CAACQ,SAAN,CADjB;AAED;;AACD,SAAK,iBAAL;AAAwB;AACtB,eAAOR,IAAI,CAACS,KAAL,CAAW3D,IAAX,CACJ4D,QAAD,IAAc;AACZ,iBAAOA,QAAQ,CAACN,UAAT,CAAoBtD,IAApB,CAAyB6D,aAAzB,CAAP;AACD,SAHI,CAAP;AAKD;;AACD,SAAK,gBAAL;AAAuB;AACrB,eAAO,IAAP;AACD;;AAED;AAAS;AACP,eAAO,KAAP;AACD;AAzCD;AA2CD,CA/CD;AAiDA;;AACA;;;;;;AAMA;;;;;;;;;AAOA,MAAMC,uBAAuB,GAAInF,GAAD,IAAS;AACvC,SAAO,CAACA,GAAG,CAACpC,IAAJ,GAAW,GAAX,GAAiBoC,GAAG,CAACoF,WAAtB,EACJC,KADI,CACE,GADF,EAEJjH,GAFI,CAECL,IAAD,IAAU;AACb,WAAOA,IAAI,CAACgF,IAAL,EAAP;AACD,GAJI,CAAP;AAKD,CAND;AAQA;;;;;;;;;;;AASA,MAAMuC,gBAAgB,GAAG,CAAClF,OAAD,EAAUmF,eAAV,KAA8B;AACrD,QAAM;AACJC,IAAAA,QAAQ,GAAGD,eAAe,KAAK,IAApB,GAA2B,CACpC,yBADoC,EAEpC,qBAFoC,EAGpC,oBAHoC,CAA3B,GAIPA;AALA,MAMFnF,OAAO,CAACqF,OAAR,CAAgB,CAAhB,KAAsB,EAN1B;AAQA,SAAOD,QAAP;AACD,CAVD;AAYA;;;;;;AAIA,MAAME,gBAAgB,GAAG,CAACF,QAAD,EAAWG,UAAX,KAA0B;AACjD,QAAM3G,UAAU,GAAG,EAAnB;AAEAwG,EAAAA,QAAQ,CAACzF,OAAT,CAAkBb,IAAD,IAAU;AACzB,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5BF,MAAAA,UAAU,CAACE,IAAI,CAACkB,OAAN,CAAV,GAA2BuF,UAA3B;AACD,KAFD,MAEO;AACL3G,MAAAA,UAAU,CAACE,IAAD,CAAV,GAAmByG,UAAnB;AACD;AACF,GAND;AAQA,SAAO3G,UAAP;AACD,CAZD;;AAcA,MAAM4G,UAAU,GAAG,CAAC9F,IAAI,GAAG,EAAR,EAAYxC,MAAZ,KAAuB;AACxC,SAAOwC,IAAI,CAACxC,MAAL,CAAYA,MAAZ,CAAP;AACD,CAFD;;AAIA,MAAMuI,4BAA4B,GAAG,IAAI5C,GAAJ,CAAQ,CAC3C,OAD2C,EAClC,KADkC,EAC3B,UAD2B,EACf,UADe,EACH,MADG,EAG3C;AACA,SAJ2C,EAIhC,QAJgC,CAAR,CAArC;;AAOA,MAAM6C,aAAa,GAAG,CAAC1F,OAAD,EAAUD,IAAV,EAAgBL,IAAhB,EAAsBmB,aAAtB,KAAwC;AAC5D,QAAM8E,QAAQ,GAAG/E,mBAAmB,CAACZ,OAAD,EAAUD,IAAV,EAAgB,aAAhB,EAA+Bc,aAA/B,CAApC;AACA,QAAM+E,gBAAgB,GAAG,EAAzB;AACA,QAAMC,aAAa,GAAGL,UAAU,CAAC9F,IAAD,EAAQE,GAAD,IAAS;AAC9C,UAAM;AAACA,MAAAA,GAAG,EAAE+D;AAAN,QAAiB/D,GAAvB;AACA,UAAMkG,WAAW,GAAGL,4BAA4B,CAACjH,GAA7B,CAAiCmF,OAAjC,CAApB;;AACA,QAAI,CAACmC,WAAD,IAAgBnC,OAAO,KAAKgC,QAAhC,EAA0C;AACxCC,MAAAA,gBAAgB,CAACxI,IAAjB,CAAsBwC,GAAtB;AACD;;AAED,WAAOkG,WAAP;AACD,GAR+B,CAAhC;AAUA,SAAO;AACLD,IAAAA,aADK;AAELD,IAAAA;AAFK,GAAP;AAID,CAjBD;;AAmBA,MAAMG,SAAS,GAAIC,UAAD,IAAgB;AAChC,MAAIC,MAAM,GAAGD,UAAU,CAACE,IAAX,CAAgBC,KAAhB,CAAsB,eAAtB,CAAb;AACAF,EAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAN,CAAUG,MAAV,EAAf,GAAoC,GAAnD;AAEA,SAAOH,MAAP;AACD,CALD;;eAOe;AACbf,EAAAA,gBADa;AAEbM,EAAAA,UAFa;AAGbrJ,EAAAA,YAHa;AAIbmJ,EAAAA,gBAJa;AAKbpH,EAAAA,yBALa;AAMb6H,EAAAA,SANa;AAObzG,EAAAA,gBAPa;AAQbsB,EAAAA,mBARa;AASb8E,EAAAA,aATa;AAUbnD,EAAAA,OAVa;AAWbE,EAAAA,uBAXa;AAYbyB,EAAAA,cAZa;AAab/B,EAAAA,MAba;AAcb2C,EAAAA,aAda;AAebpB,EAAAA,qBAfa;AAgBb9B,EAAAA,UAhBa;AAiBbmD,EAAAA,uBAjBa;AAkBbf,EAAAA,oCAlBa;AAmBbF,EAAAA,wBAnBa;AAoBbF,EAAAA,wBApBa;AAqBbK,EAAAA,mCArBa;AAsBbF,EAAAA,uBAtBa;AAuBbF,EAAAA;AAvBa,C","sourcesContent":["import _ from 'lodash';\nimport {jsdocTags, closureTags, typeScriptTags} from './tagNames';\nimport WarnSettings from './WarnSettings';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n // eslint-disable-next-line unicorn/no-reduce\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n if (cur.restElement) {\n hasRestElement = true;\n }\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\ntype T = string | [?string, T];\nconst getPropertiesFromPropertySignature = (propSignature): T => {\n if (propSignature.type === 'TSIndexSignature' || propSignature.type === 'TSConstructSignatureDeclaration') {\n return undefined;\n }\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n })];\n }\n\n return propSignature.key.name;\n};\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<T> => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n if (_.has(param, 'typeAnnotation') || _.has(param, 'left.typeAnnotation')) {\n const typeAnnotation = _.has(param, 'left.typeAnnotation') ? param.left.typeAnnotation : param.typeAnnotation;\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n if (_.has(param, 'name') || _.has(param, 'left.name')) {\n return [_.has(param, 'left.name') ? param.left.name : param.name, flattened];\n }\n\n return [undefined, flattened];\n }\n }\n\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (param.type === 'Property') {\n if (param.value.type === 'ObjectPattern') {\n return [param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n })];\n }\n\n // As function parameters, these do not allow dynamic properties, etc.\n /* istanbul ignore else */\n if (param.key.type === 'Identifier') {\n return param.key.name;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (['RestElement', 'ExperimentalRestProperty'].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n const ret = [];\n (jsdoc.tags || []).forEach(({name, tag, type}, idx) => {\n if (tag !== targetTagName) {\n return;\n }\n ret.push({\n idx,\n name,\n type,\n });\n });\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = _.mapKeys(tagPreference, (value, key) => {\n return key.replace('tag ', '');\n });\n\n if (_.has(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([, aliases]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n const validTagNames = Object.keys(tagNames).concat(_.flatten(Object.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\nconst tagsWithMandatoryTypePosition = new Set([\n // These both show curly brackets in the doc signature and examples\n // \"typeExpression\"\n 'implements',\n\n // \"typeName\"\n 'type',\n]);\n\nconst tagsWithMandatoryTypePositionClosure = new Set([\n ...tagsWithMandatoryTypePosition,\n 'this',\n 'define',\n]);\n\n// All of these have a signature with \"type\" except for\n// `augments`/`extends` (\"namepath\")\n// `param`/`arg`/`argument` (no signature)\n// `property`/`prop` (no signature)\n// `modifies` (undocumented)\nconst tagsWithOptionalTypePosition = new Set([\n // These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html\n 'enum',\n 'member', 'var',\n\n 'typedef',\n\n // These do not show curly brackets in either the signature or examples\n 'augments', 'extends',\n\n 'class', 'constructor',\n 'constant', 'const',\n\n // These show the signature with curly brackets but not in the example\n 'module',\n 'namespace',\n\n // These have no formal signature in the docs but show curly brackets\n // in the examples\n 'param', 'arg', 'argument',\n 'property', 'prop',\n\n // These show curly brackets in the signature and in the examples\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Has no documentation, but test example has curly brackets, and\n // \"name\" would be suggested rather than \"namepath\" based on example; not\n // sure if name is required\n 'modifies',\n]);\n\nconst tagsWithOptionalTypePositionClosure = new Set([\n ...tagsWithOptionalTypePosition,\n\n 'export',\n\n // Shows the signature with curly brackets but not in the example\n // \"typeExpression\"\n 'package',\n 'private',\n 'protected',\n\n // These do not show a signature nor show curly brackets in the example\n 'public',\n 'static',\n]);\n\n// None of these show as having curly brackets for their name/namepath\nconst closureNamepathDefiningTags = new Set([\n // These appear to require a \"name\" in their signature, albeit these\n // are somewhat different from other \"name\"'s (including as described\n // at https://jsdoc.app/about-namepaths.html )\n 'external', 'host',\n 'event',\n\n // These allow for \"name\"'s in their signature, but indicate as optional\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'member', 'var',\n 'mixin',\n 'namespace',\n\n // These seem to all require a \"namepath\" in their signatures (with no counter-examples)\n 'name',\n 'typedef',\n 'callback',\n]);\n\nconst typescriptNamepathDefiningTags = new Set([\n ...closureNamepathDefiningTags,\n\n // Allows for \"name\" in signature, but indicates as optional\n 'interface',\n]);\n\nconst namepathDefiningTags = new Set([\n ...typescriptNamepathDefiningTags,\n\n // Optional \"name\" and no curly brackets\n // this block impacts `no-undefined-types` and `valid-types` (search for\n // \"isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition\")\n 'module',\n]);\n\nconst tagsWithOptionalNamePositionBase = new Set([\n 'param',\n\n // `borrows` has a different format, however, so needs special parsing;\n // seems to require both, and as \"namepath\"'s\n 'borrows',\n\n // Signature seems to require a \"name\" (of an event) and no counter-examples\n 'emits', 'fires',\n 'listens',\n\n // Signature seems to require a \"namepath\" (and no counter-examples)\n 'alias',\n 'augments', 'extends',\n 'lends',\n 'this',\n\n // Signature seems to require a \"namepath\" (and no counter-examples),\n // though it allows an incomplete namepath ending with connecting symbol\n 'memberof', 'memberof!',\n\n // Signature seems to require a \"OtherObjectPath\" with no counter-examples\n 'mixes',\n\n // Signature allows for \"namepath\" or text\n 'see',\n]);\n\n// The following do not seem to allow curly brackets in their doc\n// signature or examples (besides `modifies` and `param`)\nconst tagsWithOptionalNamePosition = new Set([\n ...namepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst typescriptTagsWithOptionalNamePosition = new Set([\n ...typescriptNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst closureTagsWithOptionalNamePosition = new Set([\n ...closureNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\n// Todo: `@link` seems to require a namepath OR URL and might be checked as such.\n\n// The doc signature of `event` seems to require a \"name\"\nconst tagsWithMandatoryNamePosition = new Set([\n // \"name\" (and a special syntax for the `external` name)\n 'external', 'host',\n\n // \"namepath\"\n 'callback',\n 'name',\n 'typedef',\n]);\n\nconst tagsWithMandatoryTypeOrNamePosition = new Set([\n // \"namepath\"\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'lends',\n 'memberof', 'memberof!',\n 'name',\n 'this',\n 'typedef',\n\n // \"name\"\n 'external', 'host',\n\n // \"OtherObjectPath\"\n 'mixes',\n]);\n\nconst isNamepathDefiningTag = (mode, tagName) => {\n if (mode === 'closure') {\n return closureNamepathDefiningTags.has(tagName);\n }\n if (mode === 'typescript') {\n return typescriptNamepathDefiningTags.has(tagName);\n }\n\n return namepathDefiningTags.has(tagName);\n};\n\nconst tagMightHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag) ||\n tagsWithOptionalTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag) ||\n tagsWithOptionalTypePosition.has(tag);\n};\n\nconst tagMustHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag);\n};\n\nconst tagMightHaveNamePosition = (mode, tag) => {\n if (mode === 'closure') {\n return closureTagsWithOptionalNamePosition.has(tag);\n }\n if (mode === 'typescript') {\n return typescriptTagsWithOptionalNamePosition.has(tag);\n }\n\n return tagsWithOptionalNamePosition.has(tag);\n};\n\nconst tagMustHaveNamePosition = (tag) => {\n return tagsWithMandatoryNamePosition.has(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (mode, tag) => {\n return tagMightHaveTypePosition(mode, tag) || tagMightHaveNamePosition(mode, tag);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag) => {\n return tagsWithMandatoryTypeOrNamePosition.has(tag);\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body);\n }\n case 'IfStatement': {\n return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);\n }\n case 'TryStatement': {\n return hasReturnValue(node.block) ||\n hasReturnValue(node.handler && node.handler.body) ||\n hasReturnValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasReturnValue);\n },\n );\n }\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst hasThrowValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasThrowValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasThrowValue);\n },\n );\n }\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return (tag.name + ' ' + tag.description)\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n const properties = {};\n\n contexts.forEach((prop) => {\n if (typeof prop === 'object') {\n properties[prop.context] = checkJsdoc;\n } else {\n properties[prop] = checkJsdoc;\n }\n });\n\n return properties;\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/u);\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMustHaveEitherTypeOrNamePosition,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","getParamName","param","isProperty","_","has","left","propertyNames","annotationParamName","properties","roots","prop","value","elements","idx","includes","argument","parameter","Error","getJsdocTagsDeep","jsdoc","targetTagName","ret","tags","forEach","tag","modeWarnSettings","getTagNamesForMode","mode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","mapKeys","replace","tagNames","preferredTagName","entries","find","aliases","isValidTag","definedTags","validTagNames","keys","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryTypePosition","Set","tagsWithMandatoryTypePositionClosure","tagsWithOptionalTypePosition","tagsWithOptionalTypePositionClosure","closureNamepathDefiningTags","typescriptNamepathDefiningTags","namepathDefiningTags","tagsWithOptionalNamePositionBase","tagsWithOptionalNamePosition","typescriptTagsWithOptionalNamePosition","closureTagsWithOptionalNamePosition","tagsWithMandatoryNamePosition","tagsWithMandatoryTypeOrNamePosition","isNamepathDefiningTag","tagName","tagMightHaveTypePosition","tagMustHaveTypePosition","tagMightHaveNamePosition","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","hasThrowValue","innerFunction","parseClosureTemplateTag","description","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","indent","text","match","charAt"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {jsdocTags, closureTags, typeScriptTags} from './tagNames';\nimport WarnSettings from './WarnSettings';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n // eslint-disable-next-line unicorn/no-reduce\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n if (cur.restElement) {\n hasRestElement = true;\n }\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\ntype T = string | [?string, T];\nconst getPropertiesFromPropertySignature = (propSignature): T => {\n if (propSignature.type === 'TSIndexSignature' || propSignature.type === 'TSConstructSignatureDeclaration') {\n return undefined;\n }\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n })];\n }\n\n return propSignature.key.name;\n};\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<T> => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n if (_.has(param, 'typeAnnotation') || _.has(param, 'left.typeAnnotation')) {\n const typeAnnotation = _.has(param, 'left.typeAnnotation') ? param.left.typeAnnotation : param.typeAnnotation;\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n if (_.has(param, 'name') || _.has(param, 'left.name')) {\n return [_.has(param, 'left.name') ? param.left.name : param.name, flattened];\n }\n\n return [undefined, flattened];\n }\n }\n\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (param.type === 'Property') {\n if (param.value.type === 'ObjectPattern') {\n return [param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n })];\n }\n\n // As function parameters, these do not allow dynamic properties, etc.\n /* istanbul ignore else */\n if (param.key.type === 'Identifier') {\n return param.key.name;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (['RestElement', 'ExperimentalRestProperty'].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n const ret = [];\n (jsdoc.tags || []).forEach(({name, tag, type}, idx) => {\n if (tag !== targetTagName) {\n return;\n }\n ret.push({\n idx,\n name,\n type,\n });\n });\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = _.mapKeys(tagPreference, (value, key) => {\n return key.replace('tag ', '');\n });\n\n if (_.has(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([, aliases]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n const validTagNames = Object.keys(tagNames).concat(_.flatten(Object.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\nconst tagsWithMandatoryTypePosition = new Set([\n // These both show curly brackets in the doc signature and examples\n // \"typeExpression\"\n 'implements',\n\n // \"typeName\"\n 'type',\n]);\n\nconst tagsWithMandatoryTypePositionClosure = new Set([\n ...tagsWithMandatoryTypePosition,\n 'this',\n 'define',\n]);\n\n// All of these have a signature with \"type\" except for\n// `augments`/`extends` (\"namepath\")\n// `param`/`arg`/`argument` (no signature)\n// `property`/`prop` (no signature)\n// `modifies` (undocumented)\nconst tagsWithOptionalTypePosition = new Set([\n // These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html\n 'enum',\n 'member', 'var',\n\n 'typedef',\n\n // These do not show curly brackets in either the signature or examples\n 'augments', 'extends',\n\n 'class', 'constructor',\n 'constant', 'const',\n\n // These show the signature with curly brackets but not in the example\n 'module',\n 'namespace',\n\n // These have no formal signature in the docs but show curly brackets\n // in the examples\n 'param', 'arg', 'argument',\n 'property', 'prop',\n\n // These show curly brackets in the signature and in the examples\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Has no documentation, but test example has curly brackets, and\n // \"name\" would be suggested rather than \"namepath\" based on example; not\n // sure if name is required\n 'modifies',\n]);\n\nconst tagsWithOptionalTypePositionClosure = new Set([\n ...tagsWithOptionalTypePosition,\n\n 'export',\n\n // Shows the signature with curly brackets but not in the example\n // \"typeExpression\"\n 'package',\n 'private',\n 'protected',\n\n // These do not show a signature nor show curly brackets in the example\n 'public',\n 'static',\n]);\n\n// None of these show as having curly brackets for their name/namepath\nconst closureNamepathDefiningTags = new Set([\n // These appear to require a \"name\" in their signature, albeit these\n // are somewhat different from other \"name\"'s (including as described\n // at https://jsdoc.app/about-namepaths.html )\n 'external', 'host',\n 'event',\n\n // These allow for \"name\"'s in their signature, but indicate as optional\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'member', 'var',\n 'mixin',\n 'namespace',\n\n // These seem to all require a \"namepath\" in their signatures (with no counter-examples)\n 'name',\n 'typedef',\n 'callback',\n]);\n\nconst typescriptNamepathDefiningTags = new Set([\n ...closureNamepathDefiningTags,\n\n // Allows for \"name\" in signature, but indicates as optional\n 'interface',\n]);\n\nconst namepathDefiningTags = new Set([\n ...typescriptNamepathDefiningTags,\n\n // Optional \"name\" and no curly brackets\n // this block impacts `no-undefined-types` and `valid-types` (search for\n // \"isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition\")\n 'module',\n]);\n\n// These *reference* names/namepaths and do not define them\nconst tagsWithOptionalNamePositionBase = new Set([\n // `borrows` has a different format, however, so needs special parsing;\n // seems to require both, and as \"namepath\"'s\n 'borrows',\n\n // Signature seems to require a \"name\" (of an event) and no counter-examples\n 'emits', 'fires',\n 'listens',\n\n // Signature seems to require a \"namepath\" (and no counter-examples)\n 'alias',\n 'augments', 'extends',\n 'lends',\n 'this',\n\n // Signature seems to require a \"namepath\" (and no counter-examples),\n // though it allows an incomplete namepath ending with connecting symbol\n 'memberof', 'memberof!',\n\n // Signature seems to require a \"OtherObjectPath\" with no counter-examples\n 'mixes',\n\n // Signature allows for \"namepath\" or text\n 'see',\n]);\n\n// The following do not seem to allow curly brackets in their doc\n// signature or examples (besides `modifies` and `param`)\nconst tagsWithOptionalNamePosition = new Set([\n ...namepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst typescriptTagsWithOptionalNamePosition = new Set([\n ...typescriptNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst closureTagsWithOptionalNamePosition = new Set([\n ...closureNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\n// Todo: `@link` seems to require a namepath OR URL and might be checked as such.\n\n// The doc signature of `event` seems to require a \"name\"\nconst tagsWithMandatoryNamePosition = new Set([\n // Though no signature provided requiring, per https://jsdoc.app/tags-param.html:\n // \"The @param tag requires you to specify the name of the parameter you are documenting.\"\n 'param',\n 'arg',\n 'argument',\n\n // No docs indicate required, but since parallel to `param`, we treat as such:\n 'property',\n 'prop',\n\n // \"name\" (and a special syntax for the `external` name)\n 'external', 'host',\n\n // \"namepath\"\n 'callback',\n 'name',\n 'typedef',\n]);\n\nconst tagsWithMandatoryTypeOrNamePosition = new Set([\n // \"namepath\"\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'lends',\n 'memberof', 'memberof!',\n 'name',\n 'this',\n 'typedef',\n\n // \"name\"\n 'external', 'host',\n\n // \"OtherObjectPath\"\n 'mixes',\n]);\n\nconst isNamepathDefiningTag = (mode, tagName) => {\n if (mode === 'closure') {\n return closureNamepathDefiningTags.has(tagName);\n }\n if (mode === 'typescript') {\n return typescriptNamepathDefiningTags.has(tagName);\n }\n\n return namepathDefiningTags.has(tagName);\n};\n\nconst tagMightHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag) ||\n tagsWithOptionalTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag) ||\n tagsWithOptionalTypePosition.has(tag);\n};\n\nconst tagMustHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag);\n};\n\nconst tagMightHaveNamePosition = (mode, tag) => {\n if (mode === 'closure') {\n return closureTagsWithOptionalNamePosition.has(tag);\n }\n if (mode === 'typescript') {\n return typescriptTagsWithOptionalNamePosition.has(tag);\n }\n\n return tagsWithOptionalNamePosition.has(tag);\n};\n\nconst tagMustHaveNamePosition = (tag) => {\n return tagsWithMandatoryNamePosition.has(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (mode, tag) => {\n return tagMightHaveTypePosition(mode, tag) || tagMightHaveNamePosition(mode, tag);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag) => {\n return tagsWithMandatoryTypeOrNamePosition.has(tag);\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body);\n }\n case 'IfStatement': {\n return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);\n }\n case 'TryStatement': {\n return hasReturnValue(node.block) ||\n hasReturnValue(node.handler && node.handler.body) ||\n hasReturnValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasReturnValue);\n },\n );\n }\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && hasThrowValue(node.body, true);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasThrowValue);\n },\n );\n }\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return (tag.name + ' ' + tag.description)\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n const properties = {};\n\n contexts.forEach((prop) => {\n if (typeof prop === 'object') {\n properties[prop.context] = checkJsdoc;\n } else {\n properties[prop] = checkJsdoc;\n }\n });\n\n return properties;\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/u);\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMustHaveEitherTypeOrNamePosition,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
|
|
@@ -39,6 +39,10 @@ const OPTIONS_SCHEMA = {
|
|
|
39
39
|
},
|
|
40
40
|
type: 'array'
|
|
41
41
|
},
|
|
42
|
+
enableFixer: {
|
|
43
|
+
default: true,
|
|
44
|
+
type: 'boolean'
|
|
45
|
+
},
|
|
42
46
|
exemptEmptyFunctions: {
|
|
43
47
|
default: false,
|
|
44
48
|
type: 'boolean'
|
|
@@ -114,10 +118,12 @@ const getOptions = context => {
|
|
|
114
118
|
const {
|
|
115
119
|
publicOnly,
|
|
116
120
|
contexts = [],
|
|
117
|
-
exemptEmptyFunctions = false
|
|
121
|
+
exemptEmptyFunctions = false,
|
|
122
|
+
enableFixer = true
|
|
118
123
|
} = context.options[0] || {};
|
|
119
124
|
return {
|
|
120
125
|
contexts,
|
|
126
|
+
enableFixer,
|
|
121
127
|
exemptEmptyFunctions,
|
|
122
128
|
publicOnly: (baseObj => {
|
|
123
129
|
if (!publicOnly) {
|
|
@@ -150,7 +156,8 @@ var _default = {
|
|
|
150
156
|
require: requireOption,
|
|
151
157
|
contexts,
|
|
152
158
|
publicOnly,
|
|
153
|
-
exemptEmptyFunctions
|
|
159
|
+
exemptEmptyFunctions,
|
|
160
|
+
enableFixer
|
|
154
161
|
} = getOptions(context);
|
|
155
162
|
|
|
156
163
|
const checkJsDoc = (node, isFunctionContext) => {
|
|
@@ -206,7 +213,7 @@ var _default = {
|
|
|
206
213
|
start: node.loc.start
|
|
207
214
|
};
|
|
208
215
|
context.report({
|
|
209
|
-
fix,
|
|
216
|
+
fix: enableFixer ? fix : null,
|
|
210
217
|
loc,
|
|
211
218
|
messageId: 'missingJsDoc',
|
|
212
219
|
node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireJsdoc.js"],"names":["OPTIONS_SCHEMA","additionalProperties","properties","contexts","items","anyOf","type","context","inlineCommentBlock","exemptEmptyFunctions","default","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","require","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","baseObject","option","key","_","has","options","getOptions","baseObj","Object","keys","forEach","prop","opt","create","sourceCode","getSourceCode","settings","requireOption","checkJsDoc","node","isFunctionContext","jsDocNode","functionParameterNames","jsdocUtils","getFunctionParameterNames","length","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","decorator","tokenBefore","getTokenBefore","includeComments","indent","getIndent","text","getText","loc","start","column","find","ctxt","insertion","repeat","slice","insertTextBefore","report","end","messageId","Boolean","initModuleExports","initWindow","parseResult","exportParser","parse","ast","exported","isExported","getContextObject","enforcedContexts","includes","parent","value","meta","docs","category","description","recommended","url","fixable","messages","missingJsDoc","schema"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport jsdocUtils from '../jsdocUtils';\nimport exportParser from '../exportParser';\nimport {getJSDocComment, getReducedASTNode, getDecorator} from '../eslint/getJSDocComment';\nimport {getSettings} from '../iterateJsdoc';\n\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\nconst getOption = (context, baseObject, option, key) => {\n if (!_.has(context, `options[0][${option}][${key}]`)) {\n return baseObject.properties[key].default;\n }\n\n return context.options[0][option][key];\n};\n\nconst getOptions = (context) => {\n const {\n publicOnly,\n contexts = [],\n exemptEmptyFunctions = false,\n } = context.options[0] || {};\n\n return {\n contexts,\n exemptEmptyFunctions,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'publicOnly', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.publicOnly.oneOf[1]),\n require: ((baseObj) => {\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'require', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.require),\n };\n};\n\nexport default {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n const {\n require: requireOption,\n contexts,\n publicOnly, exemptEmptyFunctions,\n } = getOptions(context);\n\n const checkJsDoc = (node, isFunctionContext) => {\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n if (exemptEmptyFunctions && isFunctionContext) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node, context)) {\n return;\n }\n }\n\n const fix = (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode = getReducedASTNode(node, sourceCode);\n\n let decorator;\n do {\n const tokenBefore = sourceCode.getTokenBefore(baseNode, {includeComments: true});\n decorator = getDecorator(tokenBefore, sourceCode);\n if (decorator) {\n baseNode = decorator;\n }\n } while (decorator);\n\n const indent = jsdocUtils.getIndent({\n text: sourceCode.getText(\n baseNode,\n baseNode.loc.start.column,\n ),\n });\n const {inlineCommentBlock} = contexts.find(({context: ctxt}) => {\n return ctxt === node.type;\n }) || {};\n const insertion = (inlineCommentBlock ?\n '/** ' :\n `/**\\n${indent}*\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(baseNode, insertion);\n };\n\n const report = () => {\n const loc = {\n end: node.loc.start + 1,\n start: node.loc.start,\n };\n context.report({\n fix,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const parseResult = exportParser.parse(sourceCode.ast, node, opt);\n const exported = exportParser.isExported(node, parseResult, opt);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n return {\n ...jsdocUtils.getContextObject(jsdocUtils.enforcedContexts(context, []), checkJsDoc),\n ArrowFunctionExpression (node) {\n if (!requireOption.ArrowFunctionExpression) {\n return;\n }\n\n if (!['VariableDeclarator', 'ExportDefaultDeclaration', 'AssignmentExpression'].includes(node.parent.type)) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n ClassDeclaration (node) {\n if (!requireOption.ClassDeclaration) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n ClassExpression (node) {\n if (!requireOption.ClassExpression) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n FunctionDeclaration (node) {\n if (!requireOption.FunctionDeclaration) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n FunctionExpression (node) {\n if (requireOption.MethodDefinition && node.parent.type === 'MethodDefinition') {\n checkJsDoc(node, true);\n\n return;\n }\n\n if (!requireOption.FunctionExpression) {\n return;\n }\n\n if (\n ['VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration'].includes(node.parent.type) ||\n node.parent.type === 'Property' && node === node.parent.value\n ) {\n checkJsDoc(node, true);\n }\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: 'true',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"file":"requireJsdoc.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireJsdoc.js"],"names":["OPTIONS_SCHEMA","additionalProperties","properties","contexts","items","anyOf","type","context","inlineCommentBlock","enableFixer","default","exemptEmptyFunctions","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","require","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","baseObject","option","key","_","has","options","getOptions","baseObj","Object","keys","forEach","prop","opt","create","sourceCode","getSourceCode","settings","requireOption","checkJsDoc","node","isFunctionContext","jsDocNode","functionParameterNames","jsdocUtils","getFunctionParameterNames","length","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","decorator","tokenBefore","getTokenBefore","includeComments","indent","getIndent","text","getText","loc","start","column","find","ctxt","insertion","repeat","slice","insertTextBefore","report","end","messageId","Boolean","initModuleExports","initWindow","parseResult","exportParser","parse","ast","exported","isExported","getContextObject","enforcedContexts","includes","parent","value","meta","docs","category","description","recommended","url","fixable","messages","missingJsDoc","schema"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport jsdocUtils from '../jsdocUtils';\nimport exportParser from '../exportParser';\nimport {getJSDocComment, getReducedASTNode, getDecorator} from '../eslint/getJSDocComment';\nimport {getSettings} from '../iterateJsdoc';\n\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\nconst getOption = (context, baseObject, option, key) => {\n if (!_.has(context, `options[0][${option}][${key}]`)) {\n return baseObject.properties[key].default;\n }\n\n return context.options[0][option][key];\n};\n\nconst getOptions = (context) => {\n const {\n publicOnly,\n contexts = [],\n exemptEmptyFunctions = false,\n enableFixer = true,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyFunctions,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'publicOnly', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.publicOnly.oneOf[1]),\n require: ((baseObj) => {\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'require', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.require),\n };\n};\n\nexport default {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n const {\n require: requireOption,\n contexts,\n publicOnly, exemptEmptyFunctions, enableFixer,\n } = getOptions(context);\n\n const checkJsDoc = (node, isFunctionContext) => {\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n if (exemptEmptyFunctions && isFunctionContext) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node, context)) {\n return;\n }\n }\n\n const fix = (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode = getReducedASTNode(node, sourceCode);\n\n let decorator;\n do {\n const tokenBefore = sourceCode.getTokenBefore(baseNode, {includeComments: true});\n decorator = getDecorator(tokenBefore, sourceCode);\n if (decorator) {\n baseNode = decorator;\n }\n } while (decorator);\n\n const indent = jsdocUtils.getIndent({\n text: sourceCode.getText(\n baseNode,\n baseNode.loc.start.column,\n ),\n });\n const {inlineCommentBlock} = contexts.find(({context: ctxt}) => {\n return ctxt === node.type;\n }) || {};\n const insertion = (inlineCommentBlock ?\n '/** ' :\n `/**\\n${indent}*\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(baseNode, insertion);\n };\n\n const report = () => {\n const loc = {\n end: node.loc.start + 1,\n start: node.loc.start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const parseResult = exportParser.parse(sourceCode.ast, node, opt);\n const exported = exportParser.isExported(node, parseResult, opt);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n return {\n ...jsdocUtils.getContextObject(jsdocUtils.enforcedContexts(context, []), checkJsDoc),\n ArrowFunctionExpression (node) {\n if (!requireOption.ArrowFunctionExpression) {\n return;\n }\n\n if (!['VariableDeclarator', 'ExportDefaultDeclaration', 'AssignmentExpression'].includes(node.parent.type)) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n ClassDeclaration (node) {\n if (!requireOption.ClassDeclaration) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n ClassExpression (node) {\n if (!requireOption.ClassExpression) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n FunctionDeclaration (node) {\n if (!requireOption.FunctionDeclaration) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n FunctionExpression (node) {\n if (requireOption.MethodDefinition && node.parent.type === 'MethodDefinition') {\n checkJsDoc(node, true);\n\n return;\n }\n\n if (!requireOption.FunctionExpression) {\n return;\n }\n\n if (\n ['VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration'].includes(node.parent.type) ||\n node.parent.type === 'Property' && node === node.parent.value\n ) {\n checkJsDoc(node, true);\n }\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: 'true',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"file":"requireJsdoc.js"}
|
package/dist/rules/validTypes.js
CHANGED
|
@@ -94,10 +94,13 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
94
94
|
|
|
95
95
|
const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);
|
|
96
96
|
const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);
|
|
97
|
-
const hasNameOrNamepathPosition = utils.tagMightHaveNamePosition(tag.tag) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);
|
|
98
|
-
|
|
97
|
+
const hasNameOrNamepathPosition = (utils.tagMustHaveNamePosition(tag.tag) || utils.tagMightHaveNamePosition(tag.tag)) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths); // Don't handle `param` here though it does require name as handled by
|
|
98
|
+
// `require-param-name` and `require-property-name`
|
|
99
|
+
|
|
100
|
+
const mustHaveNameOrNamepathPosition = !['param', 'arg', 'argument', 'property', 'prop'].includes(tag.tag) && utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;
|
|
99
101
|
const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && (hasTypePosition || hasNameOrNamepathPosition);
|
|
100
102
|
const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);
|
|
103
|
+
let skip;
|
|
101
104
|
|
|
102
105
|
switch (tag.tag) {
|
|
103
106
|
case 'borrows':
|
|
@@ -117,9 +120,36 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
117
120
|
break;
|
|
118
121
|
}
|
|
119
122
|
|
|
123
|
+
case 'extends':
|
|
124
|
+
case 'package':
|
|
125
|
+
case 'private':
|
|
126
|
+
case 'protected':
|
|
127
|
+
case 'public':
|
|
128
|
+
case 'static':
|
|
129
|
+
{
|
|
130
|
+
if (mode !== 'closure' && mode !== 'permissive' && tag.type) {
|
|
131
|
+
report(`@${tag.tag} should not have a bracketed type in "${mode}" mode.`, null, tag);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
skip = true;
|
|
136
|
+
}
|
|
137
|
+
// Fallthrough
|
|
138
|
+
|
|
139
|
+
case 'typedef':
|
|
140
|
+
{
|
|
141
|
+
if (!skip && mode !== 'closure' && mode !== 'permissive' && !tag.name) {
|
|
142
|
+
report(`@typedef must have a name in "${mode}" mode.`, null, tag);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
skip = true;
|
|
147
|
+
}
|
|
148
|
+
// Fallthrough
|
|
149
|
+
|
|
120
150
|
case 'interface':
|
|
121
151
|
{
|
|
122
|
-
if (mode === 'closure' && tag.name) {
|
|
152
|
+
if (!skip && mode === 'closure' && tag.name) {
|
|
123
153
|
report('@interface should not have a name in "closure" mode.', null, tag);
|
|
124
154
|
break;
|
|
125
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","settings","allowEmptyNamepaths","checkSeesForNamepaths","options","mode","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","includes","endChar","slice","startChar","charAt","validTypeParsing","type","hasTypePosition","tagMightHaveTypePosition","Boolean","mustHaveTypePosition","tagMustHaveTypePosition","hasNameOrNamepathPosition","tagMightHaveNamePosition","name","mustHaveNameOrNamepathPosition","tagMustHaveNamePosition","hasEither","tagMightHaveEitherTypeOrNamePosition","mustHaveEither","tagMustHaveEitherTypeOrNamePosition","thisNamepath","description","replace","test","thatNamepath","iterateAllJsdocs","meta","docs","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {parse} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = true,\n checkSeesForNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n if (!jsdoc.tags) {\n return;\n }\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n try {\n parse(namepath, {mode});\n } catch {\n let handled = false;\n\n if (tagName) {\n if (['memberof', 'memberof!'].includes(tagName)) {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n try {\n parse(namepath.slice(0, -1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n } else if (tagName === 'borrows') {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n try {\n parse(namepath.slice(1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type, {mode});\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);\n\n const hasNameOrNamepathPosition = utils.tagMightHaveNamePosition(tag.tag) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);\n const mustHaveNameOrNamepathPosition = utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;\n\n const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && (hasTypePosition || hasNameOrNamepathPosition);\n const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);\n\n switch (tag.tag) {\n case 'borrows': {\n const thisNamepath = tag.description.replace(asExpression, '');\n\n if (!asExpression.test(tag.description) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${tag.description}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n break;\n }\n case 'interface': {\n if (mode === 'closure' && tag.name) {\n report('@interface should not have a name in \"closure\" mode.', null, tag);\n break;\n }\n }\n\n // Fallthrough\n default: {\n if (mustHaveEither && !hasEither && !mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have either a type or namepath`, null, tag);\n\n return;\n }\n\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n } else if (mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have a type`, null, tag);\n }\n\n if (hasNameOrNamepathPosition) {\n validNamepathParsing(tag.name, tag.tag);\n } else if (mustHaveNameOrNamepathPosition) {\n report(`Tag @${tag.tag} must have a name/namepath`, null, tag);\n }\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: true,\n type: 'boolean',\n },\n checkSeesForNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","settings","allowEmptyNamepaths","checkSeesForNamepaths","options","mode","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","includes","endChar","slice","startChar","charAt","validTypeParsing","type","hasTypePosition","tagMightHaveTypePosition","Boolean","mustHaveTypePosition","tagMustHaveTypePosition","hasNameOrNamepathPosition","tagMustHaveNamePosition","tagMightHaveNamePosition","name","mustHaveNameOrNamepathPosition","hasEither","tagMightHaveEitherTypeOrNamePosition","mustHaveEither","tagMustHaveEitherTypeOrNamePosition","skip","thisNamepath","description","replace","test","thatNamepath","iterateAllJsdocs","meta","docs","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {parse} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = true,\n checkSeesForNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n if (!jsdoc.tags) {\n return;\n }\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n try {\n parse(namepath, {mode});\n } catch {\n let handled = false;\n\n if (tagName) {\n if (['memberof', 'memberof!'].includes(tagName)) {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n try {\n parse(namepath.slice(0, -1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n } else if (tagName === 'borrows') {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n try {\n parse(namepath.slice(1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type, {mode});\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);\n\n const hasNameOrNamepathPosition = (\n utils.tagMustHaveNamePosition(tag.tag) ||\n utils.tagMightHaveNamePosition(tag.tag)\n ) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);\n\n // Don't handle `param` here though it does require name as handled by\n // `require-param-name` and `require-property-name`\n const mustHaveNameOrNamepathPosition = ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;\n\n const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && (hasTypePosition || hasNameOrNamepathPosition);\n const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);\n\n let skip;\n switch (tag.tag) {\n case 'borrows': {\n const thisNamepath = tag.description.replace(asExpression, '');\n\n if (!asExpression.test(tag.description) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${tag.description}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n break;\n }\n case 'extends':\n case 'package': case 'private': case 'protected': case 'public': case 'static': {\n if (mode !== 'closure' && mode !== 'permissive' && tag.type) {\n report(`@${tag.tag} should not have a bracketed type in \"${mode}\" mode.`, null, tag);\n break;\n }\n skip = true;\n }\n\n // Fallthrough\n case 'typedef': {\n if (!skip && mode !== 'closure' && mode !== 'permissive' && !tag.name) {\n report(`@typedef must have a name in \"${mode}\" mode.`, null, tag);\n break;\n }\n skip = true;\n }\n\n // Fallthrough\n case 'interface': {\n if (!skip && mode === 'closure' && tag.name) {\n report('@interface should not have a name in \"closure\" mode.', null, tag);\n break;\n }\n }\n\n // Fallthrough\n default: {\n if (mustHaveEither && !hasEither && !mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have either a type or namepath`, null, tag);\n\n return;\n }\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n } else if (mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have a type`, null, tag);\n }\n\n if (hasNameOrNamepathPosition) {\n validNamepathParsing(tag.name, tag.tag);\n } else if (mustHaveNameOrNamepathPosition) {\n report(`Tag @${tag.tag} must have a name/namepath`, null, tag);\n }\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: true,\n type: 'boolean',\n },\n checkSeesForNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
|
package/package.json
CHANGED
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"@babel/plugin-transform-flow-strip-types": "^7.10.1",
|
|
22
22
|
"@babel/preset-env": "^7.10.3",
|
|
23
23
|
"@babel/register": "^7.10.3",
|
|
24
|
-
"@typescript-eslint/parser": "^3.
|
|
24
|
+
"@typescript-eslint/parser": "^3.4.0",
|
|
25
25
|
"babel-eslint": "^10.1.0",
|
|
26
26
|
"babel-plugin-add-module-exports": "^1.0.2",
|
|
27
27
|
"babel-plugin-istanbul": "^6.0.0",
|
|
28
28
|
"chai": "^4.2.0",
|
|
29
29
|
"cross-env": "^7.0.2",
|
|
30
|
-
"eslint": "7.3.
|
|
30
|
+
"eslint": "7.3.1",
|
|
31
31
|
"eslint-config-canonical": "^20.0.6",
|
|
32
32
|
"gitdown": "^3.1.3",
|
|
33
33
|
"glob": "^7.1.6",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"mocha": "^8.0.1",
|
|
36
36
|
"nyc": "^15.1.0",
|
|
37
37
|
"rimraf": "^3.0.2",
|
|
38
|
-
"semantic-release": "^17.
|
|
38
|
+
"semantic-release": "^17.1.1",
|
|
39
39
|
"typescript": "^3.9.5"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
@@ -87,5 +87,5 @@
|
|
|
87
87
|
"functions": 100,
|
|
88
88
|
"statements": 100
|
|
89
89
|
},
|
|
90
|
-
"version": "28.
|
|
90
|
+
"version": "28.6.1"
|
|
91
91
|
}
|