eslint-plugin-jsdoc 39.3.16 → 39.3.18
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 +73 -1
- package/dist/utils/hasReturnValue.js +47 -40
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8012,7 +8012,7 @@ class A {
|
|
|
8012
8012
|
* @property opt_a
|
|
8013
8013
|
* @param {Foo|Bar} opt_b
|
|
8014
8014
|
*/
|
|
8015
|
-
// "jsdoc/match-name": ["error"|"warn", {"match":[{"comment":"JsdocBlock
|
|
8015
|
+
// "jsdoc/match-name": ["error"|"warn", {"match":[{"comment":"JsdocBlock:has(JsdocTag[tag=\"param\"]:has(JsdocTypeUnion:has(JsdocTypeName[value=\"Bar\"]:nth-child(1))))","disallowName":"/^opt_/i"}]}]
|
|
8016
8016
|
````
|
|
8017
8017
|
|
|
8018
8018
|
|
|
@@ -16264,6 +16264,14 @@ export function testFn1 ({ prop = { a: 1, b: 2 } }) {
|
|
|
16264
16264
|
/** Foo. */
|
|
16265
16265
|
function foo(a, b, c) {}
|
|
16266
16266
|
// Message: Missing JSDoc @param "a" declaration.
|
|
16267
|
+
|
|
16268
|
+
/**
|
|
16269
|
+
* @param foo Some number.
|
|
16270
|
+
* @param bar Some number.
|
|
16271
|
+
*/
|
|
16272
|
+
export function myPublicFunction(foo: number, bar: number, baz: number) {}
|
|
16273
|
+
// "jsdoc/require-param": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[tag=\"param\"])","context":"FunctionDeclaration"}]}]
|
|
16274
|
+
// Message: Missing JSDoc @param "baz" declaration.
|
|
16267
16275
|
````
|
|
16268
16276
|
|
|
16269
16277
|
The following patterns are not considered problems:
|
|
@@ -17552,6 +17560,46 @@ function quux () {
|
|
|
17552
17560
|
}
|
|
17553
17561
|
}
|
|
17554
17562
|
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17563
|
+
|
|
17564
|
+
/**
|
|
17565
|
+
* @returns {true}
|
|
17566
|
+
*/
|
|
17567
|
+
function quux () {
|
|
17568
|
+
if (true) {
|
|
17569
|
+
throw new Error('abc');
|
|
17570
|
+
}
|
|
17571
|
+
|
|
17572
|
+
throw new Error('def');
|
|
17573
|
+
}
|
|
17574
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17575
|
+
|
|
17576
|
+
/**
|
|
17577
|
+
* @returns Baz.
|
|
17578
|
+
*/
|
|
17579
|
+
function foo() {
|
|
17580
|
+
switch (true) {
|
|
17581
|
+
default:
|
|
17582
|
+
switch (false) {
|
|
17583
|
+
default: return;
|
|
17584
|
+
}
|
|
17585
|
+
return "baz";
|
|
17586
|
+
}
|
|
17587
|
+
};
|
|
17588
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17589
|
+
|
|
17590
|
+
/**
|
|
17591
|
+
* @returns Baz.
|
|
17592
|
+
*/
|
|
17593
|
+
function foo() {
|
|
17594
|
+
switch (true) {
|
|
17595
|
+
default:
|
|
17596
|
+
switch (false) {
|
|
17597
|
+
default: return;
|
|
17598
|
+
}
|
|
17599
|
+
return "baz";
|
|
17600
|
+
}
|
|
17601
|
+
};
|
|
17602
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17555
17603
|
````
|
|
17556
17604
|
|
|
17557
17605
|
The following patterns are not considered problems:
|
|
@@ -18003,6 +18051,30 @@ const quux = function () {
|
|
|
18003
18051
|
resolve(3);
|
|
18004
18052
|
});
|
|
18005
18053
|
};
|
|
18054
|
+
|
|
18055
|
+
/**
|
|
18056
|
+
* @returns {true}
|
|
18057
|
+
*/
|
|
18058
|
+
function quux () {
|
|
18059
|
+
if (true) {
|
|
18060
|
+
return true;
|
|
18061
|
+
}
|
|
18062
|
+
|
|
18063
|
+
throw new Error('Fail');
|
|
18064
|
+
}
|
|
18065
|
+
|
|
18066
|
+
/**
|
|
18067
|
+
* @returns Baz.
|
|
18068
|
+
*/
|
|
18069
|
+
function foo() {
|
|
18070
|
+
switch (true) {
|
|
18071
|
+
default:
|
|
18072
|
+
switch (false) {
|
|
18073
|
+
default: break;
|
|
18074
|
+
}
|
|
18075
|
+
return "baz";
|
|
18076
|
+
}
|
|
18077
|
+
};
|
|
18006
18078
|
````
|
|
18007
18079
|
|
|
18008
18080
|
|
|
@@ -25,11 +25,12 @@ const undefinedKeywords = new Set(['TSVoidKeyword', 'TSUndefinedKeyword', 'TSNev
|
|
|
25
25
|
* Checks if a node has a return statement. Void return does not count.
|
|
26
26
|
*
|
|
27
27
|
* @param {object} node
|
|
28
|
+
* @param {boolean} throwOnNullReturn
|
|
28
29
|
* @param {PromiseFilter} promFilter
|
|
29
30
|
* @returns {boolean|Node}
|
|
30
31
|
*/
|
|
31
32
|
// eslint-disable-next-line complexity
|
|
32
|
-
const
|
|
33
|
+
const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
33
34
|
if (!node) {
|
|
34
35
|
return false;
|
|
35
36
|
}
|
|
@@ -42,19 +43,19 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
42
43
|
const type = node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type;
|
|
43
44
|
return type && !undefinedKeywords.has(type);
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// return allBrancheshaveReturnValues(node.value, promFilter);
|
|
46
|
+
case 'MethodDefinition':
|
|
47
|
+
return hasReturnValue(node.value, throwOnNullReturn, promFilter);
|
|
48
48
|
case 'FunctionExpression':
|
|
49
49
|
case 'FunctionDeclaration':
|
|
50
50
|
case 'ArrowFunctionExpression':
|
|
51
51
|
{
|
|
52
|
-
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||
|
|
52
|
+
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
53
53
|
}
|
|
54
54
|
case 'BlockStatement':
|
|
55
55
|
{
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
return node.body.some(bodyNode => {
|
|
57
|
+
return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);
|
|
58
|
+
});
|
|
58
59
|
}
|
|
59
60
|
case 'LabeledStatement':
|
|
60
61
|
case 'WhileStatement':
|
|
@@ -64,21 +65,21 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
64
65
|
case 'ForOfStatement':
|
|
65
66
|
case 'WithStatement':
|
|
66
67
|
{
|
|
67
|
-
return
|
|
68
|
+
return hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
68
69
|
}
|
|
69
70
|
case 'IfStatement':
|
|
70
71
|
{
|
|
71
|
-
return
|
|
72
|
+
return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) || hasReturnValue(node.alternate, throwOnNullReturn, promFilter);
|
|
72
73
|
}
|
|
73
74
|
case 'TryStatement':
|
|
74
75
|
{
|
|
75
|
-
return
|
|
76
|
+
return hasReturnValue(node.block, throwOnNullReturn, promFilter) || hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) || hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);
|
|
76
77
|
}
|
|
77
78
|
case 'SwitchStatement':
|
|
78
79
|
{
|
|
79
|
-
return node.cases.
|
|
80
|
-
return someCase.consequent.
|
|
81
|
-
return
|
|
80
|
+
return node.cases.some(someCase => {
|
|
81
|
+
return someCase.consequent.some(nde => {
|
|
82
|
+
return hasReturnValue(nde, throwOnNullReturn, promFilter);
|
|
82
83
|
});
|
|
83
84
|
});
|
|
84
85
|
}
|
|
@@ -86,6 +87,9 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
86
87
|
{
|
|
87
88
|
// void return does not count.
|
|
88
89
|
if (node.argument === null) {
|
|
90
|
+
if (throwOnNullReturn) {
|
|
91
|
+
throw new Error('Null return');
|
|
92
|
+
}
|
|
89
93
|
return false;
|
|
90
94
|
}
|
|
91
95
|
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
@@ -102,22 +106,16 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
102
106
|
}
|
|
103
107
|
};
|
|
104
108
|
|
|
105
|
-
/**
|
|
106
|
-
* @callback PromiseFilter
|
|
107
|
-
* @param {object} node
|
|
108
|
-
* @returns {boolean}
|
|
109
|
-
*/
|
|
110
|
-
|
|
111
109
|
/**
|
|
112
110
|
* Checks if a node has a return statement. Void return does not count.
|
|
113
111
|
*
|
|
114
112
|
* @param {object} node
|
|
115
|
-
* @param {boolean} throwOnNullReturn
|
|
116
113
|
* @param {PromiseFilter} promFilter
|
|
117
114
|
* @returns {boolean|Node}
|
|
118
115
|
*/
|
|
119
116
|
// eslint-disable-next-line complexity
|
|
120
|
-
|
|
117
|
+
exports.hasReturnValue = hasReturnValue;
|
|
118
|
+
const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
121
119
|
if (!node) {
|
|
122
120
|
return false;
|
|
123
121
|
}
|
|
@@ -130,19 +128,19 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
130
128
|
const type = node === null || node === void 0 ? void 0 : (_node$returnType2 = node.returnType) === null || _node$returnType2 === void 0 ? void 0 : (_node$returnType2$typ = _node$returnType2.typeAnnotation) === null || _node$returnType2$typ === void 0 ? void 0 : _node$returnType2$typ.type;
|
|
131
129
|
return type && !undefinedKeywords.has(type);
|
|
132
130
|
}
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
|
|
132
|
+
// case 'MethodDefinition':
|
|
133
|
+
// return allBrancheshaveReturnValues(node.value, promFilter);
|
|
135
134
|
case 'FunctionExpression':
|
|
136
135
|
case 'FunctionDeclaration':
|
|
137
136
|
case 'ArrowFunctionExpression':
|
|
138
137
|
{
|
|
139
|
-
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||
|
|
138
|
+
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || allBrancheshaveReturnValues(node.body, promFilter);
|
|
140
139
|
}
|
|
141
140
|
case 'BlockStatement':
|
|
142
141
|
{
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
});
|
|
142
|
+
const lastBodyNode = node.body.slice(-1)[0];
|
|
143
|
+
return allBrancheshaveReturnValues(lastBodyNode, promFilter);
|
|
146
144
|
}
|
|
147
145
|
case 'LabeledStatement':
|
|
148
146
|
case 'WhileStatement':
|
|
@@ -152,31 +150,31 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
152
150
|
case 'ForOfStatement':
|
|
153
151
|
case 'WithStatement':
|
|
154
152
|
{
|
|
155
|
-
return
|
|
153
|
+
return allBrancheshaveReturnValues(node.body, promFilter);
|
|
156
154
|
}
|
|
157
155
|
case 'IfStatement':
|
|
158
156
|
{
|
|
159
|
-
return
|
|
157
|
+
return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);
|
|
160
158
|
}
|
|
161
159
|
case 'TryStatement':
|
|
162
160
|
{
|
|
163
|
-
return
|
|
161
|
+
return allBrancheshaveReturnValues(node.block, promFilter) && allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter) && allBrancheshaveReturnValues(node.finalizer, promFilter);
|
|
164
162
|
}
|
|
165
163
|
case 'SwitchStatement':
|
|
166
164
|
{
|
|
167
|
-
return node.cases.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
165
|
+
return node.cases.every(someCase => {
|
|
166
|
+
const nde = someCase.consequent.slice(-1)[0];
|
|
167
|
+
return allBrancheshaveReturnValues(nde, promFilter);
|
|
171
168
|
});
|
|
172
169
|
}
|
|
170
|
+
case 'ThrowStatement':
|
|
171
|
+
{
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
173
174
|
case 'ReturnStatement':
|
|
174
175
|
{
|
|
175
176
|
// void return does not count.
|
|
176
177
|
if (node.argument === null) {
|
|
177
|
-
if (throwOnNullReturn) {
|
|
178
|
-
throw new Error('Null return');
|
|
179
|
-
}
|
|
180
178
|
return false;
|
|
181
179
|
}
|
|
182
180
|
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
@@ -193,6 +191,12 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
193
191
|
}
|
|
194
192
|
};
|
|
195
193
|
|
|
194
|
+
/**
|
|
195
|
+
* @callback PromiseFilter
|
|
196
|
+
* @param {object} node
|
|
197
|
+
* @returns {boolean}
|
|
198
|
+
*/
|
|
199
|
+
|
|
196
200
|
/**
|
|
197
201
|
* Avoids further checking child nodes if a nested function shadows the
|
|
198
202
|
* resolver, but otherwise, if name is used (by call or passed in as an
|
|
@@ -207,7 +211,6 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
207
211
|
* @returns {boolean}
|
|
208
212
|
*/
|
|
209
213
|
// eslint-disable-next-line complexity
|
|
210
|
-
exports.hasReturnValue = hasReturnValue;
|
|
211
214
|
const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
212
215
|
if (!node) {
|
|
213
216
|
return false;
|
|
@@ -383,8 +386,9 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
383
386
|
*/
|
|
384
387
|
const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {
|
|
385
388
|
const hasReturnMethod = allBranches ? (nde, promiseFilter) => {
|
|
389
|
+
let hasReturn;
|
|
386
390
|
try {
|
|
387
|
-
hasReturnValue(nde, true, promiseFilter);
|
|
391
|
+
hasReturn = hasReturnValue(nde, true, promiseFilter);
|
|
388
392
|
} catch (error) {
|
|
389
393
|
// istanbul ignore else
|
|
390
394
|
if (error.message === 'Null return') {
|
|
@@ -394,7 +398,10 @@ const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, all
|
|
|
394
398
|
// istanbul ignore next
|
|
395
399
|
throw error;
|
|
396
400
|
}
|
|
397
|
-
|
|
401
|
+
|
|
402
|
+
// `hasReturn` check needed since `throw` treated as valid return by
|
|
403
|
+
// `allBrancheshaveReturnValues`
|
|
404
|
+
return hasReturn && allBrancheshaveReturnValues(nde, promiseFilter);
|
|
398
405
|
} : (nde, promiseFilter) => {
|
|
399
406
|
return hasReturnValue(nde, false, promiseFilter);
|
|
400
407
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","allBrancheshaveReturnValues","promFilter","returnType","typeAnnotation","has","expression","body","lastBodyNode","slice","consequent","alternate","block","handler","finalizer","cases","every","someCase","nde","argument","hasReturnValue","throwOnNullReturn","value","some","bodyNode","Error","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasReturnMethod","promiseFilter","error","message","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst allBrancheshaveReturnValues = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n // case 'MethodDefinition':\n // return allBrancheshaveReturnValues(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n const lastBodyNode = node.body.slice(-1)[0];\n return allBrancheshaveReturnValues(lastBodyNode, promFilter);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return allBrancheshaveReturnValues(node.block, promFilter) &&\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter) &&\n allBrancheshaveReturnValues(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.every(\n (someCase) => {\n return someCase.consequent.every((nde) => {\n return allBrancheshaveReturnValues(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {boolean} throwOnNullReturn\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, throwOnNullReturn, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, throwOnNullReturn, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.alternate, throwOnNullReturn, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, throwOnNullReturn, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n if (throwOnNullReturn) {\n throw new Error('Null return');\n }\n\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} allBranches\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {\n const hasReturnMethod = allBranches ?\n (nde, promiseFilter) => {\n try {\n hasReturnValue(nde, true, promiseFilter);\n } catch (error) {\n // istanbul ignore else\n if (error.message === 'Null return') {\n return false;\n }\n\n // istanbul ignore next\n throw error;\n }\n\n return allBrancheshaveReturnValues(nde, promiseFilter);\n } :\n (nde, promiseFilter) => {\n return hasReturnValue(nde, false, promiseFilter);\n };\n\n return hasReturnMethod(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","hasReturnValue","throwOnNullReturn","promFilter","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","Error","allBrancheshaveReturnValues","lastBodyNode","slice","every","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasReturnMethod","promiseFilter","hasReturn","error","message","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {boolean} throwOnNullReturn\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, throwOnNullReturn, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, throwOnNullReturn, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.alternate, throwOnNullReturn, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, throwOnNullReturn, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n if (throwOnNullReturn) {\n throw new Error('Null return');\n }\n\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst allBrancheshaveReturnValues = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n // case 'MethodDefinition':\n // return allBrancheshaveReturnValues(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n const lastBodyNode = node.body.slice(-1)[0];\n return allBrancheshaveReturnValues(lastBodyNode, promFilter);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return allBrancheshaveReturnValues(node.block, promFilter) &&\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter) &&\n allBrancheshaveReturnValues(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.every(\n (someCase) => {\n const nde = someCase.consequent.slice(-1)[0];\n return allBrancheshaveReturnValues(nde, promFilter);\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} allBranches\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {\n const hasReturnMethod = allBranches ?\n (nde, promiseFilter) => {\n let hasReturn;\n try {\n hasReturn = hasReturnValue(nde, true, promiseFilter);\n } catch (error) {\n // istanbul ignore else\n if (error.message === 'Null return') {\n return false;\n }\n\n // istanbul ignore next\n throw error;\n }\n\n // `hasReturn` check needed since `throw` treated as valid return by\n // `allBrancheshaveReturnValues`\n return hasReturn && allBrancheshaveReturnValues(nde, promiseFilter);\n } :\n (nde, promiseFilter) => {\n return hasReturnValue(nde, false, promiseFilter);\n };\n\n return hasReturnMethod(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED