eslint-plugin-jsdoc 42.0.0 → 43.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 +273 -11
- package/dist/defaultTagOrder.js +33 -31
- package/dist/defaultTagOrder.js.map +1 -1
- package/dist/iterateJsdoc.js +5 -1
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/rules/sortTags.js +249 -8
- package/dist/rules/sortTags.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22385,6 +22385,18 @@ Sorts tags by a specified sequence according to tag name.
|
|
|
22385
22385
|
|
|
22386
22386
|
(Default order originally inspired by [`@homer0/prettier-plugin-jsdoc`](https://github.com/homer0/packages/tree/main/packages/public/prettier-plugin-jsdoc).)
|
|
22387
22387
|
|
|
22388
|
+
Optionally allows adding line breaks between tag groups and/or between tags
|
|
22389
|
+
within a tag group.
|
|
22390
|
+
|
|
22391
|
+
Please note: unless you are disabling reporting of line breaks, this rule
|
|
22392
|
+
should not be used with the default "never" or "always" options of
|
|
22393
|
+
`tag-lines` (a rule enabled by default with the recommended config) as
|
|
22394
|
+
that rule adds its own line breaks after tags and may interfere with any
|
|
22395
|
+
line break setting this rule will attempt to do when not disabled.
|
|
22396
|
+
|
|
22397
|
+
You may, however, safely set the "any" option in that rule along with
|
|
22398
|
+
`startLines` and/or `endLines`.
|
|
22399
|
+
|
|
22388
22400
|
<a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40"></a>
|
|
22389
22401
|
<a name="eslint-plugin-jsdoc-rules-sort-tags-options-40"></a>
|
|
22390
22402
|
#### Options
|
|
@@ -22393,24 +22405,32 @@ Sorts tags by a specified sequence according to tag name.
|
|
|
22393
22405
|
<a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-tagsequence"></a>
|
|
22394
22406
|
##### <code>tagSequence</code>
|
|
22395
22407
|
|
|
22396
|
-
An array of tag
|
|
22408
|
+
An array of tag group objects indicating the preferred sequence for sorting tags.
|
|
22409
|
+
|
|
22410
|
+
Each item in the array should be an object with a `tags` property set to an array
|
|
22411
|
+
of tag names.
|
|
22397
22412
|
|
|
22398
22413
|
Tag names earlier in the list will be arranged first. The relative position of
|
|
22399
22414
|
tags of the same name will not be changed.
|
|
22400
22415
|
|
|
22401
|
-
|
|
22402
|
-
|
|
22403
|
-
|
|
22404
|
-
|
|
22416
|
+
Earlier groups will also be arranged before later groups, but with the added
|
|
22417
|
+
feature that additional line breaks may be added between (or before or after)
|
|
22418
|
+
such groups (depending on the setting of `linesBetween`).
|
|
22419
|
+
|
|
22420
|
+
Tag names not in the list will be grouped together at the end. The pseudo-tag
|
|
22421
|
+
`-other` can be used to place them anywhere else if desired. The tags will be
|
|
22422
|
+
placed in their order of appearance, or alphabetized if `alphabetizeExtras`
|
|
22423
|
+
is enabled, see more below about that option.
|
|
22405
22424
|
|
|
22406
|
-
Defaults to the array below
|
|
22425
|
+
Defaults to the array below (noting that it is just a single tag group with
|
|
22426
|
+
no lines between groups by default).
|
|
22407
22427
|
|
|
22408
22428
|
Please note that this order is still experimental, so if you want to retain
|
|
22409
22429
|
a fixed order that doesn't change into the future, supply your own
|
|
22410
22430
|
`tagSequence`.
|
|
22411
22431
|
|
|
22412
22432
|
```js
|
|
22413
|
-
[
|
|
22433
|
+
[{tags: [
|
|
22414
22434
|
// Brief descriptions
|
|
22415
22435
|
'summary',
|
|
22416
22436
|
'typeSummary',
|
|
@@ -22563,7 +22583,7 @@ a fixed order that doesn't change into the future, supply your own
|
|
|
22563
22583
|
'since',
|
|
22564
22584
|
'deprecated',
|
|
22565
22585
|
'todo',
|
|
22566
|
-
];
|
|
22586
|
+
]}];
|
|
22567
22587
|
```
|
|
22568
22588
|
|
|
22569
22589
|
<a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-alphabetizeextras"></a>
|
|
@@ -22574,13 +22594,41 @@ Defaults to `false`. Alphabetizes any items not within `tagSequence` after any
|
|
|
22574
22594
|
items within `tagSequence` (or in place of the special `-other` pseudo-tag)
|
|
22575
22595
|
are sorted.
|
|
22576
22596
|
|
|
22597
|
+
If you want all your tags alphabetized, you can supply an empty array for
|
|
22598
|
+
`tagSequence` along with setting this option to `true`.
|
|
22599
|
+
|
|
22600
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-linesbetween"></a>
|
|
22601
|
+
<a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-linesbetween"></a>
|
|
22602
|
+
##### <code>linesBetween</code>
|
|
22603
|
+
|
|
22604
|
+
Indicates the number of lines to be added between tag groups. Defaults to 1.
|
|
22605
|
+
Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not
|
|
22606
|
+
set to 1+ if you are using `tag-lines` and `"never"`.
|
|
22607
|
+
|
|
22608
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-reporttaggroupspacing"></a>
|
|
22609
|
+
<a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-reporttaggroupspacing"></a>
|
|
22610
|
+
##### <code>reportTagGroupSpacing</code>
|
|
22611
|
+
|
|
22612
|
+
Whether to enable reporting and fixing of line breaks between tag groups
|
|
22613
|
+
as set by `linesBetween`. Defaults to `true`. Note that the very last tag
|
|
22614
|
+
will not have spacing applied regardless. For adding line breaks there, you
|
|
22615
|
+
may wish to use the `endLines` option of the `tag-lines` rule.
|
|
22616
|
+
|
|
22617
|
+
<a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-reportintrataggroupspacing"></a>
|
|
22618
|
+
<a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-reportintrataggroupspacing"></a>
|
|
22619
|
+
##### <code>reportIntraTagGroupSpacing</code>
|
|
22620
|
+
|
|
22621
|
+
Whether to enable reporting and fixing of line breaks within tags of a given
|
|
22622
|
+
tag group. Defaults to `true` which will remove any line breaks at the end of
|
|
22623
|
+
such tags. Do not use with `true` if you are using `tag-lines` and `always`.
|
|
22624
|
+
|
|
22577
22625
|
|||
|
|
22578
22626
|
|---|---|
|
|
22579
22627
|
|Context|everywhere|
|
|
22580
22628
|
|Tags|any|
|
|
22581
22629
|
|Recommended|false|
|
|
22582
22630
|
|Settings||
|
|
22583
|
-
|Options|`tagSequence`, `alphabetizeExtras`|
|
|
22631
|
+
|Options|`tagSequence`, `alphabetizeExtras`, `linesBetween`, `reportTagGroupSpacing`, `reportIntraTagGroupSpacing`|
|
|
22584
22632
|
|
|
22585
22633
|
The following patterns are considered problems:
|
|
22586
22634
|
|
|
@@ -22645,7 +22693,16 @@ function quux () {}
|
|
|
22645
22693
|
* @abc
|
|
22646
22694
|
*/
|
|
22647
22695
|
function quux () {}
|
|
22648
|
-
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":["def","xyz","abc"]}]
|
|
22696
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["def","xyz","abc"]}]}]
|
|
22697
|
+
// Message: Tags are not in the prescribed order: def, xyz, abc
|
|
22698
|
+
|
|
22699
|
+
/**
|
|
22700
|
+
* @xyz
|
|
22701
|
+
* @def
|
|
22702
|
+
* @abc
|
|
22703
|
+
*/
|
|
22704
|
+
function quux () {}
|
|
22705
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22649
22706
|
// Message: Tags are not in the prescribed order: def, xyz, abc
|
|
22650
22707
|
|
|
22651
22708
|
/**
|
|
@@ -22677,6 +22734,135 @@ function quux () {}
|
|
|
22677
22734
|
*/
|
|
22678
22735
|
function quux () {}
|
|
22679
22736
|
// Message: Tags are not in the prescribed order: summary, typeSummary, module, exports, file, fileoverview, overview, typedef, interface, record, template, name, kind, type, alias, external, host, callback, func, function, method, class, constructor, modifies, mixes, mixin, mixinClass, mixinFunction, namespace, borrows, constructs, lends, implements, requires, desc, description, classdesc, tutorial, copyright, license, internal, const, constant, final, global, readonly, abstract, virtual, var, member, memberof, memberof!, inner, instance, inheritdoc, inheritDoc, override, hideconstructor, param, arg, argument, prop, property, return, returns, async, generator, default, defaultvalue, enum, augments, extends, throws, exception, yield, yields, event, fires, emits, listens, this, static, private, protected, public, access, package, -other, see, example, closurePrimitive, customElement, expose, hidden, idGenerator, meaning, ngInject, owner, wizaction, define, dict, export, externs, implicitCast, noalias, nocollapse, nocompile, noinline, nosideeffects, polymer, polymerBehavior, preserve, struct, suppress, unrestricted, category, ignore, author, version, variation, since, deprecated, todo
|
|
22737
|
+
|
|
22738
|
+
/**
|
|
22739
|
+
* @def
|
|
22740
|
+
* @xyz
|
|
22741
|
+
* @abc
|
|
22742
|
+
*/
|
|
22743
|
+
function quux () {}
|
|
22744
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22745
|
+
// Message: Tag groups do not have the expected whitespace
|
|
22746
|
+
|
|
22747
|
+
/**
|
|
22748
|
+
* @def
|
|
22749
|
+
* @xyz
|
|
22750
|
+
*
|
|
22751
|
+
*
|
|
22752
|
+
* @abc
|
|
22753
|
+
*/
|
|
22754
|
+
function quux () {}
|
|
22755
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22756
|
+
// Message: Tag groups do not have the expected whitespace
|
|
22757
|
+
|
|
22758
|
+
/**
|
|
22759
|
+
* @def
|
|
22760
|
+
* @xyz A multiline
|
|
22761
|
+
* description
|
|
22762
|
+
* @abc
|
|
22763
|
+
*/
|
|
22764
|
+
function quux () {}
|
|
22765
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22766
|
+
// Message: Tag groups do not have the expected whitespace
|
|
22767
|
+
|
|
22768
|
+
/**
|
|
22769
|
+
* @def
|
|
22770
|
+
* @xyz
|
|
22771
|
+
* @xyz
|
|
22772
|
+
*
|
|
22773
|
+
*
|
|
22774
|
+
* @abc
|
|
22775
|
+
*/
|
|
22776
|
+
function quux () {}
|
|
22777
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22778
|
+
// Message: Tag groups do not have the expected whitespace
|
|
22779
|
+
|
|
22780
|
+
/**
|
|
22781
|
+
* Foo
|
|
22782
|
+
*
|
|
22783
|
+
* @param {(
|
|
22784
|
+
* req: express.Request,
|
|
22785
|
+
* done: (error: any, user?: any, info?: any) => void
|
|
22786
|
+
* ) => void} verify - callback to excute custom authentication logic
|
|
22787
|
+
* @see https://github.com/jaredhanson/passport/blob/v0.4.1/lib/middleware/authenticate.js#L217
|
|
22788
|
+
*
|
|
22789
|
+
*/
|
|
22790
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["see","link","global"]},{"tags":["fires","listens"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]}]}]
|
|
22791
|
+
// Message: Tags are not in the prescribed order: since, access, class, augments, mixes, alias, memberof, see, link, global, fires, listens, param, yields, returns
|
|
22792
|
+
|
|
22793
|
+
/**
|
|
22794
|
+
* Summary. (use period)
|
|
22795
|
+
*
|
|
22796
|
+
* Description. (use period)
|
|
22797
|
+
*
|
|
22798
|
+
* @since 1.0.1
|
|
22799
|
+
* @access private
|
|
22800
|
+
*
|
|
22801
|
+
* @class
|
|
22802
|
+
* @mixes mixin
|
|
22803
|
+
*
|
|
22804
|
+
* @alias realName
|
|
22805
|
+
* @memberof namespace
|
|
22806
|
+
*
|
|
22807
|
+
* @see Function/class relied on
|
|
22808
|
+
* @global
|
|
22809
|
+
*
|
|
22810
|
+
* @tutorial Asd
|
|
22811
|
+
* @license MIT
|
|
22812
|
+
*
|
|
22813
|
+
* @fires eventName
|
|
22814
|
+
* @fires className#eventName
|
|
22815
|
+
* @listens event:eventName
|
|
22816
|
+
* @listens className~event:eventName
|
|
22817
|
+
*
|
|
22818
|
+
* @tutorial Asd
|
|
22819
|
+
* @license MIT
|
|
22820
|
+
*
|
|
22821
|
+
* @yields {string} Yielded value description.
|
|
22822
|
+
*
|
|
22823
|
+
* @param {string} var1 - Description.
|
|
22824
|
+
* @param {string} var2 - Description of optional variable.
|
|
22825
|
+
* @param {string} var3 - Description of optional variable with default variable.
|
|
22826
|
+
* @param {object} objectVar - Description.
|
|
22827
|
+
* @param {string} objectVar.key - Description of a key in the objectVar parameter.
|
|
22828
|
+
*
|
|
22829
|
+
* @returns {string} Return value description.
|
|
22830
|
+
*/
|
|
22831
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["see","link","global"]},{"tags":["fires","listens"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]}]}]
|
|
22832
|
+
// Message: Tags are not in the prescribed order: since, access, class, augments, mixes, alias, memberof, see, link, global, fires, listens, param, yields, returns
|
|
22833
|
+
|
|
22834
|
+
/**
|
|
22835
|
+
* @def
|
|
22836
|
+
* @zzz
|
|
22837
|
+
* @abc
|
|
22838
|
+
*/
|
|
22839
|
+
function quux () {}
|
|
22840
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","-other","xyz"]},{"tags":["abc"]}]}]
|
|
22841
|
+
// Message: Tag groups do not have the expected whitespace
|
|
22842
|
+
|
|
22843
|
+
/**
|
|
22844
|
+
* @xyz
|
|
22845
|
+
* @def
|
|
22846
|
+
* @abc
|
|
22847
|
+
*/
|
|
22848
|
+
function quux () {}
|
|
22849
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"alphabetizeExtras":true,"tagSequence":[]}]
|
|
22850
|
+
// Message: Tags are not in the prescribed order: (alphabetical)
|
|
22851
|
+
|
|
22852
|
+
/**
|
|
22853
|
+
* @example
|
|
22854
|
+
* enum Color { Red, Green, Blue }
|
|
22855
|
+
* faker.helpers.enumValue(Color) // 1 (Green)
|
|
22856
|
+
*
|
|
22857
|
+
* enum Direction { North = 'North', South = 'South'}
|
|
22858
|
+
* faker.helpers.enumValue(Direction) // 'South'
|
|
22859
|
+
*
|
|
22860
|
+
* enum HttpStatus { Ok = 200, Created = 201, BadRequest = 400, Unauthorized = 401 }
|
|
22861
|
+
* faker.helpers.enumValue(HttpStatus) // 200 (Ok)
|
|
22862
|
+
* @since 8.0.0
|
|
22863
|
+
*/
|
|
22864
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}]
|
|
22865
|
+
// Message: Tag groups do not have the expected whitespace
|
|
22680
22866
|
````
|
|
22681
22867
|
|
|
22682
22868
|
The following patterns are not considered problems:
|
|
@@ -22711,10 +22897,86 @@ function quux () {}
|
|
|
22711
22897
|
* @abc
|
|
22712
22898
|
*/
|
|
22713
22899
|
function quux () {}
|
|
22714
|
-
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":["def","xyz","abc"]}]
|
|
22900
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["def","xyz","abc"]}]}]
|
|
22715
22901
|
|
|
22716
22902
|
/** @def */
|
|
22717
22903
|
function quux () {}
|
|
22904
|
+
|
|
22905
|
+
/**
|
|
22906
|
+
* @def
|
|
22907
|
+
* @xyz
|
|
22908
|
+
*
|
|
22909
|
+
* @abc
|
|
22910
|
+
*/
|
|
22911
|
+
function quux () {}
|
|
22912
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22913
|
+
|
|
22914
|
+
/**
|
|
22915
|
+
* @def
|
|
22916
|
+
* @xyz A multiline
|
|
22917
|
+
* description
|
|
22918
|
+
*
|
|
22919
|
+
* @abc
|
|
22920
|
+
*/
|
|
22921
|
+
function quux () {}
|
|
22922
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22923
|
+
|
|
22924
|
+
/**
|
|
22925
|
+
* Foo
|
|
22926
|
+
*
|
|
22927
|
+
* @see https://github.com/jaredhanson/passport/blob/v0.4.1/lib/middleware/authenticate.js#L217
|
|
22928
|
+
*
|
|
22929
|
+
* @param {(
|
|
22930
|
+
* req: express.Request,
|
|
22931
|
+
* done: (error: any, user?: any, info?: any) => void
|
|
22932
|
+
* ) => void} verify - callback to excute custom authentication logic
|
|
22933
|
+
*/
|
|
22934
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["see","link","global"]},{"tags":["fires","listens"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]}]}]
|
|
22935
|
+
|
|
22936
|
+
/**
|
|
22937
|
+
* Constructor.
|
|
22938
|
+
*
|
|
22939
|
+
* @public
|
|
22940
|
+
*
|
|
22941
|
+
* @param {string} [message] - Error message.
|
|
22942
|
+
*/
|
|
22943
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["public","protected","private","override"]},{"tags":["override","async"]},{"tags":["see","link","global"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]},{"tags":["fires","-other","listens"]}]}]
|
|
22944
|
+
|
|
22945
|
+
/**
|
|
22946
|
+
* @param options.mode The mode to generate the birthdate. Supported modes are `'age'` and `'year'` .
|
|
22947
|
+
*
|
|
22948
|
+
* There are two modes available `'age'` and `'year'`:
|
|
22949
|
+
* - `'age'`: The min and max options define the age of the person (e.g. `18` - `42`).
|
|
22950
|
+
* - `'year'`: The min and max options define the range the birthdate may be in (e.g. `1900` - `2000`).
|
|
22951
|
+
*
|
|
22952
|
+
* Defaults to `year`.
|
|
22953
|
+
*
|
|
22954
|
+
* @example
|
|
22955
|
+
*/
|
|
22956
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}]
|
|
22957
|
+
|
|
22958
|
+
/**
|
|
22959
|
+
* @example
|
|
22960
|
+
* enum Color { Red, Green, Blue }
|
|
22961
|
+
* faker.helpers.enumValue(Color) // 1 (Green)
|
|
22962
|
+
*
|
|
22963
|
+
* enum Direction { North = 'North', South = 'South'}
|
|
22964
|
+
* faker.helpers.enumValue(Direction) // 'South'
|
|
22965
|
+
*
|
|
22966
|
+
* enum HttpStatus { Ok = 200, Created = 201, BadRequest = 400, Unauthorized = 401 }
|
|
22967
|
+
* faker.helpers.enumValue(HttpStatus) // 200 (Ok)
|
|
22968
|
+
*
|
|
22969
|
+
* @since 8.0.0
|
|
22970
|
+
*/
|
|
22971
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}]
|
|
22972
|
+
|
|
22973
|
+
/**
|
|
22974
|
+
* @def
|
|
22975
|
+
* @xyz
|
|
22976
|
+
* @abc
|
|
22977
|
+
*/
|
|
22978
|
+
function quux () {}
|
|
22979
|
+
// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"reportTagGroupSpacing":false,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
|
|
22718
22980
|
````
|
|
22719
22981
|
|
|
22720
22982
|
|
package/dist/defaultTagOrder.js
CHANGED
|
@@ -4,39 +4,41 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
const defaultTagOrder = [
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
const defaultTagOrder = [{
|
|
8
|
+
tags: [
|
|
9
|
+
// Brief descriptions
|
|
10
|
+
'summary', 'typeSummary',
|
|
11
|
+
// Module/file-level
|
|
12
|
+
'module', 'exports', 'file', 'fileoverview', 'overview',
|
|
13
|
+
// Identifying (name, type)
|
|
14
|
+
'typedef', 'interface', 'record', 'template', 'name', 'kind', 'type', 'alias', 'external', 'host', 'callback', 'func', 'function', 'method', 'class', 'constructor',
|
|
15
|
+
// Relationships
|
|
16
|
+
'modifies', 'mixes', 'mixin', 'mixinClass', 'mixinFunction', 'namespace', 'borrows', 'constructs', 'lends', 'implements', 'requires',
|
|
17
|
+
// Long descriptions
|
|
18
|
+
'desc', 'description', 'classdesc', 'tutorial', 'copyright', 'license',
|
|
19
|
+
// Simple annotations
|
|
19
20
|
|
|
20
|
-
// TypeScript
|
|
21
|
-
'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor',
|
|
22
|
-
// Core function/object info
|
|
23
|
-
'param', 'arg', 'argument', 'prop', 'property', 'return', 'returns',
|
|
24
|
-
// Important behavior details
|
|
25
|
-
'async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this',
|
|
26
|
-
// Access
|
|
27
|
-
'static', 'private', 'protected', 'public', 'access', 'package', '-other',
|
|
28
|
-
// Supplementary descriptions
|
|
29
|
-
'see', 'example',
|
|
30
|
-
// METADATA
|
|
21
|
+
// TypeScript
|
|
22
|
+
'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor',
|
|
23
|
+
// Core function/object info
|
|
24
|
+
'param', 'arg', 'argument', 'prop', 'property', 'return', 'returns',
|
|
25
|
+
// Important behavior details
|
|
26
|
+
'async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this',
|
|
27
|
+
// Access
|
|
28
|
+
'static', 'private', 'protected', 'public', 'access', 'package', '-other',
|
|
29
|
+
// Supplementary descriptions
|
|
30
|
+
'see', 'example',
|
|
31
|
+
// METADATA
|
|
31
32
|
|
|
32
|
-
// Other Closure (undocumented) metadata
|
|
33
|
-
'closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction',
|
|
34
|
-
// Other Closure (documented) metadata
|
|
35
|
-
'define', 'dict', 'export', 'externs', 'implicitCast', 'noalias', 'nocollapse', 'nocompile', 'noinline', 'nosideeffects', 'polymer', 'polymerBehavior', 'preserve', 'struct', 'suppress', 'unrestricted',
|
|
36
|
-
// @homer0/prettier-plugin-jsdoc metadata
|
|
37
|
-
'category',
|
|
38
|
-
// Non-Closure metadata
|
|
39
|
-
'ignore', 'author', 'version', 'variation', 'since', 'deprecated', 'todo']
|
|
33
|
+
// Other Closure (undocumented) metadata
|
|
34
|
+
'closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction',
|
|
35
|
+
// Other Closure (documented) metadata
|
|
36
|
+
'define', 'dict', 'export', 'externs', 'implicitCast', 'noalias', 'nocollapse', 'nocompile', 'noinline', 'nosideeffects', 'polymer', 'polymerBehavior', 'preserve', 'struct', 'suppress', 'unrestricted',
|
|
37
|
+
// @homer0/prettier-plugin-jsdoc metadata
|
|
38
|
+
'category',
|
|
39
|
+
// Non-Closure metadata
|
|
40
|
+
'ignore', 'author', 'version', 'variation', 'since', 'deprecated', 'todo']
|
|
41
|
+
}];
|
|
40
42
|
var _default = defaultTagOrder;
|
|
41
43
|
exports.default = _default;
|
|
42
44
|
module.exports = exports.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder","_default","exports","default","module"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n // Brief descriptions\n
|
|
1
|
+
{"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder","tags","_default","exports","default","module"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n {\n tags: [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n\n // TypeScript\n 'internal',\n\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n ],\n },\n];\n\nexport default defaultTagOrder;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,GAAG,CACtB;EACEC,IAAI,EAAE;EACJ;EACA,SAAS,EACT,aAAa;EAEb;EACA,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,EACd,UAAU;EAEV;EACA,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa;EAEb;EACA,UAAU,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU;EAEV;EACA,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS;EAET;;EAEA;EACA,UAAU,EAEV,OAAO,EACP,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB;EAEjB;EACA,OAAO,EACP,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS;EAET;EACA,OAAO,EACP,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM;EAEN;EACA,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,QAAQ;EAER;EACA,KAAK,EACL,SAAS;EAET;;EAEA;EACA,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW;EAEX;EACA,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc;EAEd;EACA,UAAU;EAEV;EACA,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,MAAM;AAEV,CAAC,CACF;AAAC,IAAAC,QAAA,GAEaF,eAAe;AAAAG,OAAA,CAAAC,OAAA,GAAAF,QAAA;AAAAG,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -105,7 +105,11 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
105
105
|
return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);
|
|
106
106
|
};
|
|
107
107
|
utils.stringify = (tagBlock, specRewire) => {
|
|
108
|
-
|
|
108
|
+
let block;
|
|
109
|
+
if (specRewire) {
|
|
110
|
+
block = rewireSpecs(tagBlock);
|
|
111
|
+
}
|
|
112
|
+
return (0, _commentParser.stringify)(specRewire ? block : tagBlock);
|
|
109
113
|
};
|
|
110
114
|
utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {
|
|
111
115
|
report(msg, handler ? fixer => {
|
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","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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"}
|
|
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","block","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 let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(specRewire ? block : 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/sortTags.js
CHANGED
|
@@ -7,17 +7,25 @@ exports.default = void 0;
|
|
|
7
7
|
var _defaultTagOrder = _interopRequireDefault(require("../defaultTagOrder"));
|
|
8
8
|
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
// eslint-disable-next-line complexity -- Temporary
|
|
10
11
|
var _default = (0, _iterateJsdoc.default)(({
|
|
11
12
|
context,
|
|
12
13
|
jsdoc,
|
|
13
14
|
utils
|
|
14
15
|
}) => {
|
|
15
16
|
const {
|
|
17
|
+
linesBetween = 1,
|
|
16
18
|
tagSequence = _defaultTagOrder.default,
|
|
17
|
-
alphabetizeExtras = false
|
|
19
|
+
alphabetizeExtras = false,
|
|
20
|
+
reportTagGroupSpacing = true,
|
|
21
|
+
reportIntraTagGroupSpacing = true
|
|
18
22
|
} = context.options[0] || {};
|
|
19
|
-
const
|
|
20
|
-
|
|
23
|
+
const tagList = tagSequence.flatMap(obj => {
|
|
24
|
+
/* typeof obj === 'string' ? obj : */
|
|
25
|
+
return obj.tags;
|
|
26
|
+
});
|
|
27
|
+
const otherPos = tagList.indexOf('-other');
|
|
28
|
+
const endPos = otherPos > -1 ? otherPos : tagList.length;
|
|
21
29
|
let ongoingCount = 0;
|
|
22
30
|
for (const [idx, tag] of jsdoc.tags.entries()) {
|
|
23
31
|
tag.originalIndex = idx;
|
|
@@ -44,8 +52,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
44
52
|
firstChangedTagIndex = originalIndex;
|
|
45
53
|
}
|
|
46
54
|
};
|
|
47
|
-
const newPos =
|
|
48
|
-
const oldPos =
|
|
55
|
+
const newPos = tagList.indexOf(tagNew);
|
|
56
|
+
const oldPos = tagList.indexOf(tagOld);
|
|
49
57
|
const preferredNewPos = newPos === -1 ? endPos : newPos;
|
|
50
58
|
const preferredOldPos = oldPos === -1 ? endPos : oldPos;
|
|
51
59
|
if (preferredNewPos < preferredOldPos) {
|
|
@@ -73,6 +81,222 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
73
81
|
return 1;
|
|
74
82
|
});
|
|
75
83
|
if (firstChangedTagLine === undefined) {
|
|
84
|
+
// Should be ordered by now
|
|
85
|
+
|
|
86
|
+
const lastTagsOfGroup = [];
|
|
87
|
+
const badLastTagsOfGroup = [];
|
|
88
|
+
const countTagEmptyLines = tag => {
|
|
89
|
+
return tag.source.reduce((acc, {
|
|
90
|
+
tokens: {
|
|
91
|
+
description,
|
|
92
|
+
name,
|
|
93
|
+
type,
|
|
94
|
+
end,
|
|
95
|
+
tag: tg
|
|
96
|
+
}
|
|
97
|
+
}) => {
|
|
98
|
+
const empty = !tg && !type && !name && !description;
|
|
99
|
+
// Reset the count so long as there is content
|
|
100
|
+
return empty ? acc + (empty && !end) : 0;
|
|
101
|
+
}, 0);
|
|
102
|
+
};
|
|
103
|
+
let idx = 0;
|
|
104
|
+
for (const {
|
|
105
|
+
tags
|
|
106
|
+
} of tagSequence) {
|
|
107
|
+
let innerIdx;
|
|
108
|
+
let currentTag;
|
|
109
|
+
let lastTag;
|
|
110
|
+
do {
|
|
111
|
+
currentTag = jsdoc.tags[idx];
|
|
112
|
+
if (!currentTag) {
|
|
113
|
+
idx++;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
innerIdx = tags.indexOf(currentTag.tag);
|
|
117
|
+
if (innerIdx === -1 && (
|
|
118
|
+
// eslint-disable-next-line no-loop-func -- Safe
|
|
119
|
+
!tags.includes('-other') || tagSequence.some(({
|
|
120
|
+
tags: tgs
|
|
121
|
+
}) => {
|
|
122
|
+
return tgs.includes(currentTag.tag);
|
|
123
|
+
}))) {
|
|
124
|
+
idx++;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
lastTag = currentTag;
|
|
128
|
+
idx++;
|
|
129
|
+
} while (true);
|
|
130
|
+
idx--;
|
|
131
|
+
if (lastTag) {
|
|
132
|
+
lastTagsOfGroup.push(lastTag);
|
|
133
|
+
const ct = countTagEmptyLines(lastTag);
|
|
134
|
+
if (ct !== linesBetween &&
|
|
135
|
+
// Use another rule for adding to end (should be of interest outside this rule)
|
|
136
|
+
jsdoc.tags[idx]) {
|
|
137
|
+
badLastTagsOfGroup.push([lastTag, ct]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (reportTagGroupSpacing && badLastTagsOfGroup.length) {
|
|
142
|
+
const fixer = tg => {
|
|
143
|
+
return () => {
|
|
144
|
+
// Due to https://github.com/syavorsky/comment-parser/issues/110 ,
|
|
145
|
+
// we have to modify `jsdoc.source` rather than just modify tags
|
|
146
|
+
// directly
|
|
147
|
+
for (const [currIdx, {
|
|
148
|
+
tokens
|
|
149
|
+
}] of jsdoc.source.entries()) {
|
|
150
|
+
if (tokens.tag !== '@' + tg.tag) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Cannot be `tokens.end`, as dropped off last tag, so safe to
|
|
155
|
+
// go on
|
|
156
|
+
let newIdx = currIdx;
|
|
157
|
+
const emptyLine = () => {
|
|
158
|
+
return {
|
|
159
|
+
tokens: utils.seedTokens({
|
|
160
|
+
delimiter: '*',
|
|
161
|
+
start: jsdoc.source[newIdx - 1].tokens.start
|
|
162
|
+
})
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
let existingEmptyLines = 0;
|
|
166
|
+
while (true) {
|
|
167
|
+
var _jsdoc$source$newIdx;
|
|
168
|
+
const nextTokens = (_jsdoc$source$newIdx = jsdoc.source[++newIdx]) === null || _jsdoc$source$newIdx === void 0 ? void 0 : _jsdoc$source$newIdx.tokens;
|
|
169
|
+
|
|
170
|
+
/* istanbul ignore if -- Guard */
|
|
171
|
+
if (!nextTokens) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Should be no `nextTokens.end` to worry about since ignored
|
|
176
|
+
// if not followed by tag
|
|
177
|
+
|
|
178
|
+
if (nextTokens.tag) {
|
|
179
|
+
// Haven't made it to last tag instance yet, so keep looking
|
|
180
|
+
if (nextTokens.tag === tokens.tag) {
|
|
181
|
+
existingEmptyLines = 0;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const lineDiff = linesBetween - existingEmptyLines;
|
|
185
|
+
if (lineDiff > 0) {
|
|
186
|
+
const lines = Array.from({
|
|
187
|
+
length: lineDiff
|
|
188
|
+
}, () => {
|
|
189
|
+
return emptyLine();
|
|
190
|
+
});
|
|
191
|
+
jsdoc.source.splice(newIdx, 0, ...lines);
|
|
192
|
+
} else {
|
|
193
|
+
// lineDiff < 0
|
|
194
|
+
jsdoc.source.splice(newIdx + lineDiff, -lineDiff);
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
const empty = !nextTokens.type && !nextTokens.name && !nextTokens.description;
|
|
199
|
+
if (empty) {
|
|
200
|
+
existingEmptyLines++;
|
|
201
|
+
} else {
|
|
202
|
+
// Has content again, so reset empty line count
|
|
203
|
+
existingEmptyLines = 0;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
for (const [srcIdx, src] of jsdoc.source.entries()) {
|
|
209
|
+
src.number = srcIdx;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
for (const [tg, ct] of badLastTagsOfGroup) {
|
|
214
|
+
utils.reportJSDoc('Tag groups do not have the expected whitespace', tg, fixer(tg, ct));
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (!reportIntraTagGroupSpacing) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
for (const [tagIdx, tag] of jsdoc.tags.entries()) {
|
|
222
|
+
if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const ct = countTagEmptyLines(tag);
|
|
226
|
+
if (ct) {
|
|
227
|
+
// eslint-disable-next-line complexity -- Temporary
|
|
228
|
+
const fixer = () => {
|
|
229
|
+
let foundFirstTag = false;
|
|
230
|
+
let currentTag;
|
|
231
|
+
for (const [currIdx, {
|
|
232
|
+
tokens: {
|
|
233
|
+
description,
|
|
234
|
+
name,
|
|
235
|
+
type,
|
|
236
|
+
end,
|
|
237
|
+
tag: tg
|
|
238
|
+
}
|
|
239
|
+
}] of jsdoc.source.entries()) {
|
|
240
|
+
if (tg) {
|
|
241
|
+
foundFirstTag = true;
|
|
242
|
+
currentTag = tg;
|
|
243
|
+
}
|
|
244
|
+
if (!foundFirstTag) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (currentTag && !tg && !type && !name && !description && !end) {
|
|
248
|
+
let nextIdx = currIdx;
|
|
249
|
+
let ignore = true;
|
|
250
|
+
// Even if a tag of the same name as the last tags in a group,
|
|
251
|
+
// could still be an earlier tag in that group
|
|
252
|
+
|
|
253
|
+
// eslint-disable-next-line no-loop-func -- Safe
|
|
254
|
+
if (lastTagsOfGroup.some(lastTagOfGroup => {
|
|
255
|
+
return currentTag === '@' + lastTagOfGroup.tag;
|
|
256
|
+
})) {
|
|
257
|
+
while (true) {
|
|
258
|
+
var _jsdoc$source$nextIdx;
|
|
259
|
+
const nextTokens = (_jsdoc$source$nextIdx = jsdoc.source[++nextIdx]) === null || _jsdoc$source$nextIdx === void 0 ? void 0 : _jsdoc$source$nextIdx.tokens;
|
|
260
|
+
if (!nextTokens) {
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
if (!nextTokens.tag) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Followed by the same tag name, so not actually last in group,
|
|
268
|
+
// and of interest
|
|
269
|
+
if (nextTokens.tag === currentTag) {
|
|
270
|
+
ignore = false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
} else {
|
|
274
|
+
while (true) {
|
|
275
|
+
var _jsdoc$source$nextIdx2;
|
|
276
|
+
const nextTokens = (_jsdoc$source$nextIdx2 = jsdoc.source[++nextIdx]) === null || _jsdoc$source$nextIdx2 === void 0 ? void 0 : _jsdoc$source$nextIdx2.tokens;
|
|
277
|
+
if (!nextTokens || nextTokens.end) {
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Not the very last tag, so don't ignore
|
|
282
|
+
if (nextTokens.tag) {
|
|
283
|
+
ignore = false;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (!ignore) {
|
|
289
|
+
jsdoc.source.splice(currIdx, 1);
|
|
290
|
+
for (const [srcIdx, src] of jsdoc.source.entries()) {
|
|
291
|
+
src.number = srcIdx;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
utils.reportJSDoc('Intra-group tags have unexpected whitespace', tag, fixer);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
76
300
|
return;
|
|
77
301
|
}
|
|
78
302
|
const firstLine = utils.getFirstLine();
|
|
@@ -120,12 +344,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
120
344
|
}
|
|
121
345
|
}
|
|
122
346
|
};
|
|
123
|
-
utils.reportJSDoc(`Tags are not in the prescribed order: ${
|
|
347
|
+
utils.reportJSDoc(`Tags are not in the prescribed order: ${tagList.join(', ') || '(alphabetical)'}`, jsdoc.tags[firstChangedTagIndex], fix, true);
|
|
124
348
|
}, {
|
|
125
349
|
iterateAllJsdocs: true,
|
|
126
350
|
meta: {
|
|
127
351
|
docs: {
|
|
128
|
-
description: '',
|
|
352
|
+
description: 'Sorts tags by a specified sequence according to tag name.',
|
|
129
353
|
url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-sort-tags'
|
|
130
354
|
},
|
|
131
355
|
fixable: 'code',
|
|
@@ -135,9 +359,26 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
135
359
|
alphabetizeExtras: {
|
|
136
360
|
type: 'boolean'
|
|
137
361
|
},
|
|
362
|
+
linesBetween: {
|
|
363
|
+
type: 'integer'
|
|
364
|
+
},
|
|
365
|
+
reportIntraTagGroupSpacing: {
|
|
366
|
+
type: 'boolean'
|
|
367
|
+
},
|
|
368
|
+
reportTagGroupSpacing: {
|
|
369
|
+
type: 'boolean'
|
|
370
|
+
},
|
|
138
371
|
tagSequence: {
|
|
139
372
|
items: {
|
|
140
|
-
|
|
373
|
+
properties: {
|
|
374
|
+
tags: {
|
|
375
|
+
items: {
|
|
376
|
+
type: 'string'
|
|
377
|
+
},
|
|
378
|
+
type: 'array'
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
type: 'object'
|
|
141
382
|
},
|
|
142
383
|
type: 'array'
|
|
143
384
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortTags.js","names":["_defaultTagOrder","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","tagSequence","defaultTagOrder","alphabetizeExtras","options","otherPos","indexOf","endPos","length","ongoingCount","idx","tag","tags","entries","originalIndex","source","originalLine","firstChangedTagLine","firstChangedTagIndex","sortedTags","JSON","parse","stringify","sort","tagNew","tagOld","checkOrSetFirstChanged","newPos","oldPos","preferredNewPos","preferredOldPos","undefined","firstLine","getFirstLine","fix","itemsToMoveRange","Array","from","keys","unchangedPriorTagDescriptions","slice","reduce","ct","initialOffset","removeTag","changedTags","extraTagCount","changedTag","addTag","tokens","end","addLine","reportJSDoc","join","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type","items","exports","module"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n tagSequence = defaultTagOrder,\n alphabetizeExtras = false,\n } = context.options[0] || {};\n\n const otherPos = tagSequence.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagSequence.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of jsdoc.tags.entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n let firstChangedTagLine;\n let firstChangedTagIndex;\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagSequence.indexOf(tagNew);\n const oldPos = tagSequence.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length - firstChangedTagIndex,\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = firstLine + firstChangedTagIndex +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(idx + firstChangedTagIndex);\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${tagSequence.join(', ')}`,\n jsdoc.tags[firstChangedTagIndex],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-sort-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n type: 'boolean',\n },\n tagSequence: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAE5B,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,WAAW,GAAGC,wBAAe;IAC7BC,iBAAiB,GAAG;EACtB,CAAC,GAAGL,OAAO,CAACM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAMC,QAAQ,GAAGJ,WAAW,CAACK,OAAO,CAAC,QAAQ,CAAC;EAC9C,MAAMC,MAAM,GAAGF,QAAQ,GAAG,CAAC,CAAC,GAAGA,QAAQ,GAAGJ,WAAW,CAACO,MAAM;EAE5D,IAAIC,YAAY,GAAG,CAAC;EACpB,KAAK,MAAM,CACTC,GAAG,EACHC,GAAG,CACJ,IAAIZ,KAAK,CAACa,IAAI,CAACC,OAAO,EAAE,EAAE;IACzBF,GAAG,CAACG,aAAa,GAAGJ,GAAG;IACvBD,YAAY,IAAIE,GAAG,CAACI,MAAM,CAACP,MAAM;IACjCG,GAAG,CAACK,YAAY,GAAGP,YAAY;EACjC;EAEA,IAAIQ,mBAAmB;EACvB,IAAIC,oBAAoB;EACxB,MAAMC,UAAU,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACvB,KAAK,CAACa,IAAI,CAAC,CAAC;EACzDO,UAAU,CAACI,IAAI,CAAC,CAAC;IACfZ,GAAG,EAAEa;EACP,CAAC,EAAE;IACDV,aAAa;IACbE,YAAY;IACZL,GAAG,EAAEc;EACP,CAAC,KAAK;IACJ;IACA,IAAID,MAAM,KAAKC,MAAM,EAAE;MACrB,OAAO,CAAC;IACV;IAEA,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;MACnC,IAAI,CAACT,mBAAmB,IAAID,YAAY,GAAGC,mBAAmB,EAAE;QAC9DA,mBAAmB,GAAGD,YAAY;QAClCE,oBAAoB,GAAGJ,aAAa;MACtC;IACF,CAAC;IAED,MAAMa,MAAM,GAAG1B,WAAW,CAACK,OAAO,CAACkB,MAAM,CAAC;IAC1C,MAAMI,MAAM,GAAG3B,WAAW,CAACK,OAAO,CAACmB,MAAM,CAAC;IAE1C,MAAMI,eAAe,GAAGF,MAAM,KAAK,CAAC,CAAC,GAAGpB,MAAM,GAAGoB,MAAM;IACvD,MAAMG,eAAe,GAAGF,MAAM,KAAK,CAAC,CAAC,GAAGrB,MAAM,GAAGqB,MAAM;IAEvD,IAAIC,eAAe,GAAGC,eAAe,EAAE;MACrCJ,sBAAsB,EAAE;MACxB,OAAO,CAAC,CAAC;IACX;IAEA,IAAIG,eAAe,GAAGC,eAAe,EAAE;MACrC,OAAO,CAAC;IACV;;IAEA;IACA,IACE,CAAC3B,iBAAiB;IAElB;IACA;IACA;IACAwB,MAAM,IAAI,CAAC,EACX;MACA,OAAO,CAAC;IACV;IAEA,IAAIH,MAAM,GAAGC,MAAM,EAAE;MACnBC,sBAAsB,EAAE;MACxB,OAAO,CAAC,CAAC;IACX;;IAEA;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EAEF,IAAIT,mBAAmB,KAAKc,SAAS,EAAE;IACrC;EACF;EAEA,MAAMC,SAAS,GAAGhC,KAAK,CAACiC,YAAY,EAAE;EAEtC,MAAMC,GAAG,GAAGA,CAAA,KAAM;IAChB,MAAMC,gBAAgB,GAAG,CACvB,GAAGC,KAAK,CAACC,IAAI,CAAC;MACZ7B,MAAM,EAAET,KAAK,CAACa,IAAI,CAACJ,MAAM,GAAGU;IAC9B,CAAC,CAAC,CAACoB,IAAI,EAAE,CACV;IAED,MAAMC,6BAA6B,GAAGxC,KAAK,CAACa,IAAI,CAAC4B,KAAK,CACpD,CAAC,EACDtB,oBAAoB,CACrB,CAACuB,MAAM,CAAC,CAACC,EAAE,EAAE;MACZ3B;IACF,CAAC,KAAK;MACJ,OAAO2B,EAAE,GAAG3B,MAAM,CAACP,MAAM,GAAG,CAAC;IAC/B,CAAC,EAAE,CAAC,CAAC;;IAEL;IACA;IACA;IACA,MAAMmC,aAAa,GAAGX,SAAS,GAAGd,oBAAoB;IAEpD;IACAqB,6BAA6B;;IAE/B;IACA,KAAK,MAAM7B,GAAG,IAAIyB,gBAAgB,EAAE;MAClCnC,KAAK,CAAC4C,SAAS,CAAClC,GAAG,GAAGQ,oBAAoB,CAAC;IAC7C;IAEA,MAAM2B,WAAW,GAAG1B,UAAU,CAACqB,KAAK,CAACtB,oBAAoB,CAAC;IAC1D,IAAI4B,aAAa,GAAG,CAAC;IAErB,KAAK,MAAMpC,GAAG,IAAIyB,gBAAgB,EAAE;MAClC,MAAMY,UAAU,GAAGF,WAAW,CAACnC,GAAG,CAAC;MAEnCV,KAAK,CAACgD,MAAM,CACVD,UAAU,CAACpC,GAAG,EACdmC,aAAa,GAAGH,aAAa,GAAGjC,GAAG,EACnC;QACE,GAAGqC,UAAU,CAAChC,MAAM,CAAC,CAAC,CAAC,CAACkC,MAAM;QAE9B;QACA;QACAC,GAAG,EAAE;MACP,CAAC,CACF;MAED,KAAK,MAAM;QACTD;MACF,CAAC,IAAIF,UAAU,CAAChC,MAAM,CAACyB,KAAK,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,CAACS,MAAM,CAACC,GAAG,EAAE;UACflD,KAAK,CAACmD,OAAO,CACXL,aAAa,GAAGH,aAAa,GAAGjC,GAAG,GAAG,CAAC,EACvC;YACE,GAAGuC,MAAM;YACTC,GAAG,EAAE;UACP,CAAC,CACF;UACDJ,aAAa,EAAE;QACjB;MACF;IACF;EACF,CAAC;EAED9C,KAAK,CAACoD,WAAW,CACd,yCAAwCnD,WAAW,CAACoD,IAAI,CAAC,IAAI,CAAE,EAAC,EACjEtD,KAAK,CAACa,IAAI,CAACM,oBAAoB,CAAC,EAChCgB,GAAG,EACH,IAAI,CACL;AACH,CAAC,EAAE;EACDoB,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,EAAE;MACfC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV3D,iBAAiB,EAAE;UACjB4D,IAAI,EAAE;QACR,CAAC;QACD9D,WAAW,EAAE;UACX+D,KAAK,EAAE;YACLD,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAE,OAAA,CAAAtE,OAAA,GAAAC,QAAA;AAAAsE,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAAtE,OAAA"}
|
|
1
|
+
{"version":3,"file":"sortTags.js","names":["_defaultTagOrder","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","linesBetween","tagSequence","defaultTagOrder","alphabetizeExtras","reportTagGroupSpacing","reportIntraTagGroupSpacing","options","tagList","flatMap","tags","otherPos","indexOf","endPos","length","ongoingCount","idx","tag","entries","originalIndex","source","originalLine","firstChangedTagLine","firstChangedTagIndex","sortedTags","JSON","parse","stringify","sort","tagNew","tagOld","checkOrSetFirstChanged","newPos","oldPos","preferredNewPos","preferredOldPos","undefined","lastTagsOfGroup","badLastTagsOfGroup","countTagEmptyLines","reduce","acc","tokens","description","name","type","end","tg","empty","innerIdx","currentTag","lastTag","includes","some","tgs","push","ct","fixer","currIdx","newIdx","emptyLine","seedTokens","delimiter","start","existingEmptyLines","_jsdoc$source$newIdx","nextTokens","lineDiff","lines","Array","from","splice","srcIdx","src","number","reportJSDoc","tagIdx","foundFirstTag","nextIdx","ignore","lastTagOfGroup","_jsdoc$source$nextIdx","_jsdoc$source$nextIdx2","firstLine","getFirstLine","fix","itemsToMoveRange","keys","unchangedPriorTagDescriptions","slice","initialOffset","removeTag","changedTags","extraTagCount","changedTag","addTag","addLine","join","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity -- Temporary\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n linesBetween = 1,\n tagSequence = defaultTagOrder,\n alphabetizeExtras = false,\n reportTagGroupSpacing = true,\n reportIntraTagGroupSpacing = true,\n } = context.options[0] || {};\n\n const tagList = tagSequence.flatMap((obj) => {\n /* typeof obj === 'string' ? obj : */\n return obj.tags;\n });\n\n const otherPos = tagList.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagList.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of jsdoc.tags.entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n let firstChangedTagLine;\n let firstChangedTagIndex;\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagList.indexOf(tagNew);\n const oldPos = tagList.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n // Should be ordered by now\n\n const lastTagsOfGroup = [];\n const badLastTagsOfGroup = [];\n\n const countTagEmptyLines = (tag) => {\n return tag.source.reduce((acc, {\n tokens: {\n description,\n name,\n type,\n end,\n tag: tg,\n },\n }) => {\n const empty = !tg && !type && !name && !description;\n // Reset the count so long as there is content\n return empty ? acc + (empty && !end) : 0;\n }, 0);\n };\n\n let idx = 0;\n for (const {\n tags,\n } of tagSequence) {\n let innerIdx;\n let currentTag;\n let lastTag;\n do {\n currentTag = jsdoc.tags[idx];\n if (!currentTag) {\n idx++;\n break;\n }\n\n innerIdx = tags.indexOf(currentTag.tag);\n\n if (\n innerIdx === -1 &&\n // eslint-disable-next-line no-loop-func -- Safe\n (!tags.includes('-other') || tagSequence.some(({\n tags: tgs,\n }) => {\n return tgs.includes(currentTag.tag);\n }))\n ) {\n idx++;\n break;\n }\n\n lastTag = currentTag;\n\n idx++;\n } while (true);\n\n idx--;\n\n if (lastTag) {\n lastTagsOfGroup.push(lastTag);\n const ct = countTagEmptyLines(lastTag);\n if (\n ct !== linesBetween &&\n // Use another rule for adding to end (should be of interest outside this rule)\n jsdoc.tags[idx]\n ) {\n badLastTagsOfGroup.push([\n lastTag, ct,\n ]);\n }\n }\n }\n\n if (reportTagGroupSpacing && badLastTagsOfGroup.length) {\n const fixer = (tg) => {\n return () => {\n // Due to https://github.com/syavorsky/comment-parser/issues/110 ,\n // we have to modify `jsdoc.source` rather than just modify tags\n // directly\n for (const [\n currIdx,\n {\n tokens,\n },\n ] of jsdoc.source.entries()) {\n if (tokens.tag !== '@' + tg.tag) {\n continue;\n }\n\n // Cannot be `tokens.end`, as dropped off last tag, so safe to\n // go on\n let newIdx = currIdx;\n\n const emptyLine = () => {\n return {\n tokens: utils.seedTokens({\n delimiter: '*',\n start: jsdoc.source[newIdx - 1].tokens.start,\n }),\n };\n };\n\n let existingEmptyLines = 0;\n while (true) {\n const nextTokens = jsdoc.source[++newIdx]?.tokens;\n\n /* istanbul ignore if -- Guard */\n if (!nextTokens) {\n return;\n }\n\n // Should be no `nextTokens.end` to worry about since ignored\n // if not followed by tag\n\n if (nextTokens.tag) {\n // Haven't made it to last tag instance yet, so keep looking\n if (nextTokens.tag === tokens.tag) {\n existingEmptyLines = 0;\n continue;\n }\n\n const lineDiff = linesBetween - existingEmptyLines;\n if (lineDiff > 0) {\n const lines = Array.from({\n length: lineDiff,\n }, () => {\n return emptyLine();\n });\n jsdoc.source.splice(newIdx, 0, ...lines);\n } else {\n // lineDiff < 0\n jsdoc.source.splice(\n newIdx + lineDiff,\n -lineDiff,\n );\n }\n\n break;\n }\n\n const empty = !nextTokens.type && !nextTokens.name &&\n !nextTokens.description;\n\n if (empty) {\n existingEmptyLines++;\n } else {\n // Has content again, so reset empty line count\n existingEmptyLines = 0;\n }\n }\n\n break;\n }\n\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n };\n };\n\n for (const [\n tg,\n ct,\n ] of badLastTagsOfGroup) {\n utils.reportJSDoc(\n 'Tag groups do not have the expected whitespace',\n tg,\n fixer(tg, ct),\n );\n }\n\n return;\n }\n\n if (!reportIntraTagGroupSpacing) {\n return;\n }\n\n for (const [\n tagIdx,\n tag,\n ] of jsdoc.tags.entries()) {\n if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {\n continue;\n }\n\n const ct = countTagEmptyLines(tag);\n if (ct) {\n // eslint-disable-next-line complexity -- Temporary\n const fixer = () => {\n let foundFirstTag = false;\n let currentTag;\n for (const [\n currIdx,\n {\n tokens: {\n description,\n name,\n type,\n end,\n tag: tg,\n },\n },\n ] of jsdoc.source.entries()) {\n if (tg) {\n foundFirstTag = true;\n currentTag = tg;\n }\n\n if (!foundFirstTag) {\n continue;\n }\n\n if (currentTag && !tg && !type && !name && !description && !end) {\n let nextIdx = currIdx;\n\n let ignore = true;\n // Even if a tag of the same name as the last tags in a group,\n // could still be an earlier tag in that group\n\n // eslint-disable-next-line no-loop-func -- Safe\n if (lastTagsOfGroup.some((lastTagOfGroup) => {\n return currentTag === '@' + lastTagOfGroup.tag;\n })) {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens) {\n break;\n }\n\n if (!nextTokens.tag) {\n continue;\n }\n\n // Followed by the same tag name, so not actually last in group,\n // and of interest\n if (nextTokens.tag === currentTag) {\n ignore = false;\n }\n }\n } else {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens || nextTokens.end) {\n break;\n }\n\n // Not the very last tag, so don't ignore\n if (nextTokens.tag) {\n ignore = false;\n break;\n }\n }\n }\n\n if (!ignore) {\n jsdoc.source.splice(currIdx, 1);\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n }\n }\n }\n };\n\n utils.reportJSDoc(\n 'Intra-group tags have unexpected whitespace',\n tag,\n fixer,\n );\n }\n }\n\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length - firstChangedTagIndex,\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = firstLine + firstChangedTagIndex +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(idx + firstChangedTagIndex);\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${\n tagList.join(', ') || '(alphabetical)'\n }`,\n jsdoc.tags[firstChangedTagIndex],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Sorts tags by a specified sequence according to tag name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-sort-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n type: 'boolean',\n },\n linesBetween: {\n type: 'integer',\n },\n reportIntraTagGroupSpacing: {\n type: 'boolean',\n },\n reportTagGroupSpacing: {\n type: 'boolean',\n },\n tagSequence: {\n items: {\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE3C;AAAA,IAAAG,QAAA,GACe,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,YAAY,GAAG,CAAC;IAChBC,WAAW,GAAGC,wBAAe;IAC7BC,iBAAiB,GAAG,KAAK;IACzBC,qBAAqB,GAAG,IAAI;IAC5BC,0BAA0B,GAAG;EAC/B,CAAC,GAAGR,OAAO,CAACS,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAMC,OAAO,GAAGN,WAAW,CAACO,OAAO,CAAEhB,GAAG,IAAK;IAC3C;IACA,OAAOA,GAAG,CAACiB,IAAI;EACjB,CAAC,CAAC;EAEF,MAAMC,QAAQ,GAAGH,OAAO,CAACI,OAAO,CAAC,QAAQ,CAAC;EAC1C,MAAMC,MAAM,GAAGF,QAAQ,GAAG,CAAC,CAAC,GAAGA,QAAQ,GAAGH,OAAO,CAACM,MAAM;EAExD,IAAIC,YAAY,GAAG,CAAC;EACpB,KAAK,MAAM,CACTC,GAAG,EACHC,GAAG,CACJ,IAAIlB,KAAK,CAACW,IAAI,CAACQ,OAAO,EAAE,EAAE;IACzBD,GAAG,CAACE,aAAa,GAAGH,GAAG;IACvBD,YAAY,IAAIE,GAAG,CAACG,MAAM,CAACN,MAAM;IACjCG,GAAG,CAACI,YAAY,GAAGN,YAAY;EACjC;EAEA,IAAIO,mBAAmB;EACvB,IAAIC,oBAAoB;EACxB,MAAMC,UAAU,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAAC5B,KAAK,CAACW,IAAI,CAAC,CAAC;EACzDc,UAAU,CAACI,IAAI,CAAC,CAAC;IACfX,GAAG,EAAEY;EACP,CAAC,EAAE;IACDV,aAAa;IACbE,YAAY;IACZJ,GAAG,EAAEa;EACP,CAAC,KAAK;IACJ;IACA,IAAID,MAAM,KAAKC,MAAM,EAAE;MACrB,OAAO,CAAC;IACV;IAEA,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;MACnC,IAAI,CAACT,mBAAmB,IAAID,YAAY,GAAGC,mBAAmB,EAAE;QAC9DA,mBAAmB,GAAGD,YAAY;QAClCE,oBAAoB,GAAGJ,aAAa;MACtC;IACF,CAAC;IAED,MAAMa,MAAM,GAAGxB,OAAO,CAACI,OAAO,CAACiB,MAAM,CAAC;IACtC,MAAMI,MAAM,GAAGzB,OAAO,CAACI,OAAO,CAACkB,MAAM,CAAC;IAEtC,MAAMI,eAAe,GAAGF,MAAM,KAAK,CAAC,CAAC,GAAGnB,MAAM,GAAGmB,MAAM;IACvD,MAAMG,eAAe,GAAGF,MAAM,KAAK,CAAC,CAAC,GAAGpB,MAAM,GAAGoB,MAAM;IAEvD,IAAIC,eAAe,GAAGC,eAAe,EAAE;MACrCJ,sBAAsB,EAAE;MACxB,OAAO,CAAC,CAAC;IACX;IAEA,IAAIG,eAAe,GAAGC,eAAe,EAAE;MACrC,OAAO,CAAC;IACV;;IAEA;IACA,IACE,CAAC/B,iBAAiB;IAElB;IACA;IACA;IACA4B,MAAM,IAAI,CAAC,EACX;MACA,OAAO,CAAC;IACV;IAEA,IAAIH,MAAM,GAAGC,MAAM,EAAE;MACnBC,sBAAsB,EAAE;MACxB,OAAO,CAAC,CAAC;IACX;;IAEA;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EAEF,IAAIT,mBAAmB,KAAKc,SAAS,EAAE;IACrC;;IAEA,MAAMC,eAAe,GAAG,EAAE;IAC1B,MAAMC,kBAAkB,GAAG,EAAE;IAE7B,MAAMC,kBAAkB,GAAItB,GAAG,IAAK;MAClC,OAAOA,GAAG,CAACG,MAAM,CAACoB,MAAM,CAAC,CAACC,GAAG,EAAE;QAC7BC,MAAM,EAAE;UACNC,WAAW;UACXC,IAAI;UACJC,IAAI;UACJC,GAAG;UACH7B,GAAG,EAAE8B;QACP;MACF,CAAC,KAAK;QACJ,MAAMC,KAAK,GAAG,CAACD,EAAE,IAAI,CAACF,IAAI,IAAI,CAACD,IAAI,IAAI,CAACD,WAAW;QACnD;QACA,OAAOK,KAAK,GAAGP,GAAG,IAAIO,KAAK,IAAI,CAACF,GAAG,CAAC,GAAG,CAAC;MAC1C,CAAC,EAAE,CAAC,CAAC;IACP,CAAC;IAED,IAAI9B,GAAG,GAAG,CAAC;IACX,KAAK,MAAM;MACTN;IACF,CAAC,IAAIR,WAAW,EAAE;MAChB,IAAI+C,QAAQ;MACZ,IAAIC,UAAU;MACd,IAAIC,OAAO;MACX,GAAG;QACDD,UAAU,GAAGnD,KAAK,CAACW,IAAI,CAACM,GAAG,CAAC;QAC5B,IAAI,CAACkC,UAAU,EAAE;UACflC,GAAG,EAAE;UACL;QACF;QAEAiC,QAAQ,GAAGvC,IAAI,CAACE,OAAO,CAACsC,UAAU,CAACjC,GAAG,CAAC;QAEvC,IACEgC,QAAQ,KAAK,CAAC,CAAC;QACf;QACC,CAACvC,IAAI,CAAC0C,QAAQ,CAAC,QAAQ,CAAC,IAAIlD,WAAW,CAACmD,IAAI,CAAC,CAAC;UAC7C3C,IAAI,EAAE4C;QACR,CAAC,KAAK;UACJ,OAAOA,GAAG,CAACF,QAAQ,CAACF,UAAU,CAACjC,GAAG,CAAC;QACrC,CAAC,CAAC,CAAC,EACH;UACAD,GAAG,EAAE;UACL;QACF;QAEAmC,OAAO,GAAGD,UAAU;QAEpBlC,GAAG,EAAE;MACP,CAAC,QAAQ,IAAI;MAEbA,GAAG,EAAE;MAEL,IAAImC,OAAO,EAAE;QACXd,eAAe,CAACkB,IAAI,CAACJ,OAAO,CAAC;QAC7B,MAAMK,EAAE,GAAGjB,kBAAkB,CAACY,OAAO,CAAC;QACtC,IACEK,EAAE,KAAKvD,YAAY;QACnB;QACAF,KAAK,CAACW,IAAI,CAACM,GAAG,CAAC,EACf;UACAsB,kBAAkB,CAACiB,IAAI,CAAC,CACtBJ,OAAO,EAAEK,EAAE,CACZ,CAAC;QACJ;MACF;IACF;IAEA,IAAInD,qBAAqB,IAAIiC,kBAAkB,CAACxB,MAAM,EAAE;MACtD,MAAM2C,KAAK,GAAIV,EAAE,IAAK;QACpB,OAAO,MAAM;UACX;UACA;UACA;UACA,KAAK,MAAM,CACTW,OAAO,EACP;YACEhB;UACF,CAAC,CACF,IAAI3C,KAAK,CAACqB,MAAM,CAACF,OAAO,EAAE,EAAE;YAC3B,IAAIwB,MAAM,CAACzB,GAAG,KAAK,GAAG,GAAG8B,EAAE,CAAC9B,GAAG,EAAE;cAC/B;YACF;;YAEA;YACA;YACA,IAAI0C,MAAM,GAAGD,OAAO;YAEpB,MAAME,SAAS,GAAGA,CAAA,KAAM;cACtB,OAAO;gBACLlB,MAAM,EAAE1C,KAAK,CAAC6D,UAAU,CAAC;kBACvBC,SAAS,EAAE,GAAG;kBACdC,KAAK,EAAEhE,KAAK,CAACqB,MAAM,CAACuC,MAAM,GAAG,CAAC,CAAC,CAACjB,MAAM,CAACqB;gBACzC,CAAC;cACH,CAAC;YACH,CAAC;YAED,IAAIC,kBAAkB,GAAG,CAAC;YAC1B,OAAO,IAAI,EAAE;cAAA,IAAAC,oBAAA;cACX,MAAMC,UAAU,IAAAD,oBAAA,GAAGlE,KAAK,CAACqB,MAAM,CAAC,EAAEuC,MAAM,CAAC,cAAAM,oBAAA,uBAAtBA,oBAAA,CAAwBvB,MAAM;;cAEjD;cACA,IAAI,CAACwB,UAAU,EAAE;gBACf;cACF;;cAEA;cACA;;cAEA,IAAIA,UAAU,CAACjD,GAAG,EAAE;gBAClB;gBACA,IAAIiD,UAAU,CAACjD,GAAG,KAAKyB,MAAM,CAACzB,GAAG,EAAE;kBACjC+C,kBAAkB,GAAG,CAAC;kBACtB;gBACF;gBAEA,MAAMG,QAAQ,GAAGlE,YAAY,GAAG+D,kBAAkB;gBAClD,IAAIG,QAAQ,GAAG,CAAC,EAAE;kBAChB,MAAMC,KAAK,GAAGC,KAAK,CAACC,IAAI,CAAC;oBACvBxD,MAAM,EAAEqD;kBACV,CAAC,EAAE,MAAM;oBACP,OAAOP,SAAS,EAAE;kBACpB,CAAC,CAAC;kBACF7D,KAAK,CAACqB,MAAM,CAACmD,MAAM,CAACZ,MAAM,EAAE,CAAC,EAAE,GAAGS,KAAK,CAAC;gBAC1C,CAAC,MAAM;kBACL;kBACArE,KAAK,CAACqB,MAAM,CAACmD,MAAM,CACjBZ,MAAM,GAAGQ,QAAQ,EACjB,CAACA,QAAQ,CACV;gBACH;gBAEA;cACF;cAEA,MAAMnB,KAAK,GAAG,CAACkB,UAAU,CAACrB,IAAI,IAAI,CAACqB,UAAU,CAACtB,IAAI,IAChD,CAACsB,UAAU,CAACvB,WAAW;cAEzB,IAAIK,KAAK,EAAE;gBACTgB,kBAAkB,EAAE;cACtB,CAAC,MAAM;gBACL;gBACAA,kBAAkB,GAAG,CAAC;cACxB;YACF;YAEA;UACF;UAEA,KAAK,MAAM,CACTQ,MAAM,EACNC,GAAG,CACJ,IAAI1E,KAAK,CAACqB,MAAM,CAACF,OAAO,EAAE,EAAE;YAC3BuD,GAAG,CAACC,MAAM,GAAGF,MAAM;UACrB;QACF,CAAC;MACH,CAAC;MAED,KAAK,MAAM,CACTzB,EAAE,EACFS,EAAE,CACH,IAAIlB,kBAAkB,EAAE;QACvBtC,KAAK,CAAC2E,WAAW,CACf,gDAAgD,EAChD5B,EAAE,EACFU,KAAK,CAACV,EAAE,EAAES,EAAE,CAAC,CACd;MACH;MAEA;IACF;IAEA,IAAI,CAAClD,0BAA0B,EAAE;MAC/B;IACF;IAEA,KAAK,MAAM,CACTsE,MAAM,EACN3D,GAAG,CACJ,IAAIlB,KAAK,CAACW,IAAI,CAACQ,OAAO,EAAE,EAAE;MACzB,IAAI,CAACnB,KAAK,CAACW,IAAI,CAACkE,MAAM,GAAG,CAAC,CAAC,IAAIvC,eAAe,CAACe,QAAQ,CAACnC,GAAG,CAAC,EAAE;QAC5D;MACF;MAEA,MAAMuC,EAAE,GAAGjB,kBAAkB,CAACtB,GAAG,CAAC;MAClC,IAAIuC,EAAE,EAAE;QACN;QACA,MAAMC,KAAK,GAAGA,CAAA,KAAM;UAClB,IAAIoB,aAAa,GAAG,KAAK;UACzB,IAAI3B,UAAU;UACd,KAAK,MAAM,CACTQ,OAAO,EACP;YACEhB,MAAM,EAAE;cACNC,WAAW;cACXC,IAAI;cACJC,IAAI;cACJC,GAAG;cACH7B,GAAG,EAAE8B;YACP;UACF,CAAC,CACF,IAAIhD,KAAK,CAACqB,MAAM,CAACF,OAAO,EAAE,EAAE;YAC3B,IAAI6B,EAAE,EAAE;cACN8B,aAAa,GAAG,IAAI;cACpB3B,UAAU,GAAGH,EAAE;YACjB;YAEA,IAAI,CAAC8B,aAAa,EAAE;cAClB;YACF;YAEA,IAAI3B,UAAU,IAAI,CAACH,EAAE,IAAI,CAACF,IAAI,IAAI,CAACD,IAAI,IAAI,CAACD,WAAW,IAAI,CAACG,GAAG,EAAE;cAC/D,IAAIgC,OAAO,GAAGpB,OAAO;cAErB,IAAIqB,MAAM,GAAG,IAAI;cACjB;cACA;;cAEA;cACA,IAAI1C,eAAe,CAACgB,IAAI,CAAE2B,cAAc,IAAK;gBAC3C,OAAO9B,UAAU,KAAK,GAAG,GAAG8B,cAAc,CAAC/D,GAAG;cAChD,CAAC,CAAC,EAAE;gBACF,OAAO,IAAI,EAAE;kBAAA,IAAAgE,qBAAA;kBACX,MAAMf,UAAU,IAAAe,qBAAA,GAAGlF,KAAK,CAACqB,MAAM,CAAC,EAAE0D,OAAO,CAAC,cAAAG,qBAAA,uBAAvBA,qBAAA,CAAyBvC,MAAM;kBAClD,IAAI,CAACwB,UAAU,EAAE;oBACf;kBACF;kBAEA,IAAI,CAACA,UAAU,CAACjD,GAAG,EAAE;oBACnB;kBACF;;kBAEA;kBACA;kBACA,IAAIiD,UAAU,CAACjD,GAAG,KAAKiC,UAAU,EAAE;oBACjC6B,MAAM,GAAG,KAAK;kBAChB;gBACF;cACF,CAAC,MAAM;gBACL,OAAO,IAAI,EAAE;kBAAA,IAAAG,sBAAA;kBACX,MAAMhB,UAAU,IAAAgB,sBAAA,GAAGnF,KAAK,CAACqB,MAAM,CAAC,EAAE0D,OAAO,CAAC,cAAAI,sBAAA,uBAAvBA,sBAAA,CAAyBxC,MAAM;kBAClD,IAAI,CAACwB,UAAU,IAAIA,UAAU,CAACpB,GAAG,EAAE;oBACjC;kBACF;;kBAEA;kBACA,IAAIoB,UAAU,CAACjD,GAAG,EAAE;oBAClB8D,MAAM,GAAG,KAAK;oBACd;kBACF;gBACF;cACF;cAEA,IAAI,CAACA,MAAM,EAAE;gBACXhF,KAAK,CAACqB,MAAM,CAACmD,MAAM,CAACb,OAAO,EAAE,CAAC,CAAC;gBAC/B,KAAK,MAAM,CACTc,MAAM,EACNC,GAAG,CACJ,IAAI1E,KAAK,CAACqB,MAAM,CAACF,OAAO,EAAE,EAAE;kBAC3BuD,GAAG,CAACC,MAAM,GAAGF,MAAM;gBACrB;cACF;YACF;UACF;QACF,CAAC;QAEDxE,KAAK,CAAC2E,WAAW,CACf,6CAA6C,EAC7C1D,GAAG,EACHwC,KAAK,CACN;MACH;IACF;IAEA;EACF;EAEA,MAAM0B,SAAS,GAAGnF,KAAK,CAACoF,YAAY,EAAE;EAEtC,MAAMC,GAAG,GAAGA,CAAA,KAAM;IAChB,MAAMC,gBAAgB,GAAG,CACvB,GAAGjB,KAAK,CAACC,IAAI,CAAC;MACZxD,MAAM,EAAEf,KAAK,CAACW,IAAI,CAACI,MAAM,GAAGS;IAC9B,CAAC,CAAC,CAACgE,IAAI,EAAE,CACV;IAED,MAAMC,6BAA6B,GAAGzF,KAAK,CAACW,IAAI,CAAC+E,KAAK,CACpD,CAAC,EACDlE,oBAAoB,CACrB,CAACiB,MAAM,CAAC,CAACgB,EAAE,EAAE;MACZpC;IACF,CAAC,KAAK;MACJ,OAAOoC,EAAE,GAAGpC,MAAM,CAACN,MAAM,GAAG,CAAC;IAC/B,CAAC,EAAE,CAAC,CAAC;;IAEL;IACA;IACA;IACA,MAAM4E,aAAa,GAAGP,SAAS,GAAG5D,oBAAoB;IAEpD;IACAiE,6BAA6B;;IAE/B;IACA,KAAK,MAAMxE,GAAG,IAAIsE,gBAAgB,EAAE;MAClCtF,KAAK,CAAC2F,SAAS,CAAC3E,GAAG,GAAGO,oBAAoB,CAAC;IAC7C;IAEA,MAAMqE,WAAW,GAAGpE,UAAU,CAACiE,KAAK,CAAClE,oBAAoB,CAAC;IAC1D,IAAIsE,aAAa,GAAG,CAAC;IAErB,KAAK,MAAM7E,GAAG,IAAIsE,gBAAgB,EAAE;MAClC,MAAMQ,UAAU,GAAGF,WAAW,CAAC5E,GAAG,CAAC;MAEnChB,KAAK,CAAC+F,MAAM,CACVD,UAAU,CAAC7E,GAAG,EACd4E,aAAa,GAAGH,aAAa,GAAG1E,GAAG,EACnC;QACE,GAAG8E,UAAU,CAAC1E,MAAM,CAAC,CAAC,CAAC,CAACsB,MAAM;QAE9B;QACA;QACAI,GAAG,EAAE;MACP,CAAC,CACF;MAED,KAAK,MAAM;QACTJ;MACF,CAAC,IAAIoD,UAAU,CAAC1E,MAAM,CAACqE,KAAK,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,CAAC/C,MAAM,CAACI,GAAG,EAAE;UACf9C,KAAK,CAACgG,OAAO,CACXH,aAAa,GAAGH,aAAa,GAAG1E,GAAG,GAAG,CAAC,EACvC;YACE,GAAG0B,MAAM;YACTI,GAAG,EAAE;UACP,CAAC,CACF;UACD+C,aAAa,EAAE;QACjB;MACF;IACF;EACF,CAAC;EAED7F,KAAK,CAAC2E,WAAW,CACd,yCACCnE,OAAO,CAACyF,IAAI,CAAC,IAAI,CAAC,IAAI,gBACvB,EAAC,EACFlG,KAAK,CAACW,IAAI,CAACa,oBAAoB,CAAC,EAChC8D,GAAG,EACH,IAAI,CACL;AACH,CAAC,EAAE;EACDa,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJzD,WAAW,EAAE,2DAA2D;MACxE0D,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVrG,iBAAiB,EAAE;UACjByC,IAAI,EAAE;QACR,CAAC;QACD5C,YAAY,EAAE;UACZ4C,IAAI,EAAE;QACR,CAAC;QACDvC,0BAA0B,EAAE;UAC1BuC,IAAI,EAAE;QACR,CAAC;QACDxC,qBAAqB,EAAE;UACrBwC,IAAI,EAAE;QACR,CAAC;QACD3C,WAAW,EAAE;UACXwG,KAAK,EAAE;YACLD,UAAU,EAAE;cACV/F,IAAI,EAAE;gBACJgG,KAAK,EAAE;kBACL7D,IAAI,EAAE;gBACR,CAAC;gBACDA,IAAI,EAAE;cACR;YACF,CAAC;YACDA,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA8D,OAAA,CAAAhH,OAAA,GAAAC,QAAA;AAAAgH,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAAhH,OAAA"}
|
package/package.json
CHANGED