eslint-plugin-jsdoc 40.2.1 → 41.0.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 +91 -15
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/iterateJsdoc.js +39 -0
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/rules/checkTypes.js +26 -8
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.js +62 -0
- package/dist/rules/noBlankBlockDescriptions.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,6 +43,7 @@ JSDoc linting rules for ESLint.
|
|
|
43
43
|
* [`multiline-blocks`](#user-content-eslint-plugin-jsdoc-rules-multiline-blocks)
|
|
44
44
|
* [`newline-after-description`](#user-content-eslint-plugin-jsdoc-rules-newline-after-description)
|
|
45
45
|
* [`no-bad-blocks`](#user-content-eslint-plugin-jsdoc-rules-no-bad-blocks)
|
|
46
|
+
* [`no-blank-block-descriptions`](#user-content-eslint-plugin-jsdoc-rules-no-blank-block-descriptions)
|
|
46
47
|
* [`no-defaults`](#user-content-eslint-plugin-jsdoc-rules-no-defaults)
|
|
47
48
|
* [`no-missing-syntax`](#user-content-eslint-plugin-jsdoc-rules-no-missing-syntax)
|
|
48
49
|
* [`no-multi-asterisks`](#user-content-eslint-plugin-jsdoc-rules-no-multi-asterisks)
|
|
@@ -4492,9 +4493,9 @@ The format is as follows:
|
|
|
4492
4493
|
|
|
4493
4494
|
Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#user-content-typed).
|
|
4494
4495
|
|
|
4495
|
-
<a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-jsxtags"></a>
|
|
4496
|
-
<a name="eslint-plugin-jsdoc-rules-check-tag-names-jsxtags"></a>
|
|
4497
|
-
|
|
4496
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-options-6-jsxtags"></a>
|
|
4497
|
+
<a name="eslint-plugin-jsdoc-rules-check-tag-names-options-6-jsxtags"></a>
|
|
4498
|
+
##### <code>jsxTags</code>
|
|
4498
4499
|
|
|
4499
4500
|
If this is set to `true`, all of the following tags used to control JSX output are allowed:
|
|
4500
4501
|
|
|
@@ -4507,9 +4508,9 @@ jsxRuntime
|
|
|
4507
4508
|
|
|
4508
4509
|
For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx).
|
|
4509
4510
|
|
|
4510
|
-
<a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-typed"></a>
|
|
4511
|
-
<a name="eslint-plugin-jsdoc-rules-check-tag-names-typed"></a>
|
|
4512
|
-
|
|
4511
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-options-6-typed"></a>
|
|
4512
|
+
<a name="eslint-plugin-jsdoc-rules-check-tag-names-options-6-typed"></a>
|
|
4513
|
+
##### <code>typed</code>
|
|
4513
4514
|
|
|
4514
4515
|
If this is set to `true`, additionally checks for tag names that are redundant when using a type checker such as TypeScript.
|
|
4515
4516
|
|
|
@@ -4564,14 +4565,12 @@ static
|
|
|
4564
4565
|
this
|
|
4565
4566
|
```
|
|
4566
4567
|
|
|
4567
|
-
Additionally, for `@param` and `@return` tags, the rule will flag unnecessary type descriptions (e.g. `@param {string}`).
|
|
4568
|
-
|
|
4569
4568
|
|||
|
|
4570
4569
|
|---|---|
|
|
4571
4570
|
|Context|everywhere|
|
|
4572
4571
|
|Tags|N/A|
|
|
4573
4572
|
|Recommended|true|
|
|
4574
|
-
|Options|`definedTags`|
|
|
4573
|
+
|Options|`definedTags`, `enableFixer`, `jsxTags`, `typed`|
|
|
4575
4574
|
|Settings|`tagNamePreference`, `mode`|
|
|
4576
4575
|
|
|
4577
4576
|
The following patterns are considered problems:
|
|
@@ -5443,7 +5442,8 @@ object.
|
|
|
5443
5442
|
|
|
5444
5443
|
However, `Object.create(null)` objects are not `instanceof Object`, however, so
|
|
5445
5444
|
in the case of such a plain object we lower-case to indicate possible support
|
|
5446
|
-
for these objects. Also, nowadays, TypeScript also discourages
|
|
5445
|
+
for these objects. Also, nowadays, TypeScript also [discourages](https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html#:~:text=%E2%9D%8C%20Don't%20ever%20use,used%20appropriately%20in%20JavaScript%20code.)
|
|
5446
|
+
use of `Object`
|
|
5447
5447
|
as a lone type. However, one additional complexity is that TypeScript allows and
|
|
5448
5448
|
actually [currently requires](https://github.com/microsoft/TypeScript/issues/20555)
|
|
5449
5449
|
`Object` (with the initial upper-case) if used in the syntax
|
|
@@ -5452,8 +5452,14 @@ adhere to that which [JSDoc documents](https://jsdoc.app/tags-type.html).
|
|
|
5452
5452
|
|
|
5453
5453
|
So, for optimal compatibility with TypeScript (especially since TypeScript
|
|
5454
5454
|
tools can be used on plain JavaScript with JSDoc), we are now requiring this
|
|
5455
|
-
TypeScript approach by default (if you set
|
|
5456
|
-
TypeScript mode, the defaults will
|
|
5455
|
+
TypeScript approach by default in non-"typescript" mode (if you set
|
|
5456
|
+
`object` type `preferredTypes` in TypeScript mode, the defaults will
|
|
5457
|
+
not apply).
|
|
5458
|
+
|
|
5459
|
+
However, for "typescript" mode, a still better choice exists—using index signatures such as `{[key: string]: string}` or using a more precise
|
|
5460
|
+
shorthand object syntax (e.g., `{a: string, b: number}`). This is superior
|
|
5461
|
+
for TypeScript because the likes of `Object<string, number>` is not useable
|
|
5462
|
+
in native TypeScript syntax, even if it is allowed within JSDoc.
|
|
5457
5463
|
|
|
5458
5464
|
Basically, for primitives, we want to define the type as a primitive, because
|
|
5459
5465
|
that's what we use in 99.9% of cases. For everything else, we use the type
|
|
@@ -6133,7 +6139,7 @@ function quux (foo) {
|
|
|
6133
6139
|
|
|
6134
6140
|
}
|
|
6135
6141
|
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
6136
|
-
// Message:
|
|
6142
|
+
// Message: Use object shorthand or index signatures instead of `object`, e.g., `{[key: string]: string}`
|
|
6137
6143
|
|
|
6138
6144
|
/**
|
|
6139
6145
|
*
|
|
@@ -6415,7 +6421,7 @@ function b () {}
|
|
|
6415
6421
|
function a () {}
|
|
6416
6422
|
|
|
6417
6423
|
/**
|
|
6418
|
-
* @typedef {
|
|
6424
|
+
* @typedef {{[key: string]: number}} foo
|
|
6419
6425
|
*/
|
|
6420
6426
|
function b () {}
|
|
6421
6427
|
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
@@ -6444,7 +6450,7 @@ function quux (foo) {
|
|
|
6444
6450
|
}
|
|
6445
6451
|
|
|
6446
6452
|
/**
|
|
6447
|
-
* @param {
|
|
6453
|
+
* @param {{[key: string]: number}} foo
|
|
6448
6454
|
*/
|
|
6449
6455
|
function quux (foo) {
|
|
6450
6456
|
|
|
@@ -9227,6 +9233,76 @@ function quux (foo) {
|
|
|
9227
9233
|
````
|
|
9228
9234
|
|
|
9229
9235
|
|
|
9236
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-no-blank-block-descriptions"></a>
|
|
9237
|
+
<a name="eslint-plugin-jsdoc-rules-no-blank-block-descriptions"></a>
|
|
9238
|
+
### <code>no-blank-block-descriptions</code>
|
|
9239
|
+
|
|
9240
|
+
If tags are present, this rule will prevent empty lines in the
|
|
9241
|
+
block description.
|
|
9242
|
+
|
|
9243
|
+
If no tags are present, this rule will prevent extra empty lines
|
|
9244
|
+
in the block description.
|
|
9245
|
+
|
|
9246
|
+
|||
|
|
9247
|
+
|---|---|
|
|
9248
|
+
|Context|everywhere|
|
|
9249
|
+
|Tags|(Block description)|
|
|
9250
|
+
|Recommended|false|
|
|
9251
|
+
|Settings||
|
|
9252
|
+
|Options||
|
|
9253
|
+
|
|
9254
|
+
The following patterns are considered problems:
|
|
9255
|
+
|
|
9256
|
+
````js
|
|
9257
|
+
/**
|
|
9258
|
+
*
|
|
9259
|
+
* @param {number} x
|
|
9260
|
+
*/
|
|
9261
|
+
function functionWithClearName(x) {}
|
|
9262
|
+
// Message: There should be no blank lines in block descriptions followed by tags.
|
|
9263
|
+
|
|
9264
|
+
/**
|
|
9265
|
+
*
|
|
9266
|
+
*
|
|
9267
|
+
*/
|
|
9268
|
+
function functionWithClearName() {}
|
|
9269
|
+
// Message: There should be no extra blank lines in block descriptions not followed by tags.
|
|
9270
|
+
````
|
|
9271
|
+
|
|
9272
|
+
The following patterns are not considered problems:
|
|
9273
|
+
|
|
9274
|
+
````js
|
|
9275
|
+
/**
|
|
9276
|
+
* Non-empty description
|
|
9277
|
+
* @param {number} x
|
|
9278
|
+
*/
|
|
9279
|
+
function functionWithClearName(x) {}
|
|
9280
|
+
|
|
9281
|
+
/**
|
|
9282
|
+
* @param {number} x
|
|
9283
|
+
*/
|
|
9284
|
+
function functionWithClearName(x) {}
|
|
9285
|
+
|
|
9286
|
+
/**
|
|
9287
|
+
*
|
|
9288
|
+
*/
|
|
9289
|
+
function functionWithClearName() {}
|
|
9290
|
+
|
|
9291
|
+
/**
|
|
9292
|
+
*/
|
|
9293
|
+
function functionWithClearName() {}
|
|
9294
|
+
|
|
9295
|
+
/** */
|
|
9296
|
+
function functionWithClearName() {}
|
|
9297
|
+
|
|
9298
|
+
/** Some desc. */
|
|
9299
|
+
function functionWithClearName() {}
|
|
9300
|
+
|
|
9301
|
+
/** @someTag */
|
|
9302
|
+
function functionWithClearName() {}
|
|
9303
|
+
````
|
|
9304
|
+
|
|
9305
|
+
|
|
9230
9306
|
<a name="user-content-eslint-plugin-jsdoc-rules-no-defaults"></a>
|
|
9231
9307
|
<a name="eslint-plugin-jsdoc-rules-no-defaults"></a>
|
|
9232
9308
|
### <code>no-defaults</code>
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,7 @@ var _matchName = _interopRequireDefault(require("./rules/matchName"));
|
|
|
22
22
|
var _multilineBlocks = _interopRequireDefault(require("./rules/multilineBlocks"));
|
|
23
23
|
var _newlineAfterDescription = _interopRequireDefault(require("./rules/newlineAfterDescription"));
|
|
24
24
|
var _noBadBlocks = _interopRequireDefault(require("./rules/noBadBlocks"));
|
|
25
|
+
var _noBlankBlockDescriptions = _interopRequireDefault(require("./rules/noBlankBlockDescriptions"));
|
|
25
26
|
var _noDefaults = _interopRequireDefault(require("./rules/noDefaults"));
|
|
26
27
|
var _noMissingSyntax = _interopRequireDefault(require("./rules/noMissingSyntax"));
|
|
27
28
|
var _noMultiAsterisks = _interopRequireDefault(require("./rules/noMultiAsterisks"));
|
|
@@ -76,6 +77,7 @@ const index = {
|
|
|
76
77
|
'multiline-blocks': _multilineBlocks.default,
|
|
77
78
|
'newline-after-description': _newlineAfterDescription.default,
|
|
78
79
|
'no-bad-blocks': _noBadBlocks.default,
|
|
80
|
+
'no-blank-block-descriptions': _noBlankBlockDescriptions.default,
|
|
79
81
|
'no-defaults': _noDefaults.default,
|
|
80
82
|
'no-missing-syntax': _noMissingSyntax.default,
|
|
81
83
|
'no-multi-asterisks': _noMultiAsterisks.default,
|
|
@@ -132,6 +134,7 @@ const createRecommendedRuleset = warnOrError => {
|
|
|
132
134
|
'jsdoc/multiline-blocks': warnOrError,
|
|
133
135
|
'jsdoc/newline-after-description': warnOrError,
|
|
134
136
|
'jsdoc/no-bad-blocks': 'off',
|
|
137
|
+
'jsdoc/no-blank-block-descriptions': 'off',
|
|
135
138
|
'jsdoc/no-defaults': 'off',
|
|
136
139
|
'jsdoc/no-missing-syntax': 'off',
|
|
137
140
|
'jsdoc/no-multi-asterisks': warnOrError,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_checkAccess","_interopRequireDefault","require","_checkAlignment","_checkExamples","_checkIndentation","_checkLineAlignment","_checkParamNames","_checkPropertyNames","_checkSyntax","_checkTagNames","_checkTypes","_checkValues","_emptyTags","_implementsOnClasses","_matchDescription","_matchName","_multilineBlocks","_newlineAfterDescription","_noBadBlocks","_noDefaults","_noMissingSyntax","_noMultiAsterisks","_noRestrictedSyntax","_noTypes","_noUndefinedTypes","_requireAsteriskPrefix","_requireDescription","_requireDescriptionCompleteSentence","_requireExample","_requireFileOverview","_requireHyphenBeforeParamDescription","_requireJsdoc","_requireParam","_requireParamDescription","_requireParamName","_requireParamType","_requireProperty","_requirePropertyDescription","_requirePropertyName","_requirePropertyType","_requireReturns","_requireReturnsCheck","_requireReturnsDescription","_requireReturnsType","_requireThrows","_requireYields","_requireYieldsCheck","_sortTags","_tagLines","_textEscaping","_validTypes","obj","__esModule","default","index","configs","rules","checkAccess","checkAlignment","checkExamples","checkIndentation","checkLineAlignment","checkParamNames","checkPropertyNames","checkSyntax","checkTagNames","checkTypes","checkValues","emptyTags","implementsOnClasses","matchDescription","matchName","multilineBlocks","newlineAfterDescription","noBadBlocks","noDefaults","noMissingSyntax","noMultiAsterisks","noRestrictedSyntax","noTypes","noUndefinedTypes","requireAsteriskPrefix","requireDescription","requireDescriptionCompleteSentence","requireExample","requireFileOverview","requireHyphenBeforeParamDescription","requireJsdoc","requireParam","requireParamDescription","requireParamName","requireParamType","requireProperty","requirePropertyDescription","requirePropertyName","requirePropertyType","requireReturns","requireReturnsCheck","requireReturnsDescription","requireReturnsType","requireThrows","requireYields","requireYieldsCheck","sortTags","tagLines","textEscaping","validTypes","createRecommendedRuleset","warnOrError","plugins","createRecommendedTypeScriptRuleset","ruleset","typed","recommended","_default","exports","module"],"sources":["../src/index.js"],"sourcesContent":["import checkAccess from './rules/checkAccess';\nimport checkAlignment from './rules/checkAlignment';\nimport checkExamples from './rules/checkExamples';\nimport checkIndentation from './rules/checkIndentation';\nimport checkLineAlignment from './rules/checkLineAlignment';\nimport checkParamNames from './rules/checkParamNames';\nimport checkPropertyNames from './rules/checkPropertyNames';\nimport checkSyntax from './rules/checkSyntax';\nimport checkTagNames from './rules/checkTagNames';\nimport checkTypes from './rules/checkTypes';\nimport checkValues from './rules/checkValues';\nimport emptyTags from './rules/emptyTags';\nimport implementsOnClasses from './rules/implementsOnClasses';\nimport matchDescription from './rules/matchDescription';\nimport matchName from './rules/matchName';\nimport multilineBlocks from './rules/multilineBlocks';\nimport newlineAfterDescription from './rules/newlineAfterDescription';\nimport noBadBlocks from './rules/noBadBlocks';\nimport noDefaults from './rules/noDefaults';\nimport noMissingSyntax from './rules/noMissingSyntax';\nimport noMultiAsterisks from './rules/noMultiAsterisks';\nimport noRestrictedSyntax from './rules/noRestrictedSyntax';\nimport noTypes from './rules/noTypes';\nimport noUndefinedTypes from './rules/noUndefinedTypes';\nimport requireAsteriskPrefix from './rules/requireAsteriskPrefix';\nimport requireDescription from './rules/requireDescription';\nimport requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence';\nimport requireExample from './rules/requireExample';\nimport requireFileOverview from './rules/requireFileOverview';\nimport requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription';\nimport requireJsdoc from './rules/requireJsdoc';\nimport requireParam from './rules/requireParam';\nimport requireParamDescription from './rules/requireParamDescription';\nimport requireParamName from './rules/requireParamName';\nimport requireParamType from './rules/requireParamType';\nimport requireProperty from './rules/requireProperty';\nimport requirePropertyDescription from './rules/requirePropertyDescription';\nimport requirePropertyName from './rules/requirePropertyName';\nimport requirePropertyType from './rules/requirePropertyType';\nimport requireReturns from './rules/requireReturns';\nimport requireReturnsCheck from './rules/requireReturnsCheck';\nimport requireReturnsDescription from './rules/requireReturnsDescription';\nimport requireReturnsType from './rules/requireReturnsType';\nimport requireThrows from './rules/requireThrows';\nimport requireYields from './rules/requireYields';\nimport requireYieldsCheck from './rules/requireYieldsCheck';\nimport sortTags from './rules/sortTags';\nimport tagLines from './rules/tagLines';\nimport textEscaping from './rules/textEscaping';\nimport validTypes from './rules/validTypes';\n\nconst index = {\n configs: {},\n rules: {\n 'check-access': checkAccess,\n 'check-alignment': checkAlignment,\n 'check-examples': checkExamples,\n 'check-indentation': checkIndentation,\n 'check-line-alignment': checkLineAlignment,\n 'check-param-names': checkParamNames,\n 'check-property-names': checkPropertyNames,\n 'check-syntax': checkSyntax,\n 'check-tag-names': checkTagNames,\n 'check-types': checkTypes,\n 'check-values': checkValues,\n 'empty-tags': emptyTags,\n 'implements-on-classes': implementsOnClasses,\n 'match-description': matchDescription,\n 'match-name': matchName,\n 'multiline-blocks': multilineBlocks,\n 'newline-after-description': newlineAfterDescription,\n 'no-bad-blocks': noBadBlocks,\n 'no-defaults': noDefaults,\n 'no-missing-syntax': noMissingSyntax,\n 'no-multi-asterisks': noMultiAsterisks,\n 'no-restricted-syntax': noRestrictedSyntax,\n 'no-types': noTypes,\n 'no-undefined-types': noUndefinedTypes,\n 'require-asterisk-prefix': requireAsteriskPrefix,\n 'require-description': requireDescription,\n 'require-description-complete-sentence': requireDescriptionCompleteSentence,\n 'require-example': requireExample,\n 'require-file-overview': requireFileOverview,\n 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription,\n 'require-jsdoc': requireJsdoc,\n 'require-param': requireParam,\n 'require-param-description': requireParamDescription,\n 'require-param-name': requireParamName,\n 'require-param-type': requireParamType,\n 'require-property': requireProperty,\n 'require-property-description': requirePropertyDescription,\n 'require-property-name': requirePropertyName,\n 'require-property-type': requirePropertyType,\n 'require-returns': requireReturns,\n 'require-returns-check': requireReturnsCheck,\n 'require-returns-description': requireReturnsDescription,\n 'require-returns-type': requireReturnsType,\n 'require-throws': requireThrows,\n 'require-yields': requireYields,\n 'require-yields-check': requireYieldsCheck,\n 'sort-tags': sortTags,\n 'tag-lines': tagLines,\n 'text-escaping': textEscaping,\n 'valid-types': validTypes,\n },\n};\n\nconst createRecommendedRuleset = (warnOrError) => {\n return {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': warnOrError,\n 'jsdoc/check-alignment': warnOrError,\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': warnOrError,\n 'jsdoc/check-property-names': warnOrError,\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': warnOrError,\n 'jsdoc/check-types': warnOrError,\n 'jsdoc/check-values': warnOrError,\n 'jsdoc/empty-tags': warnOrError,\n 'jsdoc/implements-on-classes': warnOrError,\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': warnOrError,\n 'jsdoc/newline-after-description': warnOrError,\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': warnOrError,\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': warnOrError,\n 'jsdoc/require-asterisk-prefix': 'off',\n 'jsdoc/require-description': 'off',\n 'jsdoc/require-description-complete-sentence': 'off',\n 'jsdoc/require-example': 'off',\n 'jsdoc/require-file-overview': 'off',\n 'jsdoc/require-hyphen-before-param-description': 'off',\n 'jsdoc/require-jsdoc': warnOrError,\n 'jsdoc/require-param': warnOrError,\n 'jsdoc/require-param-description': warnOrError,\n 'jsdoc/require-param-name': warnOrError,\n 'jsdoc/require-param-type': warnOrError,\n 'jsdoc/require-property': warnOrError,\n 'jsdoc/require-property-description': warnOrError,\n 'jsdoc/require-property-name': warnOrError,\n 'jsdoc/require-property-type': warnOrError,\n 'jsdoc/require-returns': warnOrError,\n 'jsdoc/require-returns-check': warnOrError,\n 'jsdoc/require-returns-description': warnOrError,\n 'jsdoc/require-returns-type': warnOrError,\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': warnOrError,\n 'jsdoc/require-yields-check': warnOrError,\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': warnOrError,\n 'jsdoc/text-escaping': 'off',\n 'jsdoc/valid-types': warnOrError,\n },\n };\n};\n\nconst createRecommendedTypeScriptRuleset = (warnOrError) => {\n const ruleset = createRecommendedRuleset(warnOrError);\n\n return {\n ...ruleset,\n rules: {\n ...ruleset.rules,\n /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */\n 'jsdoc/check-tag-names': [\n warnOrError, {\n typed: true,\n },\n ],\n 'jsdoc/no-types': warnOrError,\n 'jsdoc/require-param-type': 'off',\n 'jsdoc/require-property-type': 'off',\n 'jsdoc/require-returns-type': 'off',\n /* eslint-enable indent */\n },\n };\n};\n\nindex.configs.recommended = createRecommendedRuleset('warn');\nindex.configs['recommended-error'] = createRecommendedRuleset('error');\nindex.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');\nindex.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');\n\nexport default index;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_checkAccess","_interopRequireDefault","require","_checkAlignment","_checkExamples","_checkIndentation","_checkLineAlignment","_checkParamNames","_checkPropertyNames","_checkSyntax","_checkTagNames","_checkTypes","_checkValues","_emptyTags","_implementsOnClasses","_matchDescription","_matchName","_multilineBlocks","_newlineAfterDescription","_noBadBlocks","_noBlankBlockDescriptions","_noDefaults","_noMissingSyntax","_noMultiAsterisks","_noRestrictedSyntax","_noTypes","_noUndefinedTypes","_requireAsteriskPrefix","_requireDescription","_requireDescriptionCompleteSentence","_requireExample","_requireFileOverview","_requireHyphenBeforeParamDescription","_requireJsdoc","_requireParam","_requireParamDescription","_requireParamName","_requireParamType","_requireProperty","_requirePropertyDescription","_requirePropertyName","_requirePropertyType","_requireReturns","_requireReturnsCheck","_requireReturnsDescription","_requireReturnsType","_requireThrows","_requireYields","_requireYieldsCheck","_sortTags","_tagLines","_textEscaping","_validTypes","obj","__esModule","default","index","configs","rules","checkAccess","checkAlignment","checkExamples","checkIndentation","checkLineAlignment","checkParamNames","checkPropertyNames","checkSyntax","checkTagNames","checkTypes","checkValues","emptyTags","implementsOnClasses","matchDescription","matchName","multilineBlocks","newlineAfterDescription","noBadBlocks","noBlankBlockDescriptions","noDefaults","noMissingSyntax","noMultiAsterisks","noRestrictedSyntax","noTypes","noUndefinedTypes","requireAsteriskPrefix","requireDescription","requireDescriptionCompleteSentence","requireExample","requireFileOverview","requireHyphenBeforeParamDescription","requireJsdoc","requireParam","requireParamDescription","requireParamName","requireParamType","requireProperty","requirePropertyDescription","requirePropertyName","requirePropertyType","requireReturns","requireReturnsCheck","requireReturnsDescription","requireReturnsType","requireThrows","requireYields","requireYieldsCheck","sortTags","tagLines","textEscaping","validTypes","createRecommendedRuleset","warnOrError","plugins","createRecommendedTypeScriptRuleset","ruleset","typed","recommended","_default","exports","module"],"sources":["../src/index.js"],"sourcesContent":["import checkAccess from './rules/checkAccess';\nimport checkAlignment from './rules/checkAlignment';\nimport checkExamples from './rules/checkExamples';\nimport checkIndentation from './rules/checkIndentation';\nimport checkLineAlignment from './rules/checkLineAlignment';\nimport checkParamNames from './rules/checkParamNames';\nimport checkPropertyNames from './rules/checkPropertyNames';\nimport checkSyntax from './rules/checkSyntax';\nimport checkTagNames from './rules/checkTagNames';\nimport checkTypes from './rules/checkTypes';\nimport checkValues from './rules/checkValues';\nimport emptyTags from './rules/emptyTags';\nimport implementsOnClasses from './rules/implementsOnClasses';\nimport matchDescription from './rules/matchDescription';\nimport matchName from './rules/matchName';\nimport multilineBlocks from './rules/multilineBlocks';\nimport newlineAfterDescription from './rules/newlineAfterDescription';\nimport noBadBlocks from './rules/noBadBlocks';\nimport noBlankBlockDescriptions from './rules/noBlankBlockDescriptions';\nimport noDefaults from './rules/noDefaults';\nimport noMissingSyntax from './rules/noMissingSyntax';\nimport noMultiAsterisks from './rules/noMultiAsterisks';\nimport noRestrictedSyntax from './rules/noRestrictedSyntax';\nimport noTypes from './rules/noTypes';\nimport noUndefinedTypes from './rules/noUndefinedTypes';\nimport requireAsteriskPrefix from './rules/requireAsteriskPrefix';\nimport requireDescription from './rules/requireDescription';\nimport requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence';\nimport requireExample from './rules/requireExample';\nimport requireFileOverview from './rules/requireFileOverview';\nimport requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription';\nimport requireJsdoc from './rules/requireJsdoc';\nimport requireParam from './rules/requireParam';\nimport requireParamDescription from './rules/requireParamDescription';\nimport requireParamName from './rules/requireParamName';\nimport requireParamType from './rules/requireParamType';\nimport requireProperty from './rules/requireProperty';\nimport requirePropertyDescription from './rules/requirePropertyDescription';\nimport requirePropertyName from './rules/requirePropertyName';\nimport requirePropertyType from './rules/requirePropertyType';\nimport requireReturns from './rules/requireReturns';\nimport requireReturnsCheck from './rules/requireReturnsCheck';\nimport requireReturnsDescription from './rules/requireReturnsDescription';\nimport requireReturnsType from './rules/requireReturnsType';\nimport requireThrows from './rules/requireThrows';\nimport requireYields from './rules/requireYields';\nimport requireYieldsCheck from './rules/requireYieldsCheck';\nimport sortTags from './rules/sortTags';\nimport tagLines from './rules/tagLines';\nimport textEscaping from './rules/textEscaping';\nimport validTypes from './rules/validTypes';\n\nconst index = {\n configs: {},\n rules: {\n 'check-access': checkAccess,\n 'check-alignment': checkAlignment,\n 'check-examples': checkExamples,\n 'check-indentation': checkIndentation,\n 'check-line-alignment': checkLineAlignment,\n 'check-param-names': checkParamNames,\n 'check-property-names': checkPropertyNames,\n 'check-syntax': checkSyntax,\n 'check-tag-names': checkTagNames,\n 'check-types': checkTypes,\n 'check-values': checkValues,\n 'empty-tags': emptyTags,\n 'implements-on-classes': implementsOnClasses,\n 'match-description': matchDescription,\n 'match-name': matchName,\n 'multiline-blocks': multilineBlocks,\n 'newline-after-description': newlineAfterDescription,\n 'no-bad-blocks': noBadBlocks,\n 'no-blank-block-descriptions': noBlankBlockDescriptions,\n 'no-defaults': noDefaults,\n 'no-missing-syntax': noMissingSyntax,\n 'no-multi-asterisks': noMultiAsterisks,\n 'no-restricted-syntax': noRestrictedSyntax,\n 'no-types': noTypes,\n 'no-undefined-types': noUndefinedTypes,\n 'require-asterisk-prefix': requireAsteriskPrefix,\n 'require-description': requireDescription,\n 'require-description-complete-sentence': requireDescriptionCompleteSentence,\n 'require-example': requireExample,\n 'require-file-overview': requireFileOverview,\n 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription,\n 'require-jsdoc': requireJsdoc,\n 'require-param': requireParam,\n 'require-param-description': requireParamDescription,\n 'require-param-name': requireParamName,\n 'require-param-type': requireParamType,\n 'require-property': requireProperty,\n 'require-property-description': requirePropertyDescription,\n 'require-property-name': requirePropertyName,\n 'require-property-type': requirePropertyType,\n 'require-returns': requireReturns,\n 'require-returns-check': requireReturnsCheck,\n 'require-returns-description': requireReturnsDescription,\n 'require-returns-type': requireReturnsType,\n 'require-throws': requireThrows,\n 'require-yields': requireYields,\n 'require-yields-check': requireYieldsCheck,\n 'sort-tags': sortTags,\n 'tag-lines': tagLines,\n 'text-escaping': textEscaping,\n 'valid-types': validTypes,\n },\n};\n\nconst createRecommendedRuleset = (warnOrError) => {\n return {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': warnOrError,\n 'jsdoc/check-alignment': warnOrError,\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': warnOrError,\n 'jsdoc/check-property-names': warnOrError,\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': warnOrError,\n 'jsdoc/check-types': warnOrError,\n 'jsdoc/check-values': warnOrError,\n 'jsdoc/empty-tags': warnOrError,\n 'jsdoc/implements-on-classes': warnOrError,\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': warnOrError,\n 'jsdoc/newline-after-description': warnOrError,\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-blank-block-descriptions': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': warnOrError,\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': warnOrError,\n 'jsdoc/require-asterisk-prefix': 'off',\n 'jsdoc/require-description': 'off',\n 'jsdoc/require-description-complete-sentence': 'off',\n 'jsdoc/require-example': 'off',\n 'jsdoc/require-file-overview': 'off',\n 'jsdoc/require-hyphen-before-param-description': 'off',\n 'jsdoc/require-jsdoc': warnOrError,\n 'jsdoc/require-param': warnOrError,\n 'jsdoc/require-param-description': warnOrError,\n 'jsdoc/require-param-name': warnOrError,\n 'jsdoc/require-param-type': warnOrError,\n 'jsdoc/require-property': warnOrError,\n 'jsdoc/require-property-description': warnOrError,\n 'jsdoc/require-property-name': warnOrError,\n 'jsdoc/require-property-type': warnOrError,\n 'jsdoc/require-returns': warnOrError,\n 'jsdoc/require-returns-check': warnOrError,\n 'jsdoc/require-returns-description': warnOrError,\n 'jsdoc/require-returns-type': warnOrError,\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': warnOrError,\n 'jsdoc/require-yields-check': warnOrError,\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': warnOrError,\n 'jsdoc/text-escaping': 'off',\n 'jsdoc/valid-types': warnOrError,\n },\n };\n};\n\nconst createRecommendedTypeScriptRuleset = (warnOrError) => {\n const ruleset = createRecommendedRuleset(warnOrError);\n\n return {\n ...ruleset,\n rules: {\n ...ruleset.rules,\n /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */\n 'jsdoc/check-tag-names': [\n warnOrError, {\n typed: true,\n },\n ],\n 'jsdoc/no-types': warnOrError,\n 'jsdoc/require-param-type': 'off',\n 'jsdoc/require-property-type': 'off',\n 'jsdoc/require-returns-type': 'off',\n /* eslint-enable indent */\n },\n };\n};\n\nindex.configs.recommended = createRecommendedRuleset('warn');\nindex.configs['recommended-error'] = createRecommendedRuleset('error');\nindex.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');\nindex.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');\n\nexport default index;\n"],"mappings":"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"}
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -198,6 +198,45 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
198
198
|
lastDescriptionLine
|
|
199
199
|
};
|
|
200
200
|
};
|
|
201
|
+
utils.setBlockDescription = setter => {
|
|
202
|
+
const descLines = [];
|
|
203
|
+
let startIdx;
|
|
204
|
+
let endIdx;
|
|
205
|
+
let info;
|
|
206
|
+
jsdoc.source.some(({
|
|
207
|
+
tokens: {
|
|
208
|
+
description,
|
|
209
|
+
start,
|
|
210
|
+
delimiter,
|
|
211
|
+
postDelimiter,
|
|
212
|
+
tag,
|
|
213
|
+
end
|
|
214
|
+
}
|
|
215
|
+
}, idx) => {
|
|
216
|
+
if (delimiter === '/**') {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
if (startIdx === undefined) {
|
|
220
|
+
startIdx = idx;
|
|
221
|
+
info = {
|
|
222
|
+
delimiter,
|
|
223
|
+
postDelimiter,
|
|
224
|
+
start
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
if (tag || end) {
|
|
228
|
+
endIdx = idx;
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
descLines.push(description);
|
|
232
|
+
return false;
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
/* istanbul ignore else -- Won't be called if missing */
|
|
236
|
+
if (descLines.length) {
|
|
237
|
+
jsdoc.source.splice(startIdx, endIdx - startIdx, ...setter(info, seedTokens, descLines));
|
|
238
|
+
}
|
|
239
|
+
};
|
|
201
240
|
utils.setDescriptionLines = (matcher, setter) => {
|
|
202
241
|
let finalIdx = 0;
|
|
203
242
|
jsdoc.source.some(({
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.js","names":["_jsdoccomment","require","_commentParser","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","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","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","length","setDescriptionLines","changeTag","src","entries","setTag","number","delimiter","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","splice","addTag","targetTagName","_jsdoc$tags","_jsdoc$tags$source$","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","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","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","_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","_context$parserPath","_context$languageOpti","_context$languageOpti2","_context$languageOpti3","_context$languageOpti4","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","languageOptions","parser","contexts","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","comment","selector","lastComment","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","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 if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\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, returnArray) => {\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 returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 if (!tag && description) {\n descriptions.push(description);\n }\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 descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\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 }) => {\n return number === srcNumber;\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: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\n if (!removeEmptyBlock && (end || delimiter === '/**')) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[item] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset);\n }\n\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.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(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') ||\n context.languageOptions?.parser?.meta?.name?.includes('typescript') ?\n 'typescript' : 'jsdoc'),\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\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 settings,\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, ruleConfig.nonGlobalSettings ? {} : settings);\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 settings,\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":["_jsdoccomment","require","_commentParser","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","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","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","_jsdoc$tags$source$","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","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","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","_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","_context$parserPath","_context$languageOpti","_context$languageOpti2","_context$languageOpti3","_context$languageOpti4","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","languageOptions","parser","contexts","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","comment","selector","lastComment","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","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 if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\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, returnArray) => {\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 returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 if (!tag && description) {\n descriptions.push(description);\n }\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 descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setBlockDescription = (setter) => {\n const descLines = [];\n let startIdx;\n let endIdx;\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n startIdx, endIdx - startIdx, ...setter(info, seedTokens, descLines),\n );\n }\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\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 }) => {\n return number === srcNumber;\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: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\n if (!removeEmptyBlock && (end || delimiter === '/**')) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[item] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset);\n }\n\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.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(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') ||\n context.languageOptions?.parser?.meta?.name?.includes('typescript') ?\n 'typescript' : 'jsdoc'),\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\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 settings,\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, ruleConfig.nonGlobalSettings ? {} : settings);\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 settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
|
package/dist/rules/checkTypes.js
CHANGED
|
@@ -57,6 +57,9 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent
|
|
|
57
57
|
node.value = typeNodeName;
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
|
+
const getMessage = upperCase => {
|
|
61
|
+
return 'Use object shorthand or index signatures instead of ' + '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';
|
|
62
|
+
};
|
|
60
63
|
var _default = (0, _iterateJsdoc.default)(({
|
|
61
64
|
jsdocNode,
|
|
62
65
|
sourceCode,
|
|
@@ -74,13 +77,28 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
74
77
|
mode
|
|
75
78
|
} = settings;
|
|
76
79
|
const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal);
|
|
80
|
+
const info = {
|
|
81
|
+
message: getMessage(),
|
|
82
|
+
replacement: false
|
|
83
|
+
};
|
|
84
|
+
const infoUC = {
|
|
85
|
+
message: getMessage(true),
|
|
86
|
+
replacement: false
|
|
87
|
+
};
|
|
88
|
+
const typeToInject = mode === 'typescript' ? {
|
|
89
|
+
Object: 'object',
|
|
90
|
+
'object.<>': info,
|
|
91
|
+
'Object.<>': infoUC,
|
|
92
|
+
'object<>': info,
|
|
93
|
+
'Object<>': infoUC
|
|
94
|
+
} : {
|
|
95
|
+
Object: 'object',
|
|
96
|
+
'object.<>': 'Object<>',
|
|
97
|
+
'Object.<>': 'Object<>',
|
|
98
|
+
'object<>': 'Object<>'
|
|
99
|
+
};
|
|
77
100
|
const preferredTypes = {
|
|
78
|
-
...(injectObjectPreferredTypes ? {
|
|
79
|
-
Object: 'object',
|
|
80
|
-
'object.<>': 'Object<>',
|
|
81
|
-
'Object.<>': 'Object<>',
|
|
82
|
-
'object<>': 'Object<>'
|
|
83
|
-
} : {}),
|
|
101
|
+
...(injectObjectPreferredTypes ? typeToInject : {}),
|
|
84
102
|
...preferredTypesOriginal
|
|
85
103
|
};
|
|
86
104
|
const {
|
|
@@ -257,7 +275,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
257
275
|
const fix = fixer => {
|
|
258
276
|
return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
|
|
259
277
|
};
|
|
260
|
-
for (const [badType, preferredType = '',
|
|
278
|
+
for (const [badType, preferredType = '', msg] of invalidTypes) {
|
|
261
279
|
const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : '';
|
|
262
280
|
if (exemptTagContexts.some(({
|
|
263
281
|
tag,
|
|
@@ -267,7 +285,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
267
285
|
})) {
|
|
268
286
|
continue;
|
|
269
287
|
}
|
|
270
|
-
report(
|
|
288
|
+
report(msg || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? '; ' : '.') + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), preferredType ? fix : null, jsdocTag, msg ? {
|
|
271
289
|
tagName,
|
|
272
290
|
tagValue
|
|
273
291
|
} : null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","_parentNode$meta","bracketEnd","endsWith","value","replace","_default","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","_parentNode$meta2","_parentNode$meta3","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","_parentNode$elements","_parentNode$left","_parentNode$left2","elements","left","toLowerCase","push","getInvalidTypes","tagName","nameInTag","idx","types","preferredSetting","nextItem","skipRootChecking","name","startsWith","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf","exports","module"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta?.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n const preferredTypes = {\n ...injectObjectPreferredTypes ? {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n } : {},\n ...preferredTypesOriginal,\n };\n\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property && parentNode.type === 'JsdocTypeGeneric') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements?.length && (\n parentNode?.left?.type === 'JsdocTypeName' &&\n parentNode?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} nameInTag\n * @param {number} idx\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (preferredSetting && typeof preferredSetting === 'object') {\n const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];\n\n if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {\n preferred = preferredSetting.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting.message,\n ]);\n }\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const [\n idx,\n jsdocTag,\n ] of jsdocTagsWithPossibleType.entries()) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const {\n tag: tagName,\n name: nameInTag,\n } = jsdocTag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","_parentNode$meta","bracketEnd","endsWith","value","replace","getMessage","upperCase","_default","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","info","message","replacement","infoUC","typeToInject","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","_parentNode$meta2","_parentNode$meta3","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","_parentNode$elements","_parentNode$left","_parentNode$left2","elements","left","toLowerCase","push","getInvalidTypes","tagName","nameInTag","idx","types","preferredSetting","nextItem","skipRootChecking","name","startsWith","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","msg","tagValue","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf","exports","module"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta?.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nconst getMessage = (upperCase) => {\n return 'Use object shorthand or index signatures instead of ' +\n '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n const info = {\n message: getMessage(),\n replacement: false,\n };\n\n const infoUC = {\n message: getMessage(true),\n replacement: false,\n };\n\n const typeToInject = mode === 'typescript' ?\n {\n Object: 'object',\n 'object.<>': info,\n 'Object.<>': infoUC,\n 'object<>': info,\n 'Object<>': infoUC,\n } :\n {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n };\n\n const preferredTypes = {\n ...injectObjectPreferredTypes ?\n typeToInject :\n {},\n ...preferredTypesOriginal,\n };\n\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property && parentNode.type === 'JsdocTypeGeneric') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements?.length && (\n parentNode?.left?.type === 'JsdocTypeName' &&\n parentNode?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} nameInTag\n * @param {number} idx\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (preferredSetting && typeof preferredSetting === 'object') {\n const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];\n\n if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {\n preferred = preferredSetting.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting.message,\n ]);\n }\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const [\n idx,\n jsdocTag,\n ] of jsdocTagsWithPossibleType.entries()) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const {\n tag: tagName,\n name: nameInTag,\n } = jsdocTag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n msg,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n msg ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n msg ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
const anyWhitespaceLines = /^\s*$/u;
|
|
10
|
+
const atLeastTwoLinesWhitespace = /^[ \t]*\n[ \t]*\n\s*$/u;
|
|
11
|
+
var _default = (0, _iterateJsdoc.default)(({
|
|
12
|
+
jsdoc,
|
|
13
|
+
utils
|
|
14
|
+
}) => {
|
|
15
|
+
const {
|
|
16
|
+
description,
|
|
17
|
+
descriptions,
|
|
18
|
+
lastDescriptionLine
|
|
19
|
+
} = utils.getDescription();
|
|
20
|
+
const regex = jsdoc.tags.length ? anyWhitespaceLines : atLeastTwoLinesWhitespace;
|
|
21
|
+
if (descriptions.length && regex.test(description)) {
|
|
22
|
+
if (jsdoc.tags.length) {
|
|
23
|
+
utils.reportJSDoc('There should be no blank lines in block descriptions followed by tags.', {
|
|
24
|
+
line: lastDescriptionLine
|
|
25
|
+
}, () => {
|
|
26
|
+
utils.setBlockDescription(() => {
|
|
27
|
+
// Remove all lines
|
|
28
|
+
return [];
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
} else {
|
|
32
|
+
utils.reportJSDoc('There should be no extra blank lines in block descriptions not followed by tags.', {
|
|
33
|
+
line: lastDescriptionLine
|
|
34
|
+
}, () => {
|
|
35
|
+
utils.setBlockDescription((info, seedTokens) => {
|
|
36
|
+
return [
|
|
37
|
+
// Keep the starting line
|
|
38
|
+
{
|
|
39
|
+
tokens: seedTokens({
|
|
40
|
+
...info,
|
|
41
|
+
description: ''
|
|
42
|
+
})
|
|
43
|
+
}];
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
iterateAllJsdocs: true,
|
|
50
|
+
meta: {
|
|
51
|
+
docs: {
|
|
52
|
+
description: 'Detects and removes extra lines of a blank block description',
|
|
53
|
+
url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-blank-block-descriptions'
|
|
54
|
+
},
|
|
55
|
+
fixable: 'whitespace',
|
|
56
|
+
schema: [],
|
|
57
|
+
type: 'layout'
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
exports.default = _default;
|
|
61
|
+
module.exports = exports.default;
|
|
62
|
+
//# sourceMappingURL=noBlankBlockDescriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noBlankBlockDescriptions.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","anyWhitespaceLines","atLeastTwoLinesWhitespace","_default","iterateJsdoc","jsdoc","utils","description","descriptions","lastDescriptionLine","getDescription","regex","tags","length","test","reportJSDoc","line","setBlockDescription","info","seedTokens","tokens","iterateAllJsdocs","meta","docs","url","fixable","schema","type","exports","module"],"sources":["../../src/rules/noBlankBlockDescriptions.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst anyWhitespaceLines = /^\\s*$/u;\nconst atLeastTwoLinesWhitespace = /^[ \\t]*\\n[ \\t]*\\n\\s*$/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n utils,\n}) => {\n const {\n description,\n descriptions,\n lastDescriptionLine,\n } = utils.getDescription();\n\n const regex = jsdoc.tags.length ?\n anyWhitespaceLines :\n atLeastTwoLinesWhitespace;\n\n if (descriptions.length && regex.test(description)) {\n if (jsdoc.tags.length) {\n utils.reportJSDoc(\n 'There should be no blank lines in block descriptions followed by tags.',\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription(() => {\n // Remove all lines\n return [];\n });\n },\n );\n } else {\n utils.reportJSDoc(\n 'There should be no extra blank lines in block descriptions not followed by tags.',\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens) => {\n return [\n // Keep the starting line\n {\n tokens: seedTokens({\n ...info,\n description: '',\n }),\n },\n ];\n });\n },\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Detects and removes extra lines of a blank block description',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-blank-block-descriptions',\n },\n fixable: 'whitespace',\n schema: [],\n type: 'layout',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C,MAAMG,kBAAkB,GAAG,QAAQ;AACnC,MAAMC,yBAAyB,GAAG,wBAAwB;AAAC,IAAAC,QAAA,GAE5C,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,WAAW;IACXC,YAAY;IACZC;EACF,CAAC,GAAGH,KAAK,CAACI,cAAc,EAAE;EAE1B,MAAMC,KAAK,GAAGN,KAAK,CAACO,IAAI,CAACC,MAAM,GAC7BZ,kBAAkB,GAClBC,yBAAyB;EAE3B,IAAIM,YAAY,CAACK,MAAM,IAAIF,KAAK,CAACG,IAAI,CAACP,WAAW,CAAC,EAAE;IAClD,IAAIF,KAAK,CAACO,IAAI,CAACC,MAAM,EAAE;MACrBP,KAAK,CAACS,WAAW,CACf,wEAAwE,EACxE;QACEC,IAAI,EAAEP;MACR,CAAC,EACD,MAAM;QACJH,KAAK,CAACW,mBAAmB,CAAC,MAAM;UAC9B;UACA,OAAO,EAAE;QACX,CAAC,CAAC;MACJ,CAAC,CACF;IACH,CAAC,MAAM;MACLX,KAAK,CAACS,WAAW,CACf,kFAAkF,EAClF;QACEC,IAAI,EAAEP;MACR,CAAC,EACD,MAAM;QACJH,KAAK,CAACW,mBAAmB,CAAC,CAACC,IAAI,EAAEC,UAAU,KAAK;UAC9C,OAAO;UACL;UACA;YACEC,MAAM,EAAED,UAAU,CAAC;cACjB,GAAGD,IAAI;cACPX,WAAW,EAAE;YACf,CAAC;UACH,CAAC,CACF;QACH,CAAC,CAAC;MACJ,CAAC,CACF;IACH;EACF;AACF,CAAC,EAAE;EACDc,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJhB,WAAW,EAAE,8DAA8D;MAC3EiB,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,YAAY;IACrBC,MAAM,EAAE,EAAE;IACVC,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAC,OAAA,CAAA5B,OAAA,GAAAG,QAAA;AAAA0B,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAA5B,OAAA"}
|
package/package.json
CHANGED