eslint-plugin-jsdoc 39.3.24 → 39.4.0
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 +173 -4
- package/dist/iterateJsdoc.js +4 -2
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/rules/requireParamDescription.js +30 -0
- package/dist/rules/requireParamDescription.js.map +1 -1
- package/dist/rules/requireParamType.js +30 -0
- package/dist/rules/requireParamType.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2788,7 +2788,8 @@ const fn = ( a, b ) => {};
|
|
|
2788
2788
|
<a name="eslint-plugin-jsdoc-rules-check-param-names"></a>
|
|
2789
2789
|
### <code>check-param-names</code>
|
|
2790
2790
|
|
|
2791
|
-
Ensures that parameter names in JSDoc
|
|
2791
|
+
Ensures that parameter names in JSDoc are matched by corresponding items in
|
|
2792
|
+
the function declaration.
|
|
2792
2793
|
|
|
2793
2794
|
<a name="user-content-eslint-plugin-jsdoc-rules-check-param-names-destructuring"></a>
|
|
2794
2795
|
<a name="eslint-plugin-jsdoc-rules-check-param-names-destructuring"></a>
|
|
@@ -14771,10 +14772,32 @@ class A {
|
|
|
14771
14772
|
|
|
14772
14773
|
Requires that each `@param` tag has a `description` value.
|
|
14773
14774
|
|
|
14775
|
+
Will exempt destructured roots and their children if
|
|
14776
|
+
`settings.exemptDestructuredRootsFromChecks` is set to `true` (e.g.,
|
|
14777
|
+
`@param {object} props` will be exempted from requiring a description given
|
|
14778
|
+
`function someFunc ({child1, child2})`).
|
|
14779
|
+
|
|
14774
14780
|
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-description-options-29"></a>
|
|
14775
14781
|
<a name="eslint-plugin-jsdoc-rules-require-param-description-options-29"></a>
|
|
14776
14782
|
#### Options
|
|
14777
14783
|
|
|
14784
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-description-options-29-setdefaultdestructuredrootdescription"></a>
|
|
14785
|
+
<a name="eslint-plugin-jsdoc-rules-require-param-description-options-29-setdefaultdestructuredrootdescription"></a>
|
|
14786
|
+
##### <code>setDefaultDestructuredRootDescription</code>
|
|
14787
|
+
|
|
14788
|
+
Whether to set a default destructured root description. For example, you may
|
|
14789
|
+
wish to avoid manually having to set the description for a `@param`
|
|
14790
|
+
corresponding to a destructured root object as it should always be the same
|
|
14791
|
+
type of object. Uses `defaultDestructuredRootDescription` for the description
|
|
14792
|
+
string. Defaults to `false`.
|
|
14793
|
+
|
|
14794
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-description-options-29-defaultdestructuredrootdescription"></a>
|
|
14795
|
+
<a name="eslint-plugin-jsdoc-rules-require-param-description-options-29-defaultdestructuredrootdescription"></a>
|
|
14796
|
+
##### <code>defaultDestructuredRootDescription</code>
|
|
14797
|
+
|
|
14798
|
+
The description string to set by default for destructured roots. Defaults to
|
|
14799
|
+
"The root object".
|
|
14800
|
+
|
|
14778
14801
|
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-description-options-29-contexts-8"></a>
|
|
14779
14802
|
<a name="eslint-plugin-jsdoc-rules-require-param-description-options-29-contexts-8"></a>
|
|
14780
14803
|
##### <code>contexts</code>
|
|
@@ -14796,7 +14819,8 @@ section of our README for more on the expected format.
|
|
|
14796
14819
|
|Tags|`param`|
|
|
14797
14820
|
|Aliases|`arg`, `argument`|
|
|
14798
14821
|
|Recommended|true|
|
|
14799
|
-
|Options|`contexts`|
|
|
14822
|
+
|Options|`setDefaultDestructuredRootDescription`, `defaultDestructuredRootDescription`, `contexts`|
|
|
14823
|
+
|Settings|`exemptDestructuredRootsFromChecks`|
|
|
14800
14824
|
|
|
14801
14825
|
The following patterns are considered problems:
|
|
14802
14826
|
|
|
@@ -14849,6 +14873,48 @@ function quux (foo) {
|
|
|
14849
14873
|
}
|
|
14850
14874
|
// Settings: {"jsdoc":{"tagNamePreference":{"param":false}}}
|
|
14851
14875
|
// Message: Unexpected tag `@param`
|
|
14876
|
+
|
|
14877
|
+
/**
|
|
14878
|
+
* @param foo
|
|
14879
|
+
*/
|
|
14880
|
+
function quux (foo) {
|
|
14881
|
+
|
|
14882
|
+
}
|
|
14883
|
+
// "jsdoc/require-param-description": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag:not([name=props]))","context":"FunctionDeclaration"}]}]
|
|
14884
|
+
// Message: Missing JSDoc @param "foo" description.
|
|
14885
|
+
|
|
14886
|
+
/**
|
|
14887
|
+
* @param {number} foo Foo description
|
|
14888
|
+
* @param {object} root
|
|
14889
|
+
* @param {boolean} baz Baz description
|
|
14890
|
+
*/
|
|
14891
|
+
function quux (foo, {bar}, baz) {
|
|
14892
|
+
|
|
14893
|
+
}
|
|
14894
|
+
// "jsdoc/require-param-description": ["error"|"warn", {"setDefaultDestructuredRootDescription":true}]
|
|
14895
|
+
// Message: Missing root description for @param.
|
|
14896
|
+
|
|
14897
|
+
/**
|
|
14898
|
+
* @param {number} foo Foo description
|
|
14899
|
+
* @param {object} root
|
|
14900
|
+
* @param {boolean} baz Baz description
|
|
14901
|
+
*/
|
|
14902
|
+
function quux (foo, {bar}, baz) {
|
|
14903
|
+
|
|
14904
|
+
}
|
|
14905
|
+
// "jsdoc/require-param-description": ["error"|"warn", {"defaultDestructuredRootDescription":"Root description","setDefaultDestructuredRootDescription":true}]
|
|
14906
|
+
// Message: Missing root description for @param.
|
|
14907
|
+
|
|
14908
|
+
/**
|
|
14909
|
+
* @param {number} foo Foo description
|
|
14910
|
+
* @param {object} root
|
|
14911
|
+
* @param {boolean} baz Baz description
|
|
14912
|
+
*/
|
|
14913
|
+
function quux (foo, {bar}, baz) {
|
|
14914
|
+
|
|
14915
|
+
}
|
|
14916
|
+
// "jsdoc/require-param-description": ["error"|"warn", {"setDefaultDestructuredRootDescription":false}]
|
|
14917
|
+
// Message: Missing JSDoc @param "root" description.
|
|
14852
14918
|
````
|
|
14853
14919
|
|
|
14854
14920
|
The following patterns are not considered problems:
|
|
@@ -14885,6 +14951,34 @@ function quux (foo) {
|
|
|
14885
14951
|
* @callback
|
|
14886
14952
|
* @param foo
|
|
14887
14953
|
*/
|
|
14954
|
+
|
|
14955
|
+
/**
|
|
14956
|
+
* @param props
|
|
14957
|
+
*/
|
|
14958
|
+
function quux (props) {
|
|
14959
|
+
|
|
14960
|
+
}
|
|
14961
|
+
// "jsdoc/require-param-description": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag:not([name=props]))","context":"FunctionDeclaration"}]}]
|
|
14962
|
+
|
|
14963
|
+
/**
|
|
14964
|
+
* @param {number} foo Foo description
|
|
14965
|
+
* @param {object} root
|
|
14966
|
+
* @param {boolean} baz Baz description
|
|
14967
|
+
*/
|
|
14968
|
+
function quux (foo, {bar}, baz) {
|
|
14969
|
+
|
|
14970
|
+
}
|
|
14971
|
+
// Settings: {"jsdoc":{"exemptDestructuredRootsFromChecks":true}}
|
|
14972
|
+
|
|
14973
|
+
/**
|
|
14974
|
+
* @param {number} foo Foo description
|
|
14975
|
+
* @param {object} root
|
|
14976
|
+
* @param {object} root.bar
|
|
14977
|
+
*/
|
|
14978
|
+
function quux (foo, {bar: {baz}}) {
|
|
14979
|
+
|
|
14980
|
+
}
|
|
14981
|
+
// Settings: {"jsdoc":{"exemptDestructuredRootsFromChecks":true}}
|
|
14888
14982
|
````
|
|
14889
14983
|
|
|
14890
14984
|
|
|
@@ -15037,10 +15131,31 @@ function example(cb) {
|
|
|
15037
15131
|
|
|
15038
15132
|
Requires that each `@param` tag has a `type` value.
|
|
15039
15133
|
|
|
15134
|
+
Will exempt destructured roots and their children if
|
|
15135
|
+
`settings.exemptDestructuredRootsFromChecks` is set to `true` (e.g.,
|
|
15136
|
+
`@param props` will be exempted from requiring a type given
|
|
15137
|
+
`function someFunc ({child1, child2})`).
|
|
15138
|
+
|
|
15040
15139
|
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-type-options-31"></a>
|
|
15041
15140
|
<a name="eslint-plugin-jsdoc-rules-require-param-type-options-31"></a>
|
|
15042
15141
|
#### Options
|
|
15043
15142
|
|
|
15143
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-type-options-31-setdefaultdestructuredroottype"></a>
|
|
15144
|
+
<a name="eslint-plugin-jsdoc-rules-require-param-type-options-31-setdefaultdestructuredroottype"></a>
|
|
15145
|
+
##### <code>setDefaultDestructuredRootType</code>
|
|
15146
|
+
|
|
15147
|
+
Whether to set a default destructured root type. For example, you may wish
|
|
15148
|
+
to avoid manually having to set the type for a `@param`
|
|
15149
|
+
corresponding to a destructured root object as it is always going to be an
|
|
15150
|
+
object. Uses `defaultDestructuredRootType` for the type string. Defaults to
|
|
15151
|
+
`false`.
|
|
15152
|
+
|
|
15153
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-type-options-31-defaultdestructuredroottype"></a>
|
|
15154
|
+
<a name="eslint-plugin-jsdoc-rules-require-param-type-options-31-defaultdestructuredroottype"></a>
|
|
15155
|
+
##### <code>defaultDestructuredRootType</code>
|
|
15156
|
+
|
|
15157
|
+
The type string to set by default for destructured roots. Defaults to "object".
|
|
15158
|
+
|
|
15044
15159
|
<a name="user-content-eslint-plugin-jsdoc-rules-require-param-type-options-31-contexts-10"></a>
|
|
15045
15160
|
<a name="eslint-plugin-jsdoc-rules-require-param-type-options-31-contexts-10"></a>
|
|
15046
15161
|
##### <code>contexts</code>
|
|
@@ -15062,7 +15177,8 @@ section of our README for more on the expected format.
|
|
|
15062
15177
|
|Tags|`param`|
|
|
15063
15178
|
|Aliases|`arg`, `argument`|
|
|
15064
15179
|
|Recommended|true|
|
|
15065
|
-
|Options|`contexts`|
|
|
15180
|
+
|Options|`setDefaultDestructuredRootType`, `defaultDestructuredRootType`, `contexts`|
|
|
15181
|
+
|Settings|`exemptDestructuredRootsFromChecks`|
|
|
15066
15182
|
|
|
15067
15183
|
The following patterns are considered problems:
|
|
15068
15184
|
|
|
@@ -15122,6 +15238,39 @@ function quux (foo) {
|
|
|
15122
15238
|
}
|
|
15123
15239
|
// Settings: {"jsdoc":{"tagNamePreference":{"param":false}}}
|
|
15124
15240
|
// Message: Unexpected tag `@param`
|
|
15241
|
+
|
|
15242
|
+
/**
|
|
15243
|
+
* @param {number} foo
|
|
15244
|
+
* @param root
|
|
15245
|
+
* @param {boolean} baz
|
|
15246
|
+
*/
|
|
15247
|
+
function quux (foo, {bar}, baz) {
|
|
15248
|
+
|
|
15249
|
+
}
|
|
15250
|
+
// "jsdoc/require-param-type": ["error"|"warn", {"setDefaultDestructuredRootType":true}]
|
|
15251
|
+
// Message: Missing root type for @param.
|
|
15252
|
+
|
|
15253
|
+
/**
|
|
15254
|
+
* @param {number} foo
|
|
15255
|
+
* @param root
|
|
15256
|
+
* @param {boolean} baz
|
|
15257
|
+
*/
|
|
15258
|
+
function quux (foo, {bar}, baz) {
|
|
15259
|
+
|
|
15260
|
+
}
|
|
15261
|
+
// "jsdoc/require-param-type": ["error"|"warn", {"defaultDestructuredRootType":"Object","setDefaultDestructuredRootType":true}]
|
|
15262
|
+
// Message: Missing root type for @param.
|
|
15263
|
+
|
|
15264
|
+
/**
|
|
15265
|
+
* @param {number} foo
|
|
15266
|
+
* @param root
|
|
15267
|
+
* @param {boolean} baz
|
|
15268
|
+
*/
|
|
15269
|
+
function quux (foo, {bar}, baz) {
|
|
15270
|
+
|
|
15271
|
+
}
|
|
15272
|
+
// "jsdoc/require-param-type": ["error"|"warn", {"setDefaultDestructuredRootType":false}]
|
|
15273
|
+
// Message: Missing JSDoc @param "root" type.
|
|
15125
15274
|
````
|
|
15126
15275
|
|
|
15127
15276
|
The following patterns are not considered problems:
|
|
@@ -15158,6 +15307,26 @@ function quux (foo) {
|
|
|
15158
15307
|
* @callback
|
|
15159
15308
|
* @param foo
|
|
15160
15309
|
*/
|
|
15310
|
+
|
|
15311
|
+
/**
|
|
15312
|
+
* @param {number} foo
|
|
15313
|
+
* @param root
|
|
15314
|
+
* @param {boolean} baz
|
|
15315
|
+
*/
|
|
15316
|
+
function quux (foo, {bar}, baz) {
|
|
15317
|
+
|
|
15318
|
+
}
|
|
15319
|
+
// Settings: {"jsdoc":{"exemptDestructuredRootsFromChecks":true}}
|
|
15320
|
+
|
|
15321
|
+
/**
|
|
15322
|
+
* @param {number} foo
|
|
15323
|
+
* @param root
|
|
15324
|
+
* @param root.bar
|
|
15325
|
+
*/
|
|
15326
|
+
function quux (foo, {bar: {baz}}) {
|
|
15327
|
+
|
|
15328
|
+
}
|
|
15329
|
+
// Settings: {"jsdoc":{"exemptDestructuredRootsFromChecks":true}}
|
|
15161
15330
|
````
|
|
15162
15331
|
|
|
15163
15332
|
|
|
@@ -15192,7 +15361,7 @@ function quux ({foo: bar, baz: bax = 5}) {
|
|
|
15192
15361
|
}
|
|
15193
15362
|
```
|
|
15194
15363
|
|
|
15195
|
-
|
|
15364
|
+
...the fixed jsdoc will be:
|
|
15196
15365
|
|
|
15197
15366
|
```js
|
|
15198
15367
|
/**
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -610,7 +610,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
610
610
|
return utils;
|
|
611
611
|
};
|
|
612
612
|
const getSettings = context => {
|
|
613
|
-
var _context$settings$jsd, _context$settings$jsd2, _context$settings$jsd3, _context$settings$jsd4, _context$settings$jsd5, _context$settings$jsd6, _context$settings$jsd7, _context$settings$jsd8, _context$settings$jsd9, _context$settings$jsd10, _context$settings$jsd11, _context$settings$jsd12;
|
|
613
|
+
var _context$settings$jsd, _context$settings$jsd2, _context$settings$jsd3, _context$settings$jsd4, _context$settings$jsd5, _context$settings$jsd6, _context$settings$jsd7, _context$settings$jsd8, _context$settings$jsd9, _context$settings$jsd10, _context$settings$jsd11, _context$settings$jsd12, _context$settings$jsd13;
|
|
614
614
|
/* eslint-disable canonical/sort-keys */
|
|
615
615
|
const settings = {
|
|
616
616
|
// All rules
|
|
@@ -630,8 +630,10 @@ const getSettings = context => {
|
|
|
630
630
|
ignoreReplacesDocs: (_context$settings$jsd9 = context.settings.jsdoc) === null || _context$settings$jsd9 === void 0 ? void 0 : _context$settings$jsd9.ignoreReplacesDocs,
|
|
631
631
|
implementsReplacesDocs: (_context$settings$jsd10 = context.settings.jsdoc) === null || _context$settings$jsd10 === void 0 ? void 0 : _context$settings$jsd10.implementsReplacesDocs,
|
|
632
632
|
augmentsExtendsReplacesDocs: (_context$settings$jsd11 = context.settings.jsdoc) === null || _context$settings$jsd11 === void 0 ? void 0 : _context$settings$jsd11.augmentsExtendsReplacesDocs,
|
|
633
|
+
// `require-param-type`, `require-param-description`
|
|
634
|
+
exemptDestructuredRootsFromChecks: (_context$settings$jsd12 = context.settings.jsdoc) === null || _context$settings$jsd12 === void 0 ? void 0 : _context$settings$jsd12.exemptDestructuredRootsFromChecks,
|
|
633
635
|
// Many rules, e.g., `check-tag-names`
|
|
634
|
-
mode: ((_context$settings$
|
|
636
|
+
mode: ((_context$settings$jsd13 = context.settings.jsdoc) === null || _context$settings$jsd13 === void 0 ? void 0 : _context$settings$jsd13.mode) ?? (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc')
|
|
635
637
|
};
|
|
636
638
|
/* eslint-enable canonical/sort-keys */
|
|
637
639
|
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","noTracking","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\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.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\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 indent,\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 ignoreReplacesDocs,\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([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\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\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 = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\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([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\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 {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].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 return parseComment(classJsdocNode, '');\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\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\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 // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\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 canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\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 if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\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/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\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: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\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 indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\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 {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\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 settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(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 {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = 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 // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\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 const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","noTracking","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\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.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\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 indent,\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 ignoreReplacesDocs,\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([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\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\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 = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\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([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\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 {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].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 return parseComment(classJsdocNode, '');\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\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\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 // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\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 canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\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 if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\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/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\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: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\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 indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\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 {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\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 settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(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 {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = 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 // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\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 const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
|
|
@@ -7,11 +7,34 @@ exports.default = void 0;
|
|
|
7
7
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
9
|
var _default = (0, _iterateJsdoc.default)(({
|
|
10
|
+
context,
|
|
10
11
|
report,
|
|
12
|
+
settings,
|
|
11
13
|
utils
|
|
12
14
|
}) => {
|
|
15
|
+
const {
|
|
16
|
+
defaultDestructuredRootDescription = 'The root object',
|
|
17
|
+
setDefaultDestructuredRootDescription = false
|
|
18
|
+
} = context.options[0] || {};
|
|
19
|
+
const functionParameterNames = utils.getFunctionParameterNames();
|
|
20
|
+
let rootCount = -1;
|
|
13
21
|
utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {
|
|
22
|
+
rootCount += jsdocParameter.name.includes('.') ? 0 : 1;
|
|
14
23
|
if (!jsdocParameter.description.trim()) {
|
|
24
|
+
if (Array.isArray(functionParameterNames[rootCount])) {
|
|
25
|
+
if (settings.exemptDestructuredRootsFromChecks) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (setDefaultDestructuredRootDescription) {
|
|
29
|
+
utils.reportJSDoc(`Missing root description for @${targetTagName}.`, jsdocParameter, () => {
|
|
30
|
+
utils.changeTag(jsdocParameter, {
|
|
31
|
+
description: defaultDestructuredRootDescription,
|
|
32
|
+
postName: ' '
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
15
38
|
report(`Missing JSDoc @${targetTagName} "${jsdocParameter.name}" description.`, null, jsdocParameter);
|
|
16
39
|
}
|
|
17
40
|
});
|
|
@@ -22,6 +45,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
22
45
|
description: 'Requires that each `@param` tag has a `description` value.',
|
|
23
46
|
url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-description'
|
|
24
47
|
},
|
|
48
|
+
fixable: 'code',
|
|
25
49
|
schema: [{
|
|
26
50
|
additionalProperties: false,
|
|
27
51
|
properties: {
|
|
@@ -43,6 +67,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
43
67
|
}]
|
|
44
68
|
},
|
|
45
69
|
type: 'array'
|
|
70
|
+
},
|
|
71
|
+
defaultDestructuredRootDescription: {
|
|
72
|
+
type: 'string'
|
|
73
|
+
},
|
|
74
|
+
setDefaultDestructuredRootDescription: {
|
|
75
|
+
type: 'boolean'
|
|
46
76
|
}
|
|
47
77
|
},
|
|
48
78
|
type: 'object'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireParamDescription.js","names":["iterateJsdoc","report","utils","forEachPreferredTag","jsdocParameter","targetTagName","description","trim","
|
|
1
|
+
{"version":3,"file":"requireParamDescription.js","names":["iterateJsdoc","context","report","settings","utils","defaultDestructuredRootDescription","setDefaultDestructuredRootDescription","options","functionParameterNames","getFunctionParameterNames","rootCount","forEachPreferredTag","jsdocParameter","targetTagName","name","includes","description","trim","Array","isArray","exemptDestructuredRootsFromChecks","reportJSDoc","changeTag","postName","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","type","comment"],"sources":["../../src/rules/requireParamDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const {\n defaultDestructuredRootDescription = 'The root object',\n setDefaultDestructuredRootDescription = false,\n } = context.options[0] || {};\n\n const functionParameterNames = utils.getFunctionParameterNames();\n\n let rootCount = -1;\n utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {\n rootCount += jsdocParameter.name.includes('.') ? 0 : 1;\n if (!jsdocParameter.description.trim()) {\n if (Array.isArray(functionParameterNames[rootCount])) {\n if (settings.exemptDestructuredRootsFromChecks) {\n return;\n }\n\n if (setDefaultDestructuredRootDescription) {\n utils.reportJSDoc(`Missing root description for @${targetTagName}.`, jsdocParameter, () => {\n utils.changeTag(jsdocParameter, {\n description: defaultDestructuredRootDescription,\n postName: ' ',\n });\n });\n return;\n }\n }\n\n report(\n `Missing JSDoc @${targetTagName} \"${jsdocParameter.name}\" description.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that each `@param` tag has a `description` value.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-description',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n defaultDestructuredRootDescription: {\n type: 'string',\n },\n setDefaultDestructuredRootDescription: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAAA,eAE5B,IAAAA,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,MAAM;EACNC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,kCAAkC,GAAG,iBAAiB;IACtDC,qCAAqC,GAAG;EAC1C,CAAC,GAAGL,OAAO,CAACM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAMC,sBAAsB,GAAGJ,KAAK,CAACK,yBAAyB,EAAE;EAEhE,IAAIC,SAAS,GAAG,CAAC,CAAC;EAClBN,KAAK,CAACO,mBAAmB,CAAC,OAAO,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACpEH,SAAS,IAAIE,cAAc,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACtD,IAAI,CAACH,cAAc,CAACI,WAAW,CAACC,IAAI,EAAE,EAAE;MACtC,IAAIC,KAAK,CAACC,OAAO,CAACX,sBAAsB,CAACE,SAAS,CAAC,CAAC,EAAE;QACpD,IAAIP,QAAQ,CAACiB,iCAAiC,EAAE;UAC9C;QACF;QAEA,IAAId,qCAAqC,EAAE;UACzCF,KAAK,CAACiB,WAAW,CAAE,iCAAgCR,aAAc,GAAE,EAAED,cAAc,EAAE,MAAM;YACzFR,KAAK,CAACkB,SAAS,CAACV,cAAc,EAAE;cAC9BI,WAAW,EAAEX,kCAAkC;cAC/CkB,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ,CAAC,CAAC;UACF;QACF;MACF;MAEArB,MAAM,CACH,kBAAiBW,aAAc,KAAID,cAAc,CAACE,IAAK,gBAAe,EACvE,IAAI,EACJF,cAAc,CACf;IACH;EACF,CAAC,CAAC;AACJ,CAAC,EAAE;EACDY,eAAe,EAAE,IAAI;EACrBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJV,WAAW,EAAE,4DAA4D;MACzEW,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACRC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEC,IAAI,EAAE;YACR,CAAC,EACD;cACEL,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVK,OAAO,EAAE;kBACPD,IAAI,EAAE;gBACR,CAAC;gBACDlC,OAAO,EAAE;kBACPkC,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACD9B,kCAAkC,EAAE;UAClC8B,IAAI,EAAE;QACR,CAAC;QACD7B,qCAAqC,EAAE;UACrC6B,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
|
|
@@ -7,11 +7,34 @@ exports.default = void 0;
|
|
|
7
7
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
9
|
var _default = (0, _iterateJsdoc.default)(({
|
|
10
|
+
context,
|
|
10
11
|
report,
|
|
12
|
+
settings,
|
|
11
13
|
utils
|
|
12
14
|
}) => {
|
|
15
|
+
const {
|
|
16
|
+
defaultDestructuredRootType = 'object',
|
|
17
|
+
setDefaultDestructuredRootType = false
|
|
18
|
+
} = context.options[0] || {};
|
|
19
|
+
const functionParameterNames = utils.getFunctionParameterNames();
|
|
20
|
+
let rootCount = -1;
|
|
13
21
|
utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {
|
|
22
|
+
rootCount += jsdocParameter.name.includes('.') ? 0 : 1;
|
|
14
23
|
if (!jsdocParameter.type) {
|
|
24
|
+
if (Array.isArray(functionParameterNames[rootCount])) {
|
|
25
|
+
if (settings.exemptDestructuredRootsFromChecks) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (setDefaultDestructuredRootType) {
|
|
29
|
+
utils.reportJSDoc(`Missing root type for @${targetTagName}.`, jsdocParameter, () => {
|
|
30
|
+
utils.changeTag(jsdocParameter, {
|
|
31
|
+
postType: ' ',
|
|
32
|
+
type: `{${defaultDestructuredRootType}}`
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
15
38
|
report(`Missing JSDoc @${targetTagName} "${jsdocParameter.name}" type.`, null, jsdocParameter);
|
|
16
39
|
}
|
|
17
40
|
});
|
|
@@ -22,6 +45,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
22
45
|
description: 'Requires that each `@param` tag has a `type` value.',
|
|
23
46
|
url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-type'
|
|
24
47
|
},
|
|
48
|
+
fixable: 'code',
|
|
25
49
|
schema: [{
|
|
26
50
|
additionalProperties: false,
|
|
27
51
|
properties: {
|
|
@@ -43,6 +67,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
43
67
|
}]
|
|
44
68
|
},
|
|
45
69
|
type: 'array'
|
|
70
|
+
},
|
|
71
|
+
defaultDestructuredRootType: {
|
|
72
|
+
type: 'string'
|
|
73
|
+
},
|
|
74
|
+
setDefaultDestructuredRootType: {
|
|
75
|
+
type: 'boolean'
|
|
46
76
|
}
|
|
47
77
|
},
|
|
48
78
|
type: 'object'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireParamType.js","names":["iterateJsdoc","report","utils","forEachPreferredTag","jsdocParameter","targetTagName","type","
|
|
1
|
+
{"version":3,"file":"requireParamType.js","names":["iterateJsdoc","context","report","settings","utils","defaultDestructuredRootType","setDefaultDestructuredRootType","options","functionParameterNames","getFunctionParameterNames","rootCount","forEachPreferredTag","jsdocParameter","targetTagName","name","includes","type","Array","isArray","exemptDestructuredRootsFromChecks","reportJSDoc","changeTag","postType","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","comment"],"sources":["../../src/rules/requireParamType.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const {\n defaultDestructuredRootType = 'object',\n setDefaultDestructuredRootType = false,\n } = context.options[0] || {};\n\n const functionParameterNames = utils.getFunctionParameterNames();\n\n let rootCount = -1;\n utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {\n rootCount += jsdocParameter.name.includes('.') ? 0 : 1;\n if (!jsdocParameter.type) {\n if (Array.isArray(functionParameterNames[rootCount])) {\n if (settings.exemptDestructuredRootsFromChecks) {\n return;\n }\n\n if (setDefaultDestructuredRootType) {\n utils.reportJSDoc(`Missing root type for @${targetTagName}.`, jsdocParameter, () => {\n utils.changeTag(jsdocParameter, {\n postType: ' ',\n type: `{${defaultDestructuredRootType}}`,\n });\n });\n return;\n }\n }\n\n report(\n `Missing JSDoc @${targetTagName} \"${jsdocParameter.name}\" type.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that each `@param` tag has a `type` value.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-type',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n defaultDestructuredRootType: {\n type: 'string',\n },\n setDefaultDestructuredRootType: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAAA,eAE5B,IAAAA,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,MAAM;EACNC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,2BAA2B,GAAG,QAAQ;IACtCC,8BAA8B,GAAG;EACnC,CAAC,GAAGL,OAAO,CAACM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAMC,sBAAsB,GAAGJ,KAAK,CAACK,yBAAyB,EAAE;EAEhE,IAAIC,SAAS,GAAG,CAAC,CAAC;EAClBN,KAAK,CAACO,mBAAmB,CAAC,OAAO,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACpEH,SAAS,IAAIE,cAAc,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACtD,IAAI,CAACH,cAAc,CAACI,IAAI,EAAE;MACxB,IAAIC,KAAK,CAACC,OAAO,CAACV,sBAAsB,CAACE,SAAS,CAAC,CAAC,EAAE;QACpD,IAAIP,QAAQ,CAACgB,iCAAiC,EAAE;UAC9C;QACF;QAEA,IAAIb,8BAA8B,EAAE;UAClCF,KAAK,CAACgB,WAAW,CAAE,0BAAyBP,aAAc,GAAE,EAAED,cAAc,EAAE,MAAM;YAClFR,KAAK,CAACiB,SAAS,CAACT,cAAc,EAAE;cAC9BU,QAAQ,EAAE,GAAG;cACbN,IAAI,EAAG,IAAGX,2BAA4B;YACxC,CAAC,CAAC;UACJ,CAAC,CAAC;UACF;QACF;MACF;MAEAH,MAAM,CACH,kBAAiBW,aAAc,KAAID,cAAc,CAACE,IAAK,SAAQ,EAChE,IAAI,EACJF,cAAc,CACf;IACH;EACF,CAAC,CAAC;AACJ,CAAC,EAAE;EACDW,eAAe,EAAE,IAAI;EACrBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,qDAAqD;MAClEC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACRC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACElB,IAAI,EAAE;YACR,CAAC,EACD;cACEc,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVI,OAAO,EAAE;kBACPnB,IAAI,EAAE;gBACR,CAAC;gBACDf,OAAO,EAAE;kBACPe,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDX,2BAA2B,EAAE;UAC3BW,IAAI,EAAE;QACR,CAAC;QACDV,8BAA8B,EAAE;UAC9BU,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "http://gajus.com"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@es-joy/jsdoccomment": "~0.33.
|
|
8
|
+
"@es-joy/jsdoccomment": "~0.33.4",
|
|
9
9
|
"comment-parser": "1.3.1",
|
|
10
10
|
"debug": "^4.3.4",
|
|
11
11
|
"escape-string-regexp": "^4.0.0",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@babel/register": "^7.18.9",
|
|
26
26
|
"@es-joy/jsdoc-eslint-parser": "^0.17.0",
|
|
27
27
|
"@hkdobrev/run-if-changed": "^0.3.1",
|
|
28
|
-
"@typescript-eslint/parser": "^5.
|
|
28
|
+
"@typescript-eslint/parser": "^5.41.0",
|
|
29
29
|
"babel-plugin-add-module-exports": "^1.0.4",
|
|
30
30
|
"babel-plugin-istanbul": "^6.1.1",
|
|
31
31
|
"camelcase": "^6.3.0",
|
|
@@ -117,5 +117,5 @@
|
|
|
117
117
|
"test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
|
|
118
118
|
"test-index": "npm run test-no-cov -- test/rules/index.js"
|
|
119
119
|
},
|
|
120
|
-
"version": "39.
|
|
120
|
+
"version": "39.4.0"
|
|
121
121
|
}
|