eslint-plugin-jsdoc 50.6.17 → 50.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/alignTransform.cjs +10 -10
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/exportParser.cjs +141 -135
- package/dist/exportParser.cjs.map +1 -1
- package/dist/generateRule.cjs +10 -12
- package/dist/generateRule.cjs.map +1 -1
- package/dist/getDefaultTagStructureForMode.cjs +73 -73
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs +121 -110
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/index.cjs +17 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/iterateJsdoc.cjs +87 -66
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/jsdocUtils.cjs +144 -142
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +2 -2
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +22 -28
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +2 -2
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +14 -14
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs +21 -15
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs +2 -2
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +11 -11
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +21 -22
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +10 -10
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +11 -14
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs +26 -27
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs +6 -6
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs +12 -12
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +12 -12
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +1 -1
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +4 -4
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs +10 -10
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +3 -3
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +6 -6
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs +2 -2
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +17 -20
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs +4 -4
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs +2 -2
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +8 -8
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs +6 -6
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +1 -4
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +19 -19
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs +12 -12
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireProperty.cjs +1 -1
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs +3 -3
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +1 -1
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs +1 -1
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +16 -15
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireYields.cjs +4 -4
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs +6 -6
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs +13 -13
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +11 -11
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +2 -2
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +15 -15
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/tagNames.cjs +1 -1
- package/dist/tagNames.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs +176 -176
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/eslint.config.js +36 -32
- package/package.json +30 -30
- package/pnpm-workspace.yaml +1 -0
- package/src/alignTransform.js +15 -15
- package/src/exportParser.js +386 -373
- package/src/getDefaultTagStructureForMode.js +45 -45
- package/src/getJsdocProcessorPlugin.js +175 -128
- package/src/index.js +66 -37
- package/src/iterateJsdoc.js +61 -28
- package/src/jsdocUtils.js +354 -338
- package/src/rules/checkAlignment.js +2 -2
- package/src/rules/checkExamples.js +16 -20
- package/src/rules/checkIndentation.js +2 -2
- package/src/rules/checkLineAlignment.js +10 -10
- package/src/rules/checkParamNames.js +22 -14
- package/src/rules/checkPropertyNames.js +1 -1
- package/src/rules/checkTagNames.js +7 -7
- package/src/rules/checkTemplateNames.js +52 -38
- package/src/rules/checkTypes.js +7 -7
- package/src/rules/checkValues.js +16 -17
- package/src/rules/convertToJsdocComments.js +47 -37
- package/src/rules/emptyTags.js +14 -7
- package/src/rules/importsAsDependencies.js +3 -1
- package/src/rules/informativeDocs.js +58 -58
- package/src/rules/linesBeforeBlock.js +25 -17
- package/src/rules/matchDescription.js +1 -1
- package/src/rules/matchName.js +2 -2
- package/src/rules/multilineBlocks.js +10 -10
- package/src/rules/noBadBlocks.js +3 -3
- package/src/rules/noMultiAsterisks.js +4 -4
- package/src/rules/noRestrictedSyntax.js +1 -1
- package/src/rules/noTypes.js +1 -1
- package/src/rules/noUndefinedTypes.js +29 -23
- package/src/rules/requireAsteriskPrefix.js +3 -3
- package/src/rules/requireDescription.js +1 -1
- package/src/rules/requireDescriptionCompleteSentence.js +6 -6
- package/src/rules/requireFileOverview.js +3 -3
- package/src/rules/requireHyphenBeforeParamDescription.js +2 -5
- package/src/rules/requireJsdoc.js +14 -14
- package/src/rules/requireParam.js +9 -9
- package/src/rules/requireProperty.js +1 -1
- package/src/rules/requireReturns.js +1 -1
- package/src/rules/requireReturnsCheck.js +1 -1
- package/src/rules/requireReturnsDescription.js +1 -1
- package/src/rules/requireTemplate.js +59 -38
- package/src/rules/requireYields.js +3 -3
- package/src/rules/requireYieldsCheck.js +1 -1
- package/src/rules/sortTags.js +7 -7
- package/src/rules/tagLines.js +8 -8
- package/src/rules/textEscaping.js +2 -0
- package/src/rules/validTypes.js +29 -29
- package/src/tagNames.js +2 -2
- package/src/utils/hasReturnValue.js +298 -283
|
@@ -26,7 +26,9 @@ const isNewPromiseExpression = node => {
|
|
|
26
26
|
const isVoidPromise = node => {
|
|
27
27
|
var _node$typeArguments, _node$typeParameters;
|
|
28
28
|
return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */(node === null || node === void 0 || (_node$typeArguments = node.typeArguments) === null || _node$typeArguments === void 0 || (_node$typeArguments = _node$typeArguments.params) === null || _node$typeArguments === void 0 || (_node$typeArguments = _node$typeArguments[0]) === null || _node$typeArguments === void 0 ? void 0 : _node$typeArguments.type) === 'TSVoidKeyword'
|
|
29
|
-
/* c8 ignore next
|
|
29
|
+
/* c8 ignore next 5 */
|
|
30
|
+
// eslint-disable-next-line @stylistic/operator-linebreak -- c8
|
|
31
|
+
|| /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */(node
|
|
30
32
|
// @ts-expect-error Ok
|
|
31
33
|
=== null || node
|
|
32
34
|
// @ts-expect-error Ok
|
|
@@ -34,7 +36,7 @@ const isVoidPromise = node => {
|
|
|
34
36
|
// @ts-expect-error Ok
|
|
35
37
|
.typeParameters) === null || _node$typeParameters === void 0 || (_node$typeParameters = _node$typeParameters.params) === null || _node$typeParameters === void 0 || (_node$typeParameters = _node$typeParameters[0]) === null || _node$typeParameters === void 0 ? void 0 : _node$typeParameters.type) === 'TSVoidKeyword';
|
|
36
38
|
};
|
|
37
|
-
const undefinedKeywords = new Set(['
|
|
39
|
+
const undefinedKeywords = new Set(['TSNeverKeyword', 'TSUndefinedKeyword', 'TSVoidKeyword']);
|
|
38
40
|
|
|
39
41
|
/**
|
|
40
42
|
* Checks if a node has a return statement. Void return does not count.
|
|
@@ -49,19 +51,9 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
49
51
|
return false;
|
|
50
52
|
}
|
|
51
53
|
switch (node.type) {
|
|
52
|
-
case 'TSDeclareFunction':
|
|
53
|
-
case 'TSFunctionType':
|
|
54
|
-
case 'TSMethodSignature':
|
|
55
|
-
{
|
|
56
|
-
var _node$returnType;
|
|
57
|
-
const type = node === null || node === void 0 || (_node$returnType = node.returnType) === null || _node$returnType === void 0 || (_node$returnType = _node$returnType.typeAnnotation) === null || _node$returnType === void 0 ? void 0 : _node$returnType.type;
|
|
58
|
-
return type && !undefinedKeywords.has(type);
|
|
59
|
-
}
|
|
60
|
-
case 'MethodDefinition':
|
|
61
|
-
return hasReturnValue(node.value, throwOnNullReturn, promFilter);
|
|
62
|
-
case 'FunctionExpression':
|
|
63
|
-
case 'FunctionDeclaration':
|
|
64
54
|
case 'ArrowFunctionExpression':
|
|
55
|
+
case 'FunctionDeclaration':
|
|
56
|
+
case 'FunctionExpression':
|
|
65
57
|
{
|
|
66
58
|
return 'expression' in node && node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
67
59
|
}
|
|
@@ -71,12 +63,12 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
71
63
|
return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);
|
|
72
64
|
});
|
|
73
65
|
}
|
|
74
|
-
case 'LabeledStatement':
|
|
75
|
-
case 'WhileStatement':
|
|
76
66
|
case 'DoWhileStatement':
|
|
77
|
-
case 'ForStatement':
|
|
78
67
|
case 'ForInStatement':
|
|
79
68
|
case 'ForOfStatement':
|
|
69
|
+
case 'ForStatement':
|
|
70
|
+
case 'LabeledStatement':
|
|
71
|
+
case 'WhileStatement':
|
|
80
72
|
case 'WithStatement':
|
|
81
73
|
{
|
|
82
74
|
return hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
@@ -85,18 +77,8 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
85
77
|
{
|
|
86
78
|
return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) || hasReturnValue(node.alternate, throwOnNullReturn, promFilter);
|
|
87
79
|
}
|
|
88
|
-
case '
|
|
89
|
-
|
|
90
|
-
return hasReturnValue(node.block, throwOnNullReturn, promFilter) || hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) || hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);
|
|
91
|
-
}
|
|
92
|
-
case 'SwitchStatement':
|
|
93
|
-
{
|
|
94
|
-
return node.cases.some(someCase => {
|
|
95
|
-
return someCase.consequent.some(nde => {
|
|
96
|
-
return hasReturnValue(nde, throwOnNullReturn, promFilter);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
}
|
|
80
|
+
case 'MethodDefinition':
|
|
81
|
+
return hasReturnValue(node.value, throwOnNullReturn, promFilter);
|
|
100
82
|
case 'ReturnStatement':
|
|
101
83
|
{
|
|
102
84
|
// void return does not count.
|
|
@@ -113,6 +95,26 @@ const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
|
113
95
|
}
|
|
114
96
|
return true;
|
|
115
97
|
}
|
|
98
|
+
case 'SwitchStatement':
|
|
99
|
+
{
|
|
100
|
+
return node.cases.some(someCase => {
|
|
101
|
+
return someCase.consequent.some(nde => {
|
|
102
|
+
return hasReturnValue(nde, throwOnNullReturn, promFilter);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
case 'TryStatement':
|
|
107
|
+
{
|
|
108
|
+
return hasReturnValue(node.block, throwOnNullReturn, promFilter) || hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) || hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);
|
|
109
|
+
}
|
|
110
|
+
case 'TSDeclareFunction':
|
|
111
|
+
case 'TSFunctionType':
|
|
112
|
+
case 'TSMethodSignature':
|
|
113
|
+
{
|
|
114
|
+
var _node$returnType;
|
|
115
|
+
const type = node === null || node === void 0 || (_node$returnType = node.returnType) === null || _node$returnType === void 0 || (_node$returnType = _node$returnType.typeAnnotation) === null || _node$returnType === void 0 ? void 0 : _node$returnType.type;
|
|
116
|
+
return type && !undefinedKeywords.has(type);
|
|
117
|
+
}
|
|
116
118
|
default:
|
|
117
119
|
{
|
|
118
120
|
return false;
|
|
@@ -133,20 +135,11 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
133
135
|
return false;
|
|
134
136
|
}
|
|
135
137
|
switch (node.type) {
|
|
136
|
-
case 'TSDeclareFunction':
|
|
137
|
-
case 'TSFunctionType':
|
|
138
|
-
case 'TSMethodSignature':
|
|
139
|
-
{
|
|
140
|
-
var _node$returnType2;
|
|
141
|
-
const type = node === null || node === void 0 || (_node$returnType2 = node.returnType) === null || _node$returnType2 === void 0 || (_node$returnType2 = _node$returnType2.typeAnnotation) === null || _node$returnType2 === void 0 ? void 0 : _node$returnType2.type;
|
|
142
|
-
return type && !undefinedKeywords.has(type);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
138
|
// case 'MethodDefinition':
|
|
146
139
|
// return allBrancheshaveReturnValues(node.value, promFilter);
|
|
147
|
-
case 'FunctionExpression':
|
|
148
|
-
case 'FunctionDeclaration':
|
|
149
140
|
case 'ArrowFunctionExpression':
|
|
141
|
+
case 'FunctionDeclaration':
|
|
142
|
+
case 'FunctionExpression':
|
|
150
143
|
{
|
|
151
144
|
return 'expression' in node && node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || allBrancheshaveReturnValues(node.body, promFilter) || /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */
|
|
152
145
|
node.body.body.some(nde => {
|
|
@@ -158,8 +151,8 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
158
151
|
const lastBodyNode = node.body.slice(-1)[0];
|
|
159
152
|
return allBrancheshaveReturnValues(lastBodyNode, promFilter);
|
|
160
153
|
}
|
|
161
|
-
case 'WhileStatement':
|
|
162
154
|
case 'DoWhileStatement':
|
|
155
|
+
case 'WhileStatement':
|
|
163
156
|
if (
|
|
164
157
|
/**
|
|
165
158
|
* @type {import('@typescript-eslint/types').TSESTree.Literal}
|
|
@@ -177,9 +170,9 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
177
170
|
// is needed to provide a return
|
|
178
171
|
return hasReturnValue(node.body, false, promFilter);
|
|
179
172
|
}
|
|
180
|
-
case 'LabeledStatement':
|
|
181
173
|
case 'ForInStatement':
|
|
182
174
|
case 'ForOfStatement':
|
|
175
|
+
case 'LabeledStatement':
|
|
183
176
|
case 'WithStatement':
|
|
184
177
|
{
|
|
185
178
|
return allBrancheshaveReturnValues(node.body, promFilter);
|
|
@@ -188,6 +181,31 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
188
181
|
{
|
|
189
182
|
return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);
|
|
190
183
|
}
|
|
184
|
+
case 'ReturnStatement':
|
|
185
|
+
{
|
|
186
|
+
// void return does not count.
|
|
187
|
+
if (node.argument === null) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
191
|
+
// Let caller decide how to filter, but this is, at the least,
|
|
192
|
+
// a return of sorts and truthy
|
|
193
|
+
return promFilter(node.argument);
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
case 'SwitchStatement':
|
|
198
|
+
{
|
|
199
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.SwitchStatement} */node.cases.every(someCase => {
|
|
200
|
+
return !someCase.consequent.some(consNode => {
|
|
201
|
+
return consNode.type === 'BreakStatement' || consNode.type === 'ReturnStatement' && consNode.argument === null;
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
case 'ThrowStatement':
|
|
206
|
+
{
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
191
209
|
case 'TryStatement':
|
|
192
210
|
{
|
|
193
211
|
// If `finally` returns, all return
|
|
@@ -197,10 +215,11 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
197
215
|
try {
|
|
198
216
|
hasReturnValue(node.finalizer, true, promFilter);
|
|
199
217
|
} catch (error) {
|
|
200
|
-
if (
|
|
218
|
+
if (/** @type {Error} */error.message === 'Null return') {
|
|
201
219
|
return false;
|
|
202
220
|
}
|
|
203
|
-
/* c8 ignore next
|
|
221
|
+
/* c8 ignore next 3 */
|
|
222
|
+
// eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
|
|
204
223
|
throw error;
|
|
205
224
|
}
|
|
206
225
|
|
|
@@ -208,30 +227,13 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
208
227
|
return true;
|
|
209
228
|
})());
|
|
210
229
|
}
|
|
211
|
-
case '
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return !someCase.consequent.some(consNode => {
|
|
215
|
-
return consNode.type === 'BreakStatement' || consNode.type === 'ReturnStatement' && consNode.argument === null;
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
case 'ThrowStatement':
|
|
220
|
-
{
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
case 'ReturnStatement':
|
|
230
|
+
case 'TSDeclareFunction':
|
|
231
|
+
case 'TSFunctionType':
|
|
232
|
+
case 'TSMethodSignature':
|
|
224
233
|
{
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
230
|
-
// Let caller decide how to filter, but this is, at the least,
|
|
231
|
-
// a return of sorts and truthy
|
|
232
|
-
return promFilter(node.argument);
|
|
233
|
-
}
|
|
234
|
-
return true;
|
|
234
|
+
var _node$returnType2;
|
|
235
|
+
const type = node === null || node === void 0 || (_node$returnType2 = node.returnType) === null || _node$returnType2 === void 0 || (_node$returnType2 = _node$returnType2.typeAnnotation) === null || _node$returnType2 === void 0 ? void 0 : _node$returnType2.type;
|
|
236
|
+
return type && !undefinedKeywords.has(type);
|
|
235
237
|
}
|
|
236
238
|
default:
|
|
237
239
|
{
|
|
@@ -266,90 +268,59 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
266
268
|
|
|
267
269
|
// Arrow function without block
|
|
268
270
|
switch (node.type) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */node.callee.name === resolverName && (
|
|
274
|
-
// Implicit or explicit undefined
|
|
275
|
-
node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => {
|
|
276
|
-
// Being passed in to another function (which might invoke it)
|
|
277
|
-
return nde.type === 'Identifier' && nde.name === resolverName ||
|
|
278
|
-
// Handle nested items
|
|
279
|
-
hasNonEmptyResolverCall(nde, resolverName);
|
|
280
|
-
});
|
|
281
|
-
case 'ChainExpression':
|
|
282
|
-
case 'Decorator':
|
|
283
|
-
case 'ExpressionStatement':
|
|
284
|
-
return hasNonEmptyResolverCall(node.expression, resolverName);
|
|
285
|
-
case 'ClassBody':
|
|
286
|
-
case 'BlockStatement':
|
|
287
|
-
return node.body.some(bodyNode => {
|
|
288
|
-
return hasNonEmptyResolverCall(bodyNode, resolverName);
|
|
271
|
+
case 'ArrayExpression':
|
|
272
|
+
case 'ArrayPattern':
|
|
273
|
+
return node.elements.some(element => {
|
|
274
|
+
return hasNonEmptyResolverCall(element, resolverName);
|
|
289
275
|
});
|
|
290
|
-
case 'FunctionExpression':
|
|
291
|
-
case 'FunctionDeclaration':
|
|
292
276
|
case 'ArrowFunctionExpression':
|
|
277
|
+
case 'FunctionDeclaration':
|
|
278
|
+
case 'FunctionExpression':
|
|
293
279
|
{
|
|
294
280
|
var _node$params$;
|
|
295
281
|
// Shadowing
|
|
296
|
-
if (
|
|
282
|
+
if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */((_node$params$ = node.params[0]) === null || _node$params$ === void 0 ? void 0 : _node$params$.name) === resolverName) {
|
|
297
283
|
return false;
|
|
298
284
|
}
|
|
299
285
|
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
300
286
|
}
|
|
301
|
-
case 'LabeledStatement':
|
|
302
|
-
case 'WhileStatement':
|
|
303
|
-
case 'DoWhileStatement':
|
|
304
|
-
case 'ForStatement':
|
|
305
|
-
case 'ForInStatement':
|
|
306
|
-
case 'ForOfStatement':
|
|
307
|
-
case 'WithStatement':
|
|
308
|
-
{
|
|
309
|
-
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
310
|
-
}
|
|
311
|
-
case 'ConditionalExpression':
|
|
312
|
-
case 'IfStatement':
|
|
313
|
-
{
|
|
314
|
-
return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName);
|
|
315
|
-
}
|
|
316
|
-
case 'TryStatement':
|
|
317
|
-
{
|
|
318
|
-
return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName);
|
|
319
|
-
}
|
|
320
|
-
case 'SwitchStatement':
|
|
321
|
-
{
|
|
322
|
-
return node.cases.some(someCase => {
|
|
323
|
-
return someCase.consequent.some(nde => {
|
|
324
|
-
return hasNonEmptyResolverCall(nde, resolverName);
|
|
325
|
-
});
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
case 'ArrayPattern':
|
|
329
|
-
case 'ArrayExpression':
|
|
330
|
-
return node.elements.some(element => {
|
|
331
|
-
return hasNonEmptyResolverCall(element, resolverName);
|
|
332
|
-
});
|
|
333
|
-
case 'AssignmentPattern':
|
|
334
|
-
return hasNonEmptyResolverCall(node.right, resolverName);
|
|
335
287
|
case 'AssignmentExpression':
|
|
336
288
|
case 'BinaryExpression':
|
|
337
289
|
case 'LogicalExpression':
|
|
338
290
|
{
|
|
339
291
|
return hasNonEmptyResolverCall(node.left, resolverName) || hasNonEmptyResolverCall(node.right, resolverName);
|
|
340
292
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
case '
|
|
344
|
-
case '
|
|
345
|
-
|
|
346
|
-
|
|
293
|
+
case 'AssignmentPattern':
|
|
294
|
+
return hasNonEmptyResolverCall(node.right, resolverName);
|
|
295
|
+
case 'AwaitExpression':
|
|
296
|
+
case 'SpreadElement':
|
|
297
|
+
case 'UnaryExpression':
|
|
298
|
+
case 'YieldExpression':
|
|
299
|
+
return hasNonEmptyResolverCall(node.argument, resolverName);
|
|
300
|
+
case 'BlockStatement':
|
|
301
|
+
case 'ClassBody':
|
|
302
|
+
return node.body.some(bodyNode => {
|
|
303
|
+
return hasNonEmptyResolverCall(bodyNode, resolverName);
|
|
347
304
|
});
|
|
348
|
-
|
|
349
|
-
case '
|
|
350
|
-
|
|
351
|
-
|
|
305
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
306
|
+
case 'CallExpression':
|
|
307
|
+
// @ts-expect-error Babel?
|
|
308
|
+
case 'OptionalCallExpression':
|
|
309
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */node.callee.name === resolverName && (
|
|
310
|
+
// Implicit or explicit undefined
|
|
311
|
+
node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => {
|
|
312
|
+
// Being passed in to another function (which might invoke it)
|
|
313
|
+
return nde.type === 'Identifier' && nde.name === resolverName ||
|
|
314
|
+
// Handle nested items
|
|
315
|
+
hasNonEmptyResolverCall(nde, resolverName);
|
|
352
316
|
});
|
|
317
|
+
case 'ChainExpression':
|
|
318
|
+
case 'Decorator':
|
|
319
|
+
case 'ExpressionStatement':
|
|
320
|
+
return hasNonEmptyResolverCall(node.expression, resolverName);
|
|
321
|
+
case 'ClassDeclaration':
|
|
322
|
+
case 'ClassExpression':
|
|
323
|
+
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
353
324
|
/* c8 ignore next 2 -- In Babel? */
|
|
354
325
|
// @ts-expect-error Babel?
|
|
355
326
|
case 'ClassMethod':
|
|
@@ -360,16 +331,46 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
360
331
|
|
|
361
332
|
/* c8 ignore next 2 -- In Babel? */
|
|
362
333
|
// @ts-expect-error Babel?
|
|
363
|
-
case '
|
|
364
|
-
/* eslint-disable no-fallthrough */
|
|
365
|
-
/* c8 ignore next -- In Babel? */
|
|
366
|
-
case 'PropertyDefinition':
|
|
334
|
+
case 'ClassProperty':
|
|
367
335
|
/* c8 ignore next 2 -- In Babel? */
|
|
368
336
|
// @ts-expect-error Babel?
|
|
369
|
-
case '
|
|
337
|
+
case 'ObjectProperty':
|
|
370
338
|
case 'Property':
|
|
371
|
-
|
|
339
|
+
case 'PropertyDefinition':
|
|
372
340
|
return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
|
|
341
|
+
case 'ConditionalExpression':
|
|
342
|
+
case 'IfStatement':
|
|
343
|
+
{
|
|
344
|
+
return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName);
|
|
345
|
+
}
|
|
346
|
+
case 'DoWhileStatement':
|
|
347
|
+
case 'ForInStatement':
|
|
348
|
+
case 'ForOfStatement':
|
|
349
|
+
case 'ForStatement':
|
|
350
|
+
case 'LabeledStatement':
|
|
351
|
+
case 'WhileStatement':
|
|
352
|
+
case 'WithStatement':
|
|
353
|
+
{
|
|
354
|
+
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
358
|
+
// @ts-expect-error Babel?
|
|
359
|
+
case 'Import':
|
|
360
|
+
case 'ImportExpression':
|
|
361
|
+
return hasNonEmptyResolverCall(node.source, resolverName);
|
|
362
|
+
// ?.
|
|
363
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
364
|
+
case 'MemberExpression':
|
|
365
|
+
|
|
366
|
+
// @ts-expect-error Babel?
|
|
367
|
+
case 'OptionalMemberExpression':
|
|
368
|
+
return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName);
|
|
369
|
+
case 'ObjectExpression':
|
|
370
|
+
case 'ObjectPattern':
|
|
371
|
+
return node.properties.some(property => {
|
|
372
|
+
return hasNonEmptyResolverCall(property, resolverName);
|
|
373
|
+
});
|
|
373
374
|
/* c8 ignore next 2 -- In Babel? */
|
|
374
375
|
// @ts-expect-error Babel?
|
|
375
376
|
case 'ObjectMethod':
|
|
@@ -380,14 +381,34 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
380
381
|
node.arguments.some(nde => {
|
|
381
382
|
return hasNonEmptyResolverCall(nde, resolverName);
|
|
382
383
|
});
|
|
383
|
-
case '
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
384
|
+
case 'ReturnStatement':
|
|
385
|
+
{
|
|
386
|
+
if (node.argument === null) {
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
return hasNonEmptyResolverCall(node.argument, resolverName);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// Comma
|
|
393
|
+
case 'SequenceExpression':
|
|
394
|
+
case 'TemplateLiteral':
|
|
395
|
+
return node.expressions.some(subExpression => {
|
|
396
|
+
return hasNonEmptyResolverCall(subExpression, resolverName);
|
|
397
|
+
});
|
|
398
|
+
case 'SwitchStatement':
|
|
399
|
+
{
|
|
400
|
+
return node.cases.some(someCase => {
|
|
401
|
+
return someCase.consequent.some(nde => {
|
|
402
|
+
return hasNonEmptyResolverCall(nde, resolverName);
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
case 'TaggedTemplateExpression':
|
|
407
|
+
return hasNonEmptyResolverCall(node.quasi, resolverName);
|
|
408
|
+
case 'TryStatement':
|
|
409
|
+
{
|
|
410
|
+
return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName);
|
|
411
|
+
}
|
|
391
412
|
case 'VariableDeclaration':
|
|
392
413
|
{
|
|
393
414
|
return node.declarations.some(nde => {
|
|
@@ -398,32 +419,10 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
398
419
|
{
|
|
399
420
|
return hasNonEmptyResolverCall(node.id, resolverName) || hasNonEmptyResolverCall(node.init, resolverName);
|
|
400
421
|
}
|
|
401
|
-
case 'TaggedTemplateExpression':
|
|
402
|
-
return hasNonEmptyResolverCall(node.quasi, resolverName);
|
|
403
|
-
|
|
404
|
-
// ?.
|
|
405
|
-
/* c8 ignore next 2 -- In Babel? */
|
|
406
|
-
// @ts-expect-error Babel?
|
|
407
|
-
case 'OptionalMemberExpression':
|
|
408
|
-
case 'MemberExpression':
|
|
409
|
-
return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName);
|
|
410
|
-
|
|
411
|
-
/* c8 ignore next 2 -- In Babel? */
|
|
412
|
-
// @ts-expect-error Babel?
|
|
413
|
-
case 'Import':
|
|
414
|
-
case 'ImportExpression':
|
|
415
|
-
return hasNonEmptyResolverCall(node.source, resolverName);
|
|
416
|
-
case 'ReturnStatement':
|
|
417
|
-
{
|
|
418
|
-
if (node.argument === null) {
|
|
419
|
-
return false;
|
|
420
|
-
}
|
|
421
|
-
return hasNonEmptyResolverCall(node.argument, resolverName);
|
|
422
|
-
}
|
|
423
422
|
|
|
424
423
|
/*
|
|
425
424
|
// Shouldn't need to parse literals/literal components, etc.
|
|
426
|
-
|
|
425
|
+
case 'Identifier':
|
|
427
426
|
case 'TemplateElement':
|
|
428
427
|
case 'Super':
|
|
429
428
|
// Exports not relevant in this context
|
|
@@ -454,10 +453,11 @@ const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, all
|
|
|
454
453
|
hasReturn = hasReturnValue(nde, true, promiseFilter);
|
|
455
454
|
} catch (error) {
|
|
456
455
|
// c8 ignore else
|
|
457
|
-
if (
|
|
456
|
+
if (/** @type {Error} */error.message === 'Null return') {
|
|
458
457
|
return false;
|
|
459
458
|
}
|
|
460
|
-
/* c8 ignore next
|
|
459
|
+
/* c8 ignore next 3 */
|
|
460
|
+
// eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
|
|
461
461
|
throw error;
|
|
462
462
|
}
|
|
463
463
|
|
|
@@ -481,14 +481,14 @@ const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, all
|
|
|
481
481
|
return false;
|
|
482
482
|
}
|
|
483
483
|
const {
|
|
484
|
-
|
|
485
|
-
|
|
484
|
+
body,
|
|
485
|
+
params
|
|
486
486
|
} =
|
|
487
487
|
/**
|
|
488
488
|
* @type {import('@typescript-eslint/types').TSESTree.FunctionExpression|
|
|
489
489
|
* import('@typescript-eslint/types').TSESTree.ArrowFunctionExpression}
|
|
490
490
|
*/
|
|
491
|
-
(
|
|
491
|
+
(/** @type {import('@typescript-eslint/types').TSESTree.NewExpression} */prom.arguments[0]) || {};
|
|
492
492
|
if (!(params !== null && params !== void 0 && params.length)) {
|
|
493
493
|
return false;
|
|
494
494
|
}
|