eslint-plugin-jsdoc 15.11.0 → 15.12.2
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 +111 -12
- package/dist/exportParser.js +5 -2
- package/dist/exportParser.js.map +1 -1
- package/dist/iterateJsdoc.js +7 -4
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +58 -17
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAlignment.js +7 -5
- package/dist/rules/checkAlignment.js.map +1 -1
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkTagNames.js +1 -1
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +1 -3
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +44 -18
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireParamDescription.js.map +1 -1
- package/dist/rules/requireParamName.js.map +1 -1
- package/dist/rules/requireParamType.js.map +1 -1
- package/dist/tagNames.js +7 -4
- package/dist/tagNames.js.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -328,7 +328,7 @@ Reports invalid alignment of JSDoc block asterisks.
|
|
|
328
328
|
|
|
329
329
|
|||
|
|
330
330
|
|---|---|
|
|
331
|
-
|Context
|
|
331
|
+
|Context|everywhere|
|
|
332
332
|
|Tags|N/A|
|
|
333
333
|
|
|
334
334
|
The following patterns are considered problems:
|
|
@@ -338,7 +338,31 @@ The following patterns are considered problems:
|
|
|
338
338
|
* @param {Number} foo
|
|
339
339
|
*/
|
|
340
340
|
function quux (foo) {
|
|
341
|
+
// with spaces
|
|
342
|
+
}
|
|
343
|
+
// Message: Expected JSDoc block to be aligned.
|
|
341
344
|
|
|
345
|
+
/**
|
|
346
|
+
* @param {Number} foo
|
|
347
|
+
*/
|
|
348
|
+
function quux (foo) {
|
|
349
|
+
// with tabs
|
|
350
|
+
}
|
|
351
|
+
// Message: Expected JSDoc block to be aligned.
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* @param {Number} foo
|
|
355
|
+
*/
|
|
356
|
+
function quux (foo) {
|
|
357
|
+
// with spaces
|
|
358
|
+
}
|
|
359
|
+
// Message: Expected JSDoc block to be aligned.
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* @param {Number} foo
|
|
363
|
+
*/
|
|
364
|
+
function quux (foo) {
|
|
365
|
+
// with spaces
|
|
342
366
|
}
|
|
343
367
|
// Message: Expected JSDoc block to be aligned.
|
|
344
368
|
|
|
@@ -1737,9 +1761,11 @@ function quux (foo) {
|
|
|
1737
1761
|
// Settings: {"jsdoc":{"tagNamePreference":{"param":"baz","returns":{"message":"Prefer `bar`","replacement":"bar"},"todo":false}}}
|
|
1738
1762
|
|
|
1739
1763
|
/**
|
|
1764
|
+
* @modifies
|
|
1740
1765
|
* @abstract
|
|
1741
1766
|
* @access
|
|
1742
1767
|
* @alias
|
|
1768
|
+
* @async
|
|
1743
1769
|
* @augments
|
|
1744
1770
|
* @author
|
|
1745
1771
|
* @borrows
|
|
@@ -1760,7 +1786,9 @@ function quux (foo) {
|
|
|
1760
1786
|
* @file
|
|
1761
1787
|
* @fires
|
|
1762
1788
|
* @function
|
|
1789
|
+
* @generator
|
|
1763
1790
|
* @global
|
|
1791
|
+
* @hideconstructor
|
|
1764
1792
|
* @ignore
|
|
1765
1793
|
* @implements
|
|
1766
1794
|
* @inheritdoc
|
|
@@ -1780,6 +1808,7 @@ function quux (foo) {
|
|
|
1780
1808
|
* @name
|
|
1781
1809
|
* @namespace
|
|
1782
1810
|
* @override
|
|
1811
|
+
* @package
|
|
1783
1812
|
* @param
|
|
1784
1813
|
* @private
|
|
1785
1814
|
* @property
|
|
@@ -1800,6 +1829,7 @@ function quux (foo) {
|
|
|
1800
1829
|
* @typedef
|
|
1801
1830
|
* @variation
|
|
1802
1831
|
* @version
|
|
1832
|
+
* @yields
|
|
1803
1833
|
*/
|
|
1804
1834
|
function quux (foo) {}
|
|
1805
1835
|
|
|
@@ -1917,8 +1947,8 @@ String | **string** | **string** | `("test") instanceof String` -> **`false`**
|
|
|
1917
1947
|
|||
|
|
1918
1948
|
|---|---|
|
|
1919
1949
|
|Context|everywhere|
|
|
1920
|
-
|Tags|`class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`|
|
|
1921
|
-
|Aliases|`constructor`, `const`, `var`, `arg`, `argument`, `prop`, `return`, `exception`|
|
|
1950
|
+
|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`|
|
|
1951
|
+
|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`|
|
|
1922
1952
|
|Closure-only|`package`, `private`, `protected`, `public`, `static`|
|
|
1923
1953
|
|Options|`noDefaults`, `unifyParentAndChildTypeChecks`|
|
|
1924
1954
|
|Settings|`preferredTypes`|
|
|
@@ -3642,8 +3672,8 @@ An option object may have the following key:
|
|
|
3642
3672
|
|||
|
|
3643
3673
|
|---|---|
|
|
3644
3674
|
|Context|everywhere|
|
|
3645
|
-
|Tags|`class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`|
|
|
3646
|
-
|Aliases|`constructor`, `const`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`|
|
|
3675
|
+
|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`|
|
|
3676
|
+
|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`|
|
|
3647
3677
|
|Closure-only|`package`, `private`, `protected`, `public`, `static`|
|
|
3648
3678
|
|Options|`definedTypes`|
|
|
3649
3679
|
|Settings|`preferredTypes`|
|
|
@@ -4572,6 +4602,14 @@ function quux () {
|
|
|
4572
4602
|
// Settings: {"jsdoc":{"tagNamePreference":{"description":false}}}
|
|
4573
4603
|
// Options: [{"descriptionStyle":"any"}]
|
|
4574
4604
|
// Message: Missing JSDoc block description or @description declaration.
|
|
4605
|
+
|
|
4606
|
+
/**
|
|
4607
|
+
*
|
|
4608
|
+
*/
|
|
4609
|
+
function quux () {
|
|
4610
|
+
}
|
|
4611
|
+
// Options: [{"exemptedBy":["notPresent"]}]
|
|
4612
|
+
// Message: Missing JSDoc block description.
|
|
4575
4613
|
````
|
|
4576
4614
|
|
|
4577
4615
|
The following patterns are not considered problems:
|
|
@@ -4795,6 +4833,14 @@ class quux {
|
|
|
4795
4833
|
}
|
|
4796
4834
|
// Options: [{"contexts":["ClassDeclaration"]}]
|
|
4797
4835
|
// Message: Missing JSDoc @example declaration.
|
|
4836
|
+
|
|
4837
|
+
/**
|
|
4838
|
+
*
|
|
4839
|
+
*/
|
|
4840
|
+
function quux () {
|
|
4841
|
+
}
|
|
4842
|
+
// Options: [{"exemptedBy":["notPresent"]}]
|
|
4843
|
+
// Message: Missing JSDoc @example declaration.
|
|
4798
4844
|
````
|
|
4799
4845
|
|
|
4800
4846
|
The following patterns are not considered problems:
|
|
@@ -5038,7 +5084,7 @@ Accepts one optional options object with the following optional keys.
|
|
|
5038
5084
|
|
|
5039
5085
|
|||
|
|
5040
5086
|
|---|---|
|
|
5041
|
-
|Context|`ArrowFunctionExpression`, `ClassDeclaration`, `ClassExpression`, `FunctionDeclaration`, `FunctionExpression
|
|
5087
|
+
|Context|`ArrowFunctionExpression`, `ClassDeclaration`, `ClassExpression`, `FunctionDeclaration`, `FunctionExpression`; others when `contexts` option enabled|
|
|
5042
5088
|
|Tags|N/A|
|
|
5043
5089
|
|Options|`publicOnly`, `require`, `contexts`, `exemptEmptyFunctions`|
|
|
5044
5090
|
|
|
@@ -5991,6 +6037,10 @@ enum Example {
|
|
|
5991
6037
|
test = 123
|
|
5992
6038
|
}
|
|
5993
6039
|
// Options: [{"contexts":["TSEnumDeclaration"]}]
|
|
6040
|
+
|
|
6041
|
+
const foo = {...{}};
|
|
6042
|
+
function bar() {}
|
|
6043
|
+
// Options: [{"exemptEmptyFunctions":false,"publicOnly":true,"require":{"ArrowFunctionExpression":true,"ClassDeclaration":true,"ClassExpression":true,"FunctionDeclaration":true,"FunctionExpression":false,"MethodDefinition":true}}]
|
|
5994
6044
|
````
|
|
5995
6045
|
|
|
5996
6046
|
|
|
@@ -6371,6 +6421,35 @@ function quux (foo) {
|
|
|
6371
6421
|
}
|
|
6372
6422
|
// Settings: {"jsdoc":{"tagNamePreference":{"param":false}}}
|
|
6373
6423
|
// Message: Unexpected tag `@param`
|
|
6424
|
+
|
|
6425
|
+
/**
|
|
6426
|
+
*
|
|
6427
|
+
*/
|
|
6428
|
+
function quux ({bar, baz}, foo) {
|
|
6429
|
+
}
|
|
6430
|
+
// Message: Missing JSDoc @param "foo" declaration.
|
|
6431
|
+
|
|
6432
|
+
/**
|
|
6433
|
+
*
|
|
6434
|
+
*/
|
|
6435
|
+
function quux (foo, {bar, baz}) {
|
|
6436
|
+
}
|
|
6437
|
+
// Message: Missing JSDoc @param "foo" declaration.
|
|
6438
|
+
|
|
6439
|
+
/**
|
|
6440
|
+
*
|
|
6441
|
+
*/
|
|
6442
|
+
function quux ([bar, baz], foo) {
|
|
6443
|
+
}
|
|
6444
|
+
// Message: Missing JSDoc @param "foo" declaration.
|
|
6445
|
+
|
|
6446
|
+
/**
|
|
6447
|
+
*
|
|
6448
|
+
*/
|
|
6449
|
+
function quux (foo) {
|
|
6450
|
+
}
|
|
6451
|
+
// Options: [{"exemptedBy":["notPresent"]}]
|
|
6452
|
+
// Message: Missing JSDoc @param "foo" declaration.
|
|
6374
6453
|
````
|
|
6375
6454
|
|
|
6376
6455
|
The following patterns are not considered problems:
|
|
@@ -7376,6 +7455,15 @@ function quux () {
|
|
|
7376
7455
|
}
|
|
7377
7456
|
// Settings: {"jsdoc":{"tagNamePreference":{"returns":false}}}
|
|
7378
7457
|
// Message: Unexpected tag `@returns`
|
|
7458
|
+
|
|
7459
|
+
/**
|
|
7460
|
+
* @param foo
|
|
7461
|
+
*/
|
|
7462
|
+
function quux (foo) {
|
|
7463
|
+
return 'bar';
|
|
7464
|
+
}
|
|
7465
|
+
// Options: [{"exemptedBy":["notPresent"]}]
|
|
7466
|
+
// Message: Missing JSDoc @returns declaration.
|
|
7379
7467
|
````
|
|
7380
7468
|
|
|
7381
7469
|
The following patterns are not considered problems:
|
|
@@ -7663,7 +7751,7 @@ Also impacts behaviors on namepath (or event)-defining and pointing tags:
|
|
|
7663
7751
|
1. Name(path)-pointing tags requiring namepath: `@alias`, `@augments`, `@extends`, `@lends`, `@memberof`, `@memberof!`, `@mixes`, `@this`
|
|
7664
7752
|
1. Name(path)-pointing tags (which may have value without namepath or their
|
|
7665
7753
|
namepath can be expressed elsewhere on the block): `@listens`, `@fires`,
|
|
7666
|
-
`@emits`
|
|
7754
|
+
`@emits`, and `@modifies`
|
|
7667
7755
|
1. Name(path)-pointing tags (multiple names in one): `@borrows`
|
|
7668
7756
|
|
|
7669
7757
|
...with the following applying to the above sets:
|
|
@@ -7689,10 +7777,10 @@ Also impacts behaviors on namepath (or event)-defining and pointing tags:
|
|
|
7689
7777
|
empty name paths with `@callback`, `@event`, `@class`, `@constructor`,
|
|
7690
7778
|
`@constant`, `@const`, `@function`, `@func`, `@method`, `@interface`,
|
|
7691
7779
|
`@member`, `@var`, `@mixin`, `@namespace`, `@listens`, `@fires`,
|
|
7692
|
-
or `@emits` (these might often be expected to have an
|
|
7693
|
-
name path, though they have some indicative value without
|
|
7694
|
-
may also allow names to be defined in another manner elsewhere
|
|
7695
|
-
the block)
|
|
7780
|
+
`@modifies`, or `@emits` (these might often be expected to have an
|
|
7781
|
+
accompanying name path, though they have some indicative value without
|
|
7782
|
+
one; these may also allow names to be defined in another manner elsewhere
|
|
7783
|
+
in the block)
|
|
7696
7784
|
- `checkSeesForNamepaths` (default: false) - Set this to `true` to insist
|
|
7697
7785
|
that `@see` only use name paths (the tag is normally permitted to
|
|
7698
7786
|
allow other text)
|
|
@@ -7701,7 +7789,7 @@ Also impacts behaviors on namepath (or event)-defining and pointing tags:
|
|
|
7701
7789
|
|||
|
|
7702
7790
|
|---|---|
|
|
7703
7791
|
|Context|everywhere|
|
|
7704
|
-
|Tags|For name only unless otherwise stated: `alias`, `augments`, `borrows`, `callback`, `class` (for name and type), `constant` (for name and type), `enum` (for type), `event`, `external`, `fires`, `function`, `implements` (for type), `interface`, `lends`, `listens`, `member` (for name and type), `memberof`, `memberof!`, `mixes`, `mixin`, `module` (for name and type), `name`, `namespace` (for name and type), `param` (for name and type), `property` (for name and type), `returns` (for type), `this`, `throws` (for type), `type` (for type), `typedef` (for name and type), `yields` (for type)|
|
|
7792
|
+
|Tags|For name only unless otherwise stated: `alias`, `augments`, `borrows`, `callback`, `class` (for name and type), `constant` (for name and type), `enum` (for type), `event`, `external`, `fires`, `function`, `implements` (for type), `interface`, `lends`, `listens`, `member` (for name and type), `memberof`, `memberof!`, `mixes`, `mixin`, `modifies`, `module` (for name and type), `name`, `namespace` (for name and type), `param` (for name and type), `property` (for name and type), `returns` (for type), `this`, `throws` (for type), `type` (for type), `typedef` (for name and type), `yields` (for type)|
|
|
7705
7793
|
|Aliases|`extends`, `constructor`, `const`, `host`, `emits`, `func`, `method`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`|
|
|
7706
7794
|
|Closure-only|For type only: `package`, `private`, `protected`, `public`, `static`|
|
|
7707
7795
|
|Options|`allowEmptyNamepaths`, `checkSeesForNamepaths`|
|
|
@@ -7831,6 +7919,12 @@ function quux() {
|
|
|
7831
7919
|
*/
|
|
7832
7920
|
let foo;
|
|
7833
7921
|
// Message: Tag @type must have a type
|
|
7922
|
+
|
|
7923
|
+
/**
|
|
7924
|
+
* @modifies {bar|foo<}
|
|
7925
|
+
*/
|
|
7926
|
+
function quux (foo, bar, baz) {}
|
|
7927
|
+
// Message: Syntax error in type: bar|foo<
|
|
7834
7928
|
````
|
|
7835
7929
|
|
|
7836
7930
|
The following patterns are not considered problems:
|
|
@@ -7972,6 +8066,11 @@ function quux() {
|
|
|
7972
8066
|
* @typedef {number|string}
|
|
7973
8067
|
*/
|
|
7974
8068
|
let UserDefinedGCCType;
|
|
8069
|
+
|
|
8070
|
+
/**
|
|
8071
|
+
* @modifies {foo|bar}
|
|
8072
|
+
*/
|
|
8073
|
+
function quux (foo, bar, baz) {}
|
|
7975
8074
|
````
|
|
7976
8075
|
|
|
7977
8076
|
|
package/dist/exportParser.js
CHANGED
|
@@ -68,7 +68,6 @@ let _createSymbol = null;
|
|
|
68
68
|
|
|
69
69
|
const getSymbol = function getSymbol(node, globals, scope, opt) {
|
|
70
70
|
const opts = opt || {};
|
|
71
|
-
let block = scope;
|
|
72
71
|
|
|
73
72
|
switch (node.type) {
|
|
74
73
|
case 'Identifier':
|
|
@@ -86,7 +85,7 @@ const getSymbol = function getSymbol(node, globals, scope, opt) {
|
|
|
86
85
|
/* istanbul ignore next */
|
|
87
86
|
|
|
88
87
|
if (obj && propertyValue && obj.props[propertyValue]) {
|
|
89
|
-
block = obj.props[propertyValue];
|
|
88
|
+
const block = obj.props[propertyValue];
|
|
90
89
|
return block;
|
|
91
90
|
}
|
|
92
91
|
/*
|
|
@@ -142,6 +141,10 @@ const getSymbol = function getSymbol(node, globals, scope, opt) {
|
|
|
142
141
|
const val = createNode();
|
|
143
142
|
val.type = 'object';
|
|
144
143
|
node.properties.forEach(prop => {
|
|
144
|
+
if (prop.type === 'ExperimentalSpreadProperty') {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
145
148
|
const propVal = getSymbol(prop.value, globals, scope, opts);
|
|
146
149
|
/* istanbul ignore next */
|
|
147
150
|
|
package/dist/exportParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","body","forEach","method","key","properties","prop","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declarations","declaration","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifiers","specifier","local","findNode","cache","blockCache","includes","slice","push","Object","hasOwnProperty","call","propval","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parent","parse","ast","isExported","parseResult"],"mappings":"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","sourcesContent":["import debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {value: node.name};\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n let block = scope;\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n } case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n } case 'ClassDeclaration': case 'ClassExpression': case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n } case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n } case 'ClassBody': {\n const val = createNode();\n node.body.forEach((method) => {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n });\n val.type = 'object';\n val.value = node;\n\n return val;\n } case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n node.properties.forEach((prop) => {\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n });\n\n return val;\n } case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration': {\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n break;\n } case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n /* istanbul ignore next */\n break;\n } case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n } case 'FunctionDeclaration': {\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'Program': {\n node.body.forEach((childNode) => {\n initVariables(childNode, globals, opts);\n });\n break;\n } case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n } case 'VariableDeclaration': {\n node.declarations.forEach((declaration) => {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n });\n break;\n } case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n break;\n }\n }\n};\n\n// Populates variable maps using AST\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n } else {\n node.body.forEach((childNode) => {\n mapVariables(childNode, globals, opts);\n });\n }\n break;\n } case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n } case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n } case 'VariableDeclaration': {\n node.declarations.forEach((declaration) => {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n });\n break;\n } case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n break;\n } case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n break;\n } case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n node.specifiers.forEach((specifier) => {\n mapVariables(specifier, globals, opts);\n });\n break;\n } case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n break;\n } case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n } default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (block.type === 'object') {\n if (block.value === node) {\n return true;\n }\n }\n\n const {props} = block;\n for (const prop in props) {\n /* istanbul ignore next */\n if (Object.prototype.hasOwnProperty.call(props, prop)) {\n const propval = props[prop];\n\n // Only check node if it had resolvable value\n if (propval && findNode(node, propval, blockCache)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n if (block.ANONYMOUS_DEFAULT === node) {\n return true;\n }\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n const blockCache = cache || [];\n const {props} = block;\n for (const key in props) {\n /* istanbul ignore next */\n if (Object.prototype.hasOwnProperty.call(props, key)) {\n blockCache.push(props[key]);\n if (props[key].exported) {\n if (node === props[key].value || findNode(node, props[key].value)) {\n return true;\n }\n }\n\n // No need to check `props[key]` for exported nodes as ESM\n // exports are only global\n }\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (opt.initModuleExports && globals.props.module && globals.props.module.props.exports) {\n if (findNode(node, globals.props.module.props.exports)) {\n return true;\n }\n }\n\n if (opt.initWindow && globals.props.window) {\n if (findNode(node, globals.props.window)) {\n return true;\n }\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent) {\n if (parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isExported = function (node, parseResult, opt) {\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isExported,\n parse,\n};\n"],"file":"exportParser.js"}
|
|
1
|
+
{"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","body","forEach","method","key","properties","prop","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declarations","declaration","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifiers","specifier","local","findNode","cache","blockCache","includes","slice","push","Object","hasOwnProperty","call","propval","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parent","parse","ast","isExported","parseResult"],"mappings":"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","sourcesContent":["import debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {value: node.name};\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n } case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n } case 'ClassDeclaration': case 'ClassExpression': case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n } case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n } case 'ClassBody': {\n const val = createNode();\n node.body.forEach((method) => {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n });\n val.type = 'object';\n val.value = node;\n\n return val;\n } case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n node.properties.forEach((prop) => {\n if (prop.type === 'ExperimentalSpreadProperty') {\n return;\n }\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n });\n\n return val;\n } case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration': {\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n break;\n } case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n /* istanbul ignore next */\n break;\n } case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n } case 'FunctionDeclaration': {\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'Program': {\n node.body.forEach((childNode) => {\n initVariables(childNode, globals, opts);\n });\n break;\n } case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n } case 'VariableDeclaration': {\n node.declarations.forEach((declaration) => {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n });\n break;\n } case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n break;\n }\n }\n};\n\n// Populates variable maps using AST\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n } else {\n node.body.forEach((childNode) => {\n mapVariables(childNode, globals, opts);\n });\n }\n break;\n } case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n } case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n } case 'VariableDeclaration': {\n node.declarations.forEach((declaration) => {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n });\n break;\n } case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n break;\n } case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n break;\n } case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n node.specifiers.forEach((specifier) => {\n mapVariables(specifier, globals, opts);\n });\n break;\n } case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n break;\n } case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n } default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (block.type === 'object') {\n if (block.value === node) {\n return true;\n }\n }\n\n const {props} = block;\n for (const prop in props) {\n /* istanbul ignore next */\n if (Object.prototype.hasOwnProperty.call(props, prop)) {\n const propval = props[prop];\n\n // Only check node if it had resolvable value\n if (propval && findNode(node, propval, blockCache)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n if (block.ANONYMOUS_DEFAULT === node) {\n return true;\n }\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n const blockCache = cache || [];\n const {props} = block;\n for (const key in props) {\n /* istanbul ignore next */\n if (Object.prototype.hasOwnProperty.call(props, key)) {\n blockCache.push(props[key]);\n if (props[key].exported) {\n if (node === props[key].value || findNode(node, props[key].value)) {\n return true;\n }\n }\n\n // No need to check `props[key]` for exported nodes as ESM\n // exports are only global\n }\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (opt.initModuleExports && globals.props.module && globals.props.module.props.exports) {\n if (findNode(node, globals.props.module.props.exports)) {\n return true;\n }\n }\n\n if (opt.initWindow && globals.props.window) {\n if (findNode(node, globals.props.window)) {\n return true;\n }\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent) {\n if (parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isExported = function (node, parseResult, opt) {\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isExported,\n parse,\n};\n"],"file":"exportParser.js"}
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -26,6 +26,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
|
|
|
26
26
|
*
|
|
27
27
|
* @param {object} commentNode
|
|
28
28
|
* @param {string} indent Whitespace
|
|
29
|
+
* @param {boolean} [trim=true]
|
|
29
30
|
* @returns {object}
|
|
30
31
|
*/
|
|
31
32
|
const parseComment = (commentNode, indent, trim = true) => {
|
|
@@ -105,11 +106,11 @@ const getUtils = (node, jsdoc, jsdocNode, {
|
|
|
105
106
|
};
|
|
106
107
|
|
|
107
108
|
utils.reportJSDoc = (msg, tag, handler) => {
|
|
108
|
-
report(msg, fixer => {
|
|
109
|
+
report(msg, handler ? fixer => {
|
|
109
110
|
handler();
|
|
110
111
|
const replacement = utils.stringify(jsdoc);
|
|
111
112
|
return fixer.replaceText(jsdocNode, replacement);
|
|
112
|
-
}, tag);
|
|
113
|
+
} : null, tag);
|
|
113
114
|
};
|
|
114
115
|
|
|
115
116
|
utils.getFunctionParameterNames = () => {
|
|
@@ -425,7 +426,8 @@ const iterateAllJsdocs = (iterator, ruleConfig) => {
|
|
|
425
426
|
return;
|
|
426
427
|
}
|
|
427
428
|
|
|
428
|
-
const
|
|
429
|
+
const sourceLine = sourceCode.lines[comment.loc.start.line - 1];
|
|
430
|
+
const indent = sourceLine.charAt(0).repeat(comment.loc.start.column);
|
|
429
431
|
const jsdoc = parseComment(comment, indent, !ruleConfig.noTrim);
|
|
430
432
|
const settings = getSettings(context);
|
|
431
433
|
const report = makeReport(context, comment);
|
|
@@ -498,7 +500,8 @@ function iterateJsdoc(iterator, ruleConfig) {
|
|
|
498
500
|
return;
|
|
499
501
|
}
|
|
500
502
|
|
|
501
|
-
const
|
|
503
|
+
const sourceLine = sourceCode.lines[jsdocNode.loc.start.line - 1];
|
|
504
|
+
const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);
|
|
502
505
|
const jsdoc = parseComment(jsdocNode, indent);
|
|
503
506
|
const report = makeReport(context, jsdocNode);
|
|
504
507
|
const utils = getUtils(node, jsdoc, jsdocNode, settings, report, context);
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["parseComment","commentNode","indent","trim","skipSeeLink","parser","str","data","tag","match","value","parsers","commentParser","PARSERS","parse_tag","parse_type","includes","parse_name","parse_description","errors","length","result","description","undefined","source","getUtils","node","jsdoc","jsdocNode","tagNamePreference","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","report","context","ancestors","getAncestors","sourceCode","getSourceCode","utils","stringify","tagBlock","jsdocUtils","getIndent","slice","reportJSDoc","msg","handler","fixer","replacement","replaceText","getFunctionParameterNames","isConstructor","parent","kind","isSetter","getJsdocParameterNamesDeep","param","getPreferredTagName","tagName","getJsdocParameterNames","skipReportingBlockedTag","allowObjectReturn","defaultMessage","ret","isObject","hasTag","blocked","message","getTags","isValidTag","name","definedTags","hasATag","avoidDocs","classHasTag","exemptedBy","_","get","getPresentTags","tagMustHaveEitherTypeOrNamepath","tagMightHaveEitherTypeOrNamepath","tagMustHaveNamepath","tagMightHaveNamepath","tagMustHaveType","tagMightHaveType","isNamepathDefiningTag","hasDefinedTypeReturnTag","hasReturnValue","isAsync","async","filterTags","item","tagList","filter","tags","getTagsByType","getClassNode","greatGrandParent","getAncestor","greatGrandParentValue","getFirstToken","getClassJsdoc","classNode","classJsdocNode","repeat","loc","start","column","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","forEach","matchingJsdocTag","reportSettings","line","getSettings","settings","ignorePrivate","Boolean","Number","preferredTypes","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterateAllJsdocs","iterator","ruleConfig","create","comments","getAllComments","comment","getText","startsWith","noTrim","meta","iterateJsdoc","metaType","TypeError","checkJsdoc","contextDefaults","contexts","enforcedContexts","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-named-default\nimport {default as commentParser, stringify as commentStringify} from 'comment-parser';\nimport _ from 'lodash';\nimport jsdocUtils from './jsdocUtils';\nimport getJSDocComment from './eslint/getJSDocComment';\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @returns {object}\n */\nconst parseComment = (commentNode, indent, trim = true) => {\n const skipSeeLink = (parser) => {\n return (str, data) => {\n if (data.tag === 'see' && str.match(/{@link.+?}/)) {\n return null;\n }\n\n return parser(str, data);\n };\n };\n\n // Preserve JSDoc block start/end indentation.\n return commentParser(`${indent}/*${commentNode.value}${indent}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n parsers: [\n commentParser.PARSERS.parse_tag,\n skipSeeLink(commentParser.PARSERS.parse_type),\n skipSeeLink(\n (str, data) => {\n if (['example', 'return', 'returns', 'throws', 'exception'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n ),\n trim ?\n commentParser.PARSERS.parse_description :\n\n // parse_description\n (str, data) => {\n // Only expected throw in previous step is if bad name (i.e.,\n // missing end bracket on optional name), but `@example`\n // skips name parsing\n /* istanbul ignore next */\n if (data.errors && data.errors.length) {\n return null;\n }\n\n // Tweak original regex to capture only single optional space\n const result = str.match(/^\\s?((.|\\s)+)?/);\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n if (result) {\n return {\n data: {\n description: result[1] === undefined ? '' : result[1],\n },\n source: result[0],\n };\n }\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n return null;\n },\n ],\n trim,\n })[0] || {};\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n },\n report,\n context\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = {};\n\n utils.stringify = (tagBlock) => {\n const indent = jsdocUtils.getIndent(sourceCode);\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc);\n\n return fixer.replaceText(jsdocNode, replacement);\n }, tag);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node.parent && node.parent.kind === 'constructor';\n };\n\n utils.isSetter = () => {\n return node.parent.kind === 'set';\n };\n\n utils.getJsdocParameterNamesDeep = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNamesDeep(jsdoc, param);\n };\n\n utils.getJsdocParameterNames = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNames(jsdoc, param);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n // inheritdoc implies that all documentation is inherited; see https://jsdoc.app/tags-inheritdoc.html\n utils.hasTag('inheritdoc') ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n const exemptedBy = _.get(context, 'options[0].exemptedBy');\n if (exemptedBy && exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.tagMustHaveEitherTypeOrNamepath = (tagName) => {\n return jsdocUtils.tagMustHaveEitherTypeOrNamepath(tagName);\n };\n\n utils.tagMightHaveEitherTypeOrNamepath = (tagName) => {\n return jsdocUtils.tagMightHaveEitherTypeOrNamepath(tagName);\n };\n\n utils.tagMustHaveNamepath = (tagName) => {\n return jsdocUtils.tagMustHaveNamepath(tagName);\n };\n\n utils.tagMightHaveNamepath = (tagName) => {\n return jsdocUtils.tagMightHaveNamepath(tagName);\n };\n\n utils.tagMustHaveType = (tagName) => {\n return jsdocUtils.tagMustHaveType(tagName);\n };\n\n utils.tagMightHaveType = (tagName) => {\n return jsdocUtils.tagMightHaveType(tagName);\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(tagName);\n };\n\n utils.hasDefinedTypeReturnTag = (tag) => {\n return jsdocUtils.hasDefinedTypeReturnTag(tag);\n };\n\n utils.hasReturnValue = () => {\n return jsdocUtils.hasReturnValue(node);\n };\n\n utils.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(tags, tagNamePreference);\n };\n\n utils.getClassNode = () => {\n // Ancestors missing in `Program` comment iteration\n const greatGrandParent = ancestors.length ?\n ancestors.slice(-3)[0] :\n jsdocUtils.getAncestor(sourceCode, jsdocNode, 3);\n\n const greatGrandParentValue = greatGrandParent && sourceCode.getFirstToken(greatGrandParent).value;\n\n if (greatGrandParentValue === 'class') {\n return greatGrandParent;\n }\n\n return false;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indent = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indent);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags || [], {\n tag: targetTagName,\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n const settings = {};\n\n // All rules\n settings.ignorePrivate = Boolean(_.get(context, 'settings.jsdoc.ignorePrivate'));\n settings.minLines = Number(_.get(context, 'settings.jsdoc.minLines', 0));\n settings.maxLines = Number(_.get(context, 'settings.jsdoc.maxLines', 1));\n\n // `check-tag-names` and many returns/param rules\n settings.tagNamePreference = _.get(context, 'settings.jsdoc.tagNamePreference') || {};\n\n // `check-types` and `no-undefined-types`\n settings.preferredTypes = _.get(context, 'settings.jsdoc.preferredTypes') || {};\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n settings.overrideReplacesDocs = _.get(context, 'settings.jsdoc.overrideReplacesDocs');\n settings.implementsReplacesDocs = _.get(context, 'settings.jsdoc.implementsReplacesDocs');\n settings.augmentsExtendsReplacesDocs = _.get(context, 'settings.jsdoc.augmentsExtendsReplacesDocs');\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber},\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: Object,\n * sourceCode: Object,\n * indent: string,\n * jsdoc: Object,\n * jsdocNode: Object,\n * node: Object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n return {\n create (context) {\n return {\n 'Program' () {\n const sourceCode = context.getSourceCode();\n const comments = sourceCode.getAllComments();\n\n comments.forEach((comment) => {\n if (!sourceCode.getText(comment).startsWith('/**')) {\n return;\n }\n\n const indent = ' '.repeat(comment.loc.start.column);\n const jsdoc = parseComment(comment, indent, !ruleConfig.noTrim);\n const settings = getSettings(context);\n const report = makeReport(context, comment);\n const jsdocNode = comment;\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node: null,\n report,\n settings,\n sourceCode,\n utils: getUtils(null, jsdoc, jsdocNode, settings, report, context),\n });\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = _.get(ruleConfig, 'meta.type');\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, {\n meta: ruleConfig.meta,\n noTrim: ruleConfig.noTrim,\n });\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 sourceCode = context.getSourceCode();\n\n const settings = getSettings(context);\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n const indent = ' '.repeat(jsdocNode.loc.start.column);\n\n const jsdoc = parseComment(jsdocNode, indent);\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 );\n\n if (\n settings.ignorePrivate &&\n utils.hasTag('private')\n ) {\n return;\n }\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n utils,\n });\n };\n\n if (ruleConfig.contextDefaults) {\n const contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc,\n };\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
|
|
1
|
+
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["parseComment","commentNode","indent","trim","skipSeeLink","parser","str","data","tag","match","value","parsers","commentParser","PARSERS","parse_tag","parse_type","includes","parse_name","parse_description","errors","length","result","description","undefined","source","getUtils","node","jsdoc","jsdocNode","tagNamePreference","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","report","context","ancestors","getAncestors","sourceCode","getSourceCode","utils","stringify","tagBlock","jsdocUtils","getIndent","slice","reportJSDoc","msg","handler","fixer","replacement","replaceText","getFunctionParameterNames","isConstructor","parent","kind","isSetter","getJsdocParameterNamesDeep","param","getPreferredTagName","tagName","getJsdocParameterNames","skipReportingBlockedTag","allowObjectReturn","defaultMessage","ret","isObject","hasTag","blocked","message","getTags","isValidTag","name","definedTags","hasATag","avoidDocs","classHasTag","exemptedBy","_","get","getPresentTags","tagMustHaveEitherTypeOrNamepath","tagMightHaveEitherTypeOrNamepath","tagMustHaveNamepath","tagMightHaveNamepath","tagMustHaveType","tagMightHaveType","isNamepathDefiningTag","hasDefinedTypeReturnTag","hasReturnValue","isAsync","async","filterTags","item","tagList","filter","tags","getTagsByType","getClassNode","greatGrandParent","getAncestor","greatGrandParentValue","getFirstToken","getClassJsdoc","classNode","classJsdocNode","repeat","loc","start","column","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","forEach","matchingJsdocTag","reportSettings","line","getSettings","settings","ignorePrivate","Boolean","Number","preferredTypes","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterateAllJsdocs","iterator","ruleConfig","create","comments","getAllComments","comment","getText","startsWith","sourceLine","lines","charAt","noTrim","meta","iterateJsdoc","metaType","TypeError","checkJsdoc","contextDefaults","contexts","enforcedContexts","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-named-default\nimport {default as commentParser, stringify as commentStringify} from 'comment-parser';\nimport _ from 'lodash';\nimport jsdocUtils from './jsdocUtils';\nimport getJSDocComment from './eslint/getJSDocComment';\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @param {boolean} [trim=true]\n * @returns {object}\n */\nconst parseComment = (commentNode, indent, trim = true) => {\n const skipSeeLink = (parser) => {\n return (str, data) => {\n if (data.tag === 'see' && str.match(/{@link.+?}/)) {\n return null;\n }\n\n return parser(str, data);\n };\n };\n\n // Preserve JSDoc block start/end indentation.\n return commentParser(`${indent}/*${commentNode.value}${indent}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n parsers: [\n commentParser.PARSERS.parse_tag,\n skipSeeLink(commentParser.PARSERS.parse_type),\n skipSeeLink(\n (str, data) => {\n if (['example', 'return', 'returns', 'throws', 'exception'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n ),\n trim ?\n commentParser.PARSERS.parse_description :\n\n // parse_description\n (str, data) => {\n // Only expected throw in previous step is if bad name (i.e.,\n // missing end bracket on optional name), but `@example`\n // skips name parsing\n /* istanbul ignore next */\n if (data.errors && data.errors.length) {\n return null;\n }\n\n // Tweak original regex to capture only single optional space\n const result = str.match(/^\\s?((.|\\s)+)?/);\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n if (result) {\n return {\n data: {\n description: result[1] === undefined ? '' : result[1],\n },\n source: result[0],\n };\n }\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n return null;\n },\n ],\n trim,\n })[0] || {};\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n },\n report,\n context,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = {};\n\n utils.stringify = (tagBlock) => {\n const indent = jsdocUtils.getIndent(sourceCode);\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node.parent && node.parent.kind === 'constructor';\n };\n\n utils.isSetter = () => {\n return node.parent.kind === 'set';\n };\n\n utils.getJsdocParameterNamesDeep = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNamesDeep(jsdoc, param);\n };\n\n utils.getJsdocParameterNames = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNames(jsdoc, param);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n // inheritdoc implies that all documentation is inherited; see https://jsdoc.app/tags-inheritdoc.html\n utils.hasTag('inheritdoc') ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n const exemptedBy = _.get(context, 'options[0].exemptedBy');\n if (exemptedBy && exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.tagMustHaveEitherTypeOrNamepath = (tagName) => {\n return jsdocUtils.tagMustHaveEitherTypeOrNamepath(tagName);\n };\n\n utils.tagMightHaveEitherTypeOrNamepath = (tagName) => {\n return jsdocUtils.tagMightHaveEitherTypeOrNamepath(tagName);\n };\n\n utils.tagMustHaveNamepath = (tagName) => {\n return jsdocUtils.tagMustHaveNamepath(tagName);\n };\n\n utils.tagMightHaveNamepath = (tagName) => {\n return jsdocUtils.tagMightHaveNamepath(tagName);\n };\n\n utils.tagMustHaveType = (tagName) => {\n return jsdocUtils.tagMustHaveType(tagName);\n };\n\n utils.tagMightHaveType = (tagName) => {\n return jsdocUtils.tagMightHaveType(tagName);\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(tagName);\n };\n\n utils.hasDefinedTypeReturnTag = (tag) => {\n return jsdocUtils.hasDefinedTypeReturnTag(tag);\n };\n\n utils.hasReturnValue = () => {\n return jsdocUtils.hasReturnValue(node);\n };\n\n utils.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(tags, tagNamePreference);\n };\n\n utils.getClassNode = () => {\n // Ancestors missing in `Program` comment iteration\n const greatGrandParent = ancestors.length ?\n ancestors.slice(-3)[0] :\n jsdocUtils.getAncestor(sourceCode, jsdocNode, 3);\n\n const greatGrandParentValue = greatGrandParent && sourceCode.getFirstToken(greatGrandParent).value;\n\n if (greatGrandParentValue === 'class') {\n return greatGrandParent;\n }\n\n return false;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indent = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indent);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags || [], {\n tag: targetTagName,\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n const settings = {};\n\n // All rules\n settings.ignorePrivate = Boolean(_.get(context, 'settings.jsdoc.ignorePrivate'));\n settings.minLines = Number(_.get(context, 'settings.jsdoc.minLines', 0));\n settings.maxLines = Number(_.get(context, 'settings.jsdoc.maxLines', 1));\n\n // `check-tag-names` and many returns/param rules\n settings.tagNamePreference = _.get(context, 'settings.jsdoc.tagNamePreference') || {};\n\n // `check-types` and `no-undefined-types`\n settings.preferredTypes = _.get(context, 'settings.jsdoc.preferredTypes') || {};\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n settings.overrideReplacesDocs = _.get(context, 'settings.jsdoc.overrideReplacesDocs');\n settings.implementsReplacesDocs = _.get(context, 'settings.jsdoc.implementsReplacesDocs');\n settings.augmentsExtendsReplacesDocs = _.get(context, 'settings.jsdoc.augmentsExtendsReplacesDocs');\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber},\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: Object,\n * sourceCode: Object,\n * indent: string,\n * jsdoc: Object,\n * jsdocNode: Object,\n * node: Object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n return {\n create (context) {\n return {\n 'Program' () {\n const sourceCode = context.getSourceCode();\n const comments = sourceCode.getAllComments();\n\n comments.forEach((comment) => {\n if (!sourceCode.getText(comment).startsWith('/**')) {\n return;\n }\n\n const sourceLine = sourceCode.lines[comment.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(comment.loc.start.column);\n const jsdoc = parseComment(comment, indent, !ruleConfig.noTrim);\n const settings = getSettings(context);\n const report = makeReport(context, comment);\n const jsdocNode = comment;\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node: null,\n report,\n settings,\n sourceCode,\n utils: getUtils(null, jsdoc, jsdocNode, settings, report, context),\n });\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = _.get(ruleConfig, 'meta.type');\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, {\n meta: ruleConfig.meta,\n noTrim: ruleConfig.noTrim,\n });\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 sourceCode = context.getSourceCode();\n\n const settings = getSettings(context);\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n const sourceLine = sourceCode.lines[jsdocNode.loc.start.line - 1];\n\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n\n const jsdoc = parseComment(jsdocNode, indent);\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 );\n\n if (\n settings.ignorePrivate &&\n utils.hasTag('private')\n ) {\n return;\n }\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n utils,\n });\n };\n\n if (ruleConfig.contextDefaults) {\n const contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc,\n };\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
|