eslint-plugin-jsdoc 47.0.2 → 48.0.1
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/{WarnSettings.js → WarnSettings.cjs} +2 -2
- package/dist/WarnSettings.cjs.map +1 -0
- package/dist/{alignTransform.js → alignTransform.cjs} +2 -2
- package/dist/alignTransform.cjs.map +1 -0
- package/dist/{defaultTagOrder.js → defaultTagOrder.cjs} +1 -1
- package/dist/defaultTagOrder.cjs.map +1 -0
- package/dist/{exportParser.js → exportParser.cjs} +32 -36
- package/dist/exportParser.cjs.map +1 -0
- package/dist/{generateRule.js → generateRule.cjs} +7 -4
- package/dist/generateRule.cjs.map +1 -0
- package/dist/{getDefaultTagStructureForMode.js → getDefaultTagStructureForMode.cjs} +1 -1
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -0
- package/dist/{index.js → index.cjs} +55 -55
- package/dist/index.cjs.map +1 -0
- package/dist/{iterateJsdoc.js → iterateJsdoc.cjs} +16 -21
- package/dist/iterateJsdoc.cjs.map +1 -0
- package/dist/{jsdocUtils.js → jsdocUtils.cjs} +17 -17
- package/dist/jsdocUtils.cjs.map +1 -0
- package/dist/rules/{checkAccess.js → checkAccess.cjs} +2 -2
- package/dist/rules/checkAccess.cjs.map +1 -0
- package/dist/rules/{checkAlignment.js → checkAlignment.cjs} +2 -2
- package/dist/rules/checkAlignment.cjs.map +1 -0
- package/dist/rules/{checkExamples.js → checkExamples.cjs} +2 -2
- package/dist/rules/checkExamples.cjs.map +1 -0
- package/dist/rules/{checkIndentation.js → checkIndentation.cjs} +2 -2
- package/dist/rules/checkIndentation.cjs.map +1 -0
- package/dist/rules/{checkLineAlignment.js → checkLineAlignment.cjs} +3 -3
- package/dist/rules/checkLineAlignment.cjs.map +1 -0
- package/dist/rules/{checkParamNames.js → checkParamNames.cjs} +2 -2
- package/dist/rules/checkParamNames.cjs.map +1 -0
- package/dist/rules/{checkPropertyNames.js → checkPropertyNames.cjs} +2 -2
- package/dist/rules/checkPropertyNames.cjs.map +1 -0
- package/dist/rules/{checkSyntax.js → checkSyntax.cjs} +2 -2
- package/dist/rules/checkSyntax.cjs.map +1 -0
- package/dist/rules/{checkTagNames.js → checkTagNames.cjs} +2 -2
- package/dist/rules/checkTagNames.cjs.map +1 -0
- package/dist/rules/{checkTypes.js → checkTypes.cjs} +2 -2
- package/dist/rules/checkTypes.cjs.map +1 -0
- package/dist/rules/{checkValues.js → checkValues.cjs} +2 -2
- package/dist/rules/checkValues.cjs.map +1 -0
- package/dist/rules/{emptyTags.js → emptyTags.cjs} +2 -2
- package/dist/rules/emptyTags.cjs.map +1 -0
- package/dist/rules/{implementsOnClasses.js → implementsOnClasses.cjs} +2 -2
- package/dist/rules/implementsOnClasses.cjs.map +1 -0
- package/dist/rules/{importsAsDependencies.js → importsAsDependencies.cjs} +10 -12
- package/dist/rules/importsAsDependencies.cjs.map +1 -0
- package/dist/rules/{informativeDocs.js → informativeDocs.cjs} +2 -2
- package/dist/rules/informativeDocs.cjs.map +1 -0
- package/dist/rules/{matchDescription.js → matchDescription.cjs} +2 -2
- package/dist/rules/matchDescription.cjs.map +1 -0
- package/dist/rules/{matchName.js → matchName.cjs} +2 -2
- package/dist/rules/matchName.cjs.map +1 -0
- package/dist/rules/{multilineBlocks.js → multilineBlocks.cjs} +2 -2
- package/dist/rules/multilineBlocks.cjs.map +1 -0
- package/dist/rules/{noBadBlocks.js → noBadBlocks.cjs} +2 -2
- package/dist/rules/noBadBlocks.cjs.map +1 -0
- package/dist/rules/{noBlankBlockDescriptions.js → noBlankBlockDescriptions.cjs} +2 -2
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -0
- package/dist/rules/{noBlankBlocks.js → noBlankBlocks.cjs} +2 -2
- package/dist/rules/noBlankBlocks.cjs.map +1 -0
- package/dist/rules/{noDefaults.js → noDefaults.cjs} +2 -2
- package/dist/rules/noDefaults.cjs.map +1 -0
- package/dist/rules/{noMissingSyntax.js → noMissingSyntax.cjs} +2 -2
- package/dist/rules/noMissingSyntax.cjs.map +1 -0
- package/dist/rules/{noMultiAsterisks.js → noMultiAsterisks.cjs} +2 -2
- package/dist/rules/noMultiAsterisks.cjs.map +1 -0
- package/dist/rules/{noRestrictedSyntax.js → noRestrictedSyntax.cjs} +2 -2
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -0
- package/dist/rules/{noTypes.js → noTypes.cjs} +2 -2
- package/dist/rules/noTypes.cjs.map +1 -0
- package/dist/rules/{noUndefinedTypes.js → noUndefinedTypes.cjs} +5 -5
- package/dist/rules/noUndefinedTypes.cjs.map +1 -0
- package/dist/rules/{requireAsteriskPrefix.js → requireAsteriskPrefix.cjs} +2 -2
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -0
- package/dist/rules/{requireDescription.js → requireDescription.cjs} +2 -2
- package/dist/rules/requireDescription.cjs.map +1 -0
- package/dist/rules/{requireDescriptionCompleteSentence.js → requireDescriptionCompleteSentence.cjs} +2 -2
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -0
- package/dist/rules/{requireExample.js → requireExample.cjs} +2 -2
- package/dist/rules/requireExample.cjs.map +1 -0
- package/dist/rules/{requireFileOverview.js → requireFileOverview.cjs} +2 -2
- package/dist/rules/requireFileOverview.cjs.map +1 -0
- package/dist/rules/{requireHyphenBeforeParamDescription.js → requireHyphenBeforeParamDescription.cjs} +2 -2
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -0
- package/dist/rules/{requireJsdoc.js → requireJsdoc.cjs} +5 -5
- package/dist/rules/requireJsdoc.cjs.map +1 -0
- package/dist/rules/{requireParam.js → requireParam.cjs} +2 -2
- package/dist/rules/requireParam.cjs.map +1 -0
- package/dist/rules/{requireParamDescription.js → requireParamDescription.cjs} +2 -2
- package/dist/rules/requireParamDescription.cjs.map +1 -0
- package/dist/rules/{requireParamName.js → requireParamName.cjs} +2 -2
- package/dist/rules/requireParamName.cjs.map +1 -0
- package/dist/rules/{requireParamType.js → requireParamType.cjs} +2 -2
- package/dist/rules/requireParamType.cjs.map +1 -0
- package/dist/rules/{requireProperty.js → requireProperty.cjs} +2 -2
- package/dist/rules/requireProperty.cjs.map +1 -0
- package/dist/rules/{requirePropertyDescription.js → requirePropertyDescription.cjs} +2 -2
- package/dist/rules/requirePropertyDescription.cjs.map +1 -0
- package/dist/rules/{requirePropertyName.js → requirePropertyName.cjs} +2 -2
- package/dist/rules/requirePropertyName.cjs.map +1 -0
- package/dist/rules/{requirePropertyType.js → requirePropertyType.cjs} +2 -2
- package/dist/rules/requirePropertyType.cjs.map +1 -0
- package/dist/rules/{requireReturns.js → requireReturns.cjs} +4 -4
- package/dist/rules/requireReturns.cjs.map +1 -0
- package/dist/rules/{requireReturnsCheck.js → requireReturnsCheck.cjs} +2 -2
- package/dist/rules/requireReturnsCheck.cjs.map +1 -0
- package/dist/rules/{requireReturnsDescription.js → requireReturnsDescription.cjs} +2 -2
- package/dist/rules/requireReturnsDescription.cjs.map +1 -0
- package/dist/rules/{requireReturnsType.js → requireReturnsType.cjs} +2 -2
- package/dist/rules/requireReturnsType.cjs.map +1 -0
- package/dist/rules/{requireThrows.js → requireThrows.cjs} +2 -2
- package/dist/rules/requireThrows.cjs.map +1 -0
- package/dist/rules/{requireYields.js → requireYields.cjs} +2 -2
- package/dist/rules/requireYields.cjs.map +1 -0
- package/dist/rules/{requireYieldsCheck.js → requireYieldsCheck.cjs} +2 -2
- package/dist/rules/requireYieldsCheck.cjs.map +1 -0
- package/dist/rules/{sortTags.js → sortTags.cjs} +4 -4
- package/dist/rules/sortTags.cjs.map +1 -0
- package/dist/rules/{tagLines.js → tagLines.cjs} +2 -2
- package/dist/rules/tagLines.cjs.map +1 -0
- package/dist/rules/{textEscaping.js → textEscaping.cjs} +2 -2
- package/dist/rules/textEscaping.cjs.map +1 -0
- package/dist/rules/{validTypes.js → validTypes.cjs} +2 -2
- package/dist/rules/validTypes.cjs.map +1 -0
- package/dist/{tagNames.js → tagNames.cjs} +1 -1
- package/dist/tagNames.cjs.map +1 -0
- package/dist/utils/{hasReturnValue.js → hasReturnValue.cjs} +14 -17
- package/dist/utils/hasReturnValue.cjs.map +1 -0
- package/{eslint.config.mjs → eslint.config.js} +34 -28
- package/package.json +15 -15
- package/src/WarnSettings.js +34 -0
- package/src/alignTransform.js +356 -0
- package/src/defaultTagOrder.js +168 -0
- package/src/exportParser.js +957 -0
- package/src/getDefaultTagStructureForMode.js +969 -0
- package/src/index.js +266 -0
- package/src/iterateJsdoc.js +2555 -0
- package/src/jsdocUtils.js +1693 -0
- package/src/rules/checkAccess.js +45 -0
- package/src/rules/checkAlignment.js +63 -0
- package/src/rules/checkExamples.js +594 -0
- package/src/rules/checkIndentation.js +75 -0
- package/src/rules/checkLineAlignment.js +364 -0
- package/src/rules/checkParamNames.js +404 -0
- package/src/rules/checkPropertyNames.js +152 -0
- package/src/rules/checkSyntax.js +30 -0
- package/src/rules/checkTagNames.js +314 -0
- package/src/rules/checkTypes.js +535 -0
- package/src/rules/checkValues.js +220 -0
- package/src/rules/emptyTags.js +88 -0
- package/src/rules/implementsOnClasses.js +64 -0
- package/src/rules/importsAsDependencies.js +131 -0
- package/src/rules/informativeDocs.js +182 -0
- package/src/rules/matchDescription.js +286 -0
- package/src/rules/matchName.js +147 -0
- package/src/rules/multilineBlocks.js +333 -0
- package/src/rules/noBadBlocks.js +109 -0
- package/src/rules/noBlankBlockDescriptions.js +69 -0
- package/src/rules/noBlankBlocks.js +53 -0
- package/src/rules/noDefaults.js +85 -0
- package/src/rules/noMissingSyntax.js +195 -0
- package/src/rules/noMultiAsterisks.js +134 -0
- package/src/rules/noRestrictedSyntax.js +91 -0
- package/src/rules/noTypes.js +73 -0
- package/src/rules/noUndefinedTypes.js +328 -0
- package/src/rules/requireAsteriskPrefix.js +189 -0
- package/src/rules/requireDescription.js +161 -0
- package/src/rules/requireDescriptionCompleteSentence.js +333 -0
- package/src/rules/requireExample.js +118 -0
- package/src/rules/requireFileOverview.js +154 -0
- package/src/rules/requireHyphenBeforeParamDescription.js +178 -0
- package/src/rules/requireJsdoc.js +629 -0
- package/src/rules/requireParam.js +592 -0
- package/src/rules/requireParamDescription.js +89 -0
- package/src/rules/requireParamName.js +55 -0
- package/src/rules/requireParamType.js +89 -0
- package/src/rules/requireProperty.js +48 -0
- package/src/rules/requirePropertyDescription.js +25 -0
- package/src/rules/requirePropertyName.js +25 -0
- package/src/rules/requirePropertyType.js +25 -0
- package/src/rules/requireReturns.js +238 -0
- package/src/rules/requireReturnsCheck.js +141 -0
- package/src/rules/requireReturnsDescription.js +59 -0
- package/src/rules/requireReturnsType.js +51 -0
- package/src/rules/requireThrows.js +111 -0
- package/src/rules/requireYields.js +216 -0
- package/src/rules/requireYieldsCheck.js +208 -0
- package/src/rules/sortTags.js +557 -0
- package/src/rules/tagLines.js +359 -0
- package/src/rules/textEscaping.js +146 -0
- package/src/rules/validTypes.js +368 -0
- package/src/tagNames.js +234 -0
- package/src/utils/hasReturnValue.js +549 -0
- package/dist/WarnSettings.js.map +0 -1
- package/dist/alignTransform.js.map +0 -1
- package/dist/defaultTagOrder.js.map +0 -1
- package/dist/exportParser.js.map +0 -1
- package/dist/generateRule.js.map +0 -1
- package/dist/getDefaultTagStructureForMode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/iterateJsdoc.js.map +0 -1
- package/dist/jsdocUtils.js.map +0 -1
- package/dist/rules/checkAccess.js.map +0 -1
- package/dist/rules/checkAlignment.js.map +0 -1
- package/dist/rules/checkExamples.js.map +0 -1
- package/dist/rules/checkIndentation.js.map +0 -1
- package/dist/rules/checkLineAlignment.js.map +0 -1
- package/dist/rules/checkParamNames.js.map +0 -1
- package/dist/rules/checkPropertyNames.js.map +0 -1
- package/dist/rules/checkSyntax.js.map +0 -1
- package/dist/rules/checkTagNames.js.map +0 -1
- package/dist/rules/checkTypes.js.map +0 -1
- package/dist/rules/checkValues.js.map +0 -1
- package/dist/rules/emptyTags.js.map +0 -1
- package/dist/rules/implementsOnClasses.js.map +0 -1
- package/dist/rules/importsAsDependencies.js.map +0 -1
- package/dist/rules/informativeDocs.js.map +0 -1
- package/dist/rules/matchDescription.js.map +0 -1
- package/dist/rules/matchName.js.map +0 -1
- package/dist/rules/multilineBlocks.js.map +0 -1
- package/dist/rules/noBadBlocks.js.map +0 -1
- package/dist/rules/noBlankBlockDescriptions.js.map +0 -1
- package/dist/rules/noBlankBlocks.js.map +0 -1
- package/dist/rules/noDefaults.js.map +0 -1
- package/dist/rules/noMissingSyntax.js.map +0 -1
- package/dist/rules/noMultiAsterisks.js.map +0 -1
- package/dist/rules/noRestrictedSyntax.js.map +0 -1
- package/dist/rules/noTypes.js.map +0 -1
- package/dist/rules/noUndefinedTypes.js.map +0 -1
- package/dist/rules/requireAsteriskPrefix.js.map +0 -1
- package/dist/rules/requireDescription.js.map +0 -1
- package/dist/rules/requireDescriptionCompleteSentence.js.map +0 -1
- package/dist/rules/requireExample.js.map +0 -1
- package/dist/rules/requireFileOverview.js.map +0 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +0 -1
- package/dist/rules/requireJsdoc.js.map +0 -1
- package/dist/rules/requireParam.js.map +0 -1
- package/dist/rules/requireParamDescription.js.map +0 -1
- package/dist/rules/requireParamName.js.map +0 -1
- package/dist/rules/requireParamType.js.map +0 -1
- package/dist/rules/requireProperty.js.map +0 -1
- package/dist/rules/requirePropertyDescription.js.map +0 -1
- package/dist/rules/requirePropertyName.js.map +0 -1
- package/dist/rules/requirePropertyType.js.map +0 -1
- package/dist/rules/requireReturns.js.map +0 -1
- package/dist/rules/requireReturnsCheck.js.map +0 -1
- package/dist/rules/requireReturnsDescription.js.map +0 -1
- package/dist/rules/requireReturnsType.js.map +0 -1
- package/dist/rules/requireThrows.js.map +0 -1
- package/dist/rules/requireYields.js.map +0 -1
- package/dist/rules/requireYieldsCheck.js.map +0 -1
- package/dist/rules/sortTags.js.map +0 -1
- package/dist/rules/tagLines.js.map +0 -1
- package/dist/rules/textEscaping.js.map +0 -1
- package/dist/rules/validTypes.js.map +0 -1
- package/dist/tagNames.js.map +0 -1
- package/dist/utils/hasReturnValue.js.map +0 -1
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import('estree').Node|
|
|
3
|
+
* import('@typescript-eslint/types').TSESTree.Node} ESTreeOrTypeScriptNode
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Checks if a node is a promise but has no resolve value or an empty value.
|
|
8
|
+
* An `undefined` resolve does not count.
|
|
9
|
+
* @param {ESTreeOrTypeScriptNode|undefined|null} node
|
|
10
|
+
* @returns {boolean|undefined|null}
|
|
11
|
+
*/
|
|
12
|
+
const isNewPromiseExpression = (node) => {
|
|
13
|
+
return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&
|
|
14
|
+
node.callee.name === 'Promise';
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @param {ESTreeOrTypeScriptNode|null|undefined} node
|
|
19
|
+
* @returns {boolean}
|
|
20
|
+
*/
|
|
21
|
+
const isVoidPromise = (node) => {
|
|
22
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.TSTypeReference} */ (
|
|
23
|
+
node
|
|
24
|
+
)?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const undefinedKeywords = new Set([
|
|
28
|
+
'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Checks if a node has a return statement. Void return does not count.
|
|
33
|
+
* @param {ESTreeOrTypeScriptNode|undefined|null} node
|
|
34
|
+
* @param {boolean} [throwOnNullReturn]
|
|
35
|
+
* @param {PromiseFilter} [promFilter]
|
|
36
|
+
* @returns {boolean|undefined}
|
|
37
|
+
*/
|
|
38
|
+
// eslint-disable-next-line complexity
|
|
39
|
+
const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
40
|
+
if (!node) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
switch (node.type) {
|
|
45
|
+
case 'TSDeclareFunction':
|
|
46
|
+
case 'TSFunctionType':
|
|
47
|
+
case 'TSMethodSignature': {
|
|
48
|
+
const type = node?.returnType?.typeAnnotation?.type;
|
|
49
|
+
return type && !undefinedKeywords.has(type);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
case 'MethodDefinition':
|
|
53
|
+
return hasReturnValue(node.value, throwOnNullReturn, promFilter);
|
|
54
|
+
case 'FunctionExpression':
|
|
55
|
+
case 'FunctionDeclaration':
|
|
56
|
+
case 'ArrowFunctionExpression': {
|
|
57
|
+
return 'expression' in node && node.expression && (!isNewPromiseExpression(
|
|
58
|
+
node.body,
|
|
59
|
+
) || !isVoidPromise(node.body)) ||
|
|
60
|
+
hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
case 'BlockStatement': {
|
|
64
|
+
return node.body.some((bodyNode) => {
|
|
65
|
+
return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
case 'LabeledStatement':
|
|
70
|
+
case 'WhileStatement':
|
|
71
|
+
case 'DoWhileStatement':
|
|
72
|
+
case 'ForStatement':
|
|
73
|
+
case 'ForInStatement':
|
|
74
|
+
case 'ForOfStatement':
|
|
75
|
+
case 'WithStatement': {
|
|
76
|
+
return hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
case 'IfStatement': {
|
|
80
|
+
return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||
|
|
81
|
+
hasReturnValue(node.alternate, throwOnNullReturn, promFilter);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
case 'TryStatement': {
|
|
85
|
+
return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||
|
|
86
|
+
hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||
|
|
87
|
+
hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
case 'SwitchStatement': {
|
|
91
|
+
return node.cases.some(
|
|
92
|
+
(someCase) => {
|
|
93
|
+
return someCase.consequent.some((nde) => {
|
|
94
|
+
return hasReturnValue(nde, throwOnNullReturn, promFilter);
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
case 'ReturnStatement': {
|
|
101
|
+
// void return does not count.
|
|
102
|
+
if (node.argument === null) {
|
|
103
|
+
if (throwOnNullReturn) {
|
|
104
|
+
throw new Error('Null return');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
111
|
+
// Let caller decide how to filter, but this is, at the least,
|
|
112
|
+
// a return of sorts and truthy
|
|
113
|
+
return promFilter(node.argument);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
default: {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Checks if a node has a return statement. Void return does not count.
|
|
127
|
+
* @param {ESTreeOrTypeScriptNode|null|undefined} node
|
|
128
|
+
* @param {PromiseFilter} promFilter
|
|
129
|
+
* @returns {undefined|boolean|ESTreeOrTypeScriptNode}
|
|
130
|
+
*/
|
|
131
|
+
// eslint-disable-next-line complexity
|
|
132
|
+
const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
133
|
+
if (!node) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
switch (node.type) {
|
|
138
|
+
case 'TSDeclareFunction':
|
|
139
|
+
case 'TSFunctionType':
|
|
140
|
+
case 'TSMethodSignature': {
|
|
141
|
+
const type = node?.returnType?.typeAnnotation?.type;
|
|
142
|
+
return type && !undefinedKeywords.has(type);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// case 'MethodDefinition':
|
|
146
|
+
// return allBrancheshaveReturnValues(node.value, promFilter);
|
|
147
|
+
case 'FunctionExpression':
|
|
148
|
+
case 'FunctionDeclaration':
|
|
149
|
+
case 'ArrowFunctionExpression': {
|
|
150
|
+
return 'expression' in node && node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||
|
|
151
|
+
allBrancheshaveReturnValues(node.body, promFilter) ||
|
|
152
|
+
/** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */
|
|
153
|
+
(node.body).body.some((nde) => {
|
|
154
|
+
return nde.type === 'ReturnStatement';
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
case 'BlockStatement': {
|
|
159
|
+
const lastBodyNode = node.body.slice(-1)[0];
|
|
160
|
+
return allBrancheshaveReturnValues(lastBodyNode, promFilter);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
case 'WhileStatement':
|
|
164
|
+
case 'DoWhileStatement':
|
|
165
|
+
if (
|
|
166
|
+
/**
|
|
167
|
+
* @type {import('@typescript-eslint/types').TSESTree.Literal}
|
|
168
|
+
*/
|
|
169
|
+
(node.test).value === true
|
|
170
|
+
) {
|
|
171
|
+
// If this is an infinite loop, we assume only one branch
|
|
172
|
+
// is needed to provide a return
|
|
173
|
+
return hasReturnValue(node.body, false, promFilter);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Fallthrough
|
|
177
|
+
case 'LabeledStatement':
|
|
178
|
+
case 'ForStatement':
|
|
179
|
+
case 'ForInStatement':
|
|
180
|
+
case 'ForOfStatement':
|
|
181
|
+
case 'WithStatement': {
|
|
182
|
+
return allBrancheshaveReturnValues(node.body, promFilter);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
case 'IfStatement': {
|
|
186
|
+
return allBrancheshaveReturnValues(node.consequent, promFilter) &&
|
|
187
|
+
allBrancheshaveReturnValues(node.alternate, promFilter);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
case 'TryStatement': {
|
|
191
|
+
// If `finally` returns, all return
|
|
192
|
+
return node.finalizer && allBrancheshaveReturnValues(node.finalizer, promFilter) ||
|
|
193
|
+
// Return in `try`/`catch` may still occur despite `finally`
|
|
194
|
+
allBrancheshaveReturnValues(node.block, promFilter) &&
|
|
195
|
+
(!node.handler ||
|
|
196
|
+
allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter)) &&
|
|
197
|
+
(!node.finalizer || (() => {
|
|
198
|
+
try {
|
|
199
|
+
hasReturnValue(node.finalizer, true, promFilter);
|
|
200
|
+
} catch (error) {
|
|
201
|
+
if (/** @type {Error} */ (error).message === 'Null return') {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
/* c8 ignore next 2 */
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// As long as not an explicit empty return, then return true
|
|
209
|
+
return true;
|
|
210
|
+
})());
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
case 'SwitchStatement': {
|
|
214
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.SwitchStatement} */ (node).cases.every(
|
|
215
|
+
(someCase) => {
|
|
216
|
+
return !someCase.consequent.some((consNode) => {
|
|
217
|
+
return consNode.type === 'BreakStatement' ||
|
|
218
|
+
consNode.type === 'ReturnStatement' && consNode.argument === null;
|
|
219
|
+
});
|
|
220
|
+
},
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
case 'ThrowStatement': {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
case 'ReturnStatement': {
|
|
229
|
+
// void return does not count.
|
|
230
|
+
if (node.argument === null) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
235
|
+
// Let caller decide how to filter, but this is, at the least,
|
|
236
|
+
// a return of sorts and truthy
|
|
237
|
+
return promFilter(node.argument);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
default: {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* @callback PromiseFilter
|
|
251
|
+
* @param {ESTreeOrTypeScriptNode|undefined} node
|
|
252
|
+
* @returns {boolean}
|
|
253
|
+
*/
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Avoids further checking child nodes if a nested function shadows the
|
|
257
|
+
* resolver, but otherwise, if name is used (by call or passed in as an
|
|
258
|
+
* argument to another function), will be considered as non-empty.
|
|
259
|
+
*
|
|
260
|
+
* This could check for redeclaration of the resolver, but as such is
|
|
261
|
+
* unlikely, we avoid the performance cost of checking everywhere for
|
|
262
|
+
* (re)declarations or assignments.
|
|
263
|
+
* @param {import('@typescript-eslint/types').TSESTree.Node|null|undefined} node
|
|
264
|
+
* @param {string} resolverName
|
|
265
|
+
* @returns {boolean}
|
|
266
|
+
*/
|
|
267
|
+
// eslint-disable-next-line complexity
|
|
268
|
+
const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
269
|
+
if (!node) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Arrow function without block
|
|
274
|
+
switch (node.type) {
|
|
275
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
276
|
+
// @ts-expect-error Babel?
|
|
277
|
+
case 'OptionalCallExpression':
|
|
278
|
+
case 'CallExpression':
|
|
279
|
+
return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (
|
|
280
|
+
node.callee
|
|
281
|
+
).name === resolverName && (
|
|
282
|
+
|
|
283
|
+
// Implicit or explicit undefined
|
|
284
|
+
node.arguments.length > 1 || node.arguments[0] !== undefined
|
|
285
|
+
) ||
|
|
286
|
+
node.arguments.some((nde) => {
|
|
287
|
+
// Being passed in to another function (which might invoke it)
|
|
288
|
+
return nde.type === 'Identifier' && nde.name === resolverName ||
|
|
289
|
+
|
|
290
|
+
// Handle nested items
|
|
291
|
+
hasNonEmptyResolverCall(nde, resolverName);
|
|
292
|
+
});
|
|
293
|
+
case 'ChainExpression':
|
|
294
|
+
case 'Decorator':
|
|
295
|
+
case 'ExpressionStatement':
|
|
296
|
+
return hasNonEmptyResolverCall(node.expression, resolverName);
|
|
297
|
+
case 'ClassBody':
|
|
298
|
+
case 'BlockStatement':
|
|
299
|
+
return node.body.some((bodyNode) => {
|
|
300
|
+
return hasNonEmptyResolverCall(bodyNode, resolverName);
|
|
301
|
+
});
|
|
302
|
+
case 'FunctionExpression':
|
|
303
|
+
case 'FunctionDeclaration':
|
|
304
|
+
case 'ArrowFunctionExpression': {
|
|
305
|
+
// Shadowing
|
|
306
|
+
if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (
|
|
307
|
+
node.params[0]
|
|
308
|
+
)?.name === resolverName) {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
case 'LabeledStatement':
|
|
316
|
+
case 'WhileStatement':
|
|
317
|
+
case 'DoWhileStatement':
|
|
318
|
+
case 'ForStatement':
|
|
319
|
+
case 'ForInStatement':
|
|
320
|
+
case 'ForOfStatement':
|
|
321
|
+
case 'WithStatement': {
|
|
322
|
+
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
case 'ConditionalExpression':
|
|
326
|
+
case 'IfStatement': {
|
|
327
|
+
return hasNonEmptyResolverCall(node.test, resolverName) ||
|
|
328
|
+
hasNonEmptyResolverCall(node.consequent, resolverName) ||
|
|
329
|
+
hasNonEmptyResolverCall(node.alternate, resolverName);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
case 'TryStatement': {
|
|
333
|
+
return hasNonEmptyResolverCall(node.block, resolverName) ||
|
|
334
|
+
hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||
|
|
335
|
+
hasNonEmptyResolverCall(node.finalizer, resolverName);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
case 'SwitchStatement': {
|
|
339
|
+
return node.cases.some(
|
|
340
|
+
(someCase) => {
|
|
341
|
+
return someCase.consequent.some((nde) => {
|
|
342
|
+
return hasNonEmptyResolverCall(nde, resolverName);
|
|
343
|
+
});
|
|
344
|
+
},
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
case 'ArrayPattern':
|
|
349
|
+
case 'ArrayExpression':
|
|
350
|
+
return node.elements.some((element) => {
|
|
351
|
+
return hasNonEmptyResolverCall(element, resolverName);
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
case 'AssignmentPattern':
|
|
355
|
+
return hasNonEmptyResolverCall(node.right, resolverName);
|
|
356
|
+
|
|
357
|
+
case 'AssignmentExpression':
|
|
358
|
+
case 'BinaryExpression':
|
|
359
|
+
case 'LogicalExpression': {
|
|
360
|
+
return hasNonEmptyResolverCall(node.left, resolverName) ||
|
|
361
|
+
hasNonEmptyResolverCall(node.right, resolverName);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Comma
|
|
365
|
+
case 'SequenceExpression':
|
|
366
|
+
case 'TemplateLiteral':
|
|
367
|
+
return node.expressions.some((subExpression) => {
|
|
368
|
+
return hasNonEmptyResolverCall(subExpression, resolverName);
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
case 'ObjectPattern':
|
|
372
|
+
case 'ObjectExpression':
|
|
373
|
+
return node.properties.some((property) => {
|
|
374
|
+
return hasNonEmptyResolverCall(property, resolverName);
|
|
375
|
+
});
|
|
376
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
377
|
+
// @ts-expect-error Babel?
|
|
378
|
+
case 'ClassMethod':
|
|
379
|
+
case 'MethodDefinition':
|
|
380
|
+
return node.decorators && node.decorators.some((decorator) => {
|
|
381
|
+
return hasNonEmptyResolverCall(decorator, resolverName);
|
|
382
|
+
}) ||
|
|
383
|
+
node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||
|
|
384
|
+
hasNonEmptyResolverCall(node.value, resolverName);
|
|
385
|
+
|
|
386
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
387
|
+
// @ts-expect-error Babel?
|
|
388
|
+
case 'ObjectProperty':
|
|
389
|
+
/* eslint-disable no-fallthrough */
|
|
390
|
+
/* c8 ignore next -- In Babel? */
|
|
391
|
+
case 'PropertyDefinition':
|
|
392
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
393
|
+
// @ts-expect-error Babel?
|
|
394
|
+
case 'ClassProperty':
|
|
395
|
+
case 'Property':
|
|
396
|
+
/* eslint-enable no-fallthrough */
|
|
397
|
+
return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||
|
|
398
|
+
hasNonEmptyResolverCall(node.value, resolverName);
|
|
399
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
400
|
+
// @ts-expect-error Babel?
|
|
401
|
+
case 'ObjectMethod':
|
|
402
|
+
/* c8 ignore next 6 -- In Babel? */
|
|
403
|
+
// @ts-expect-error
|
|
404
|
+
return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||
|
|
405
|
+
// @ts-expect-error
|
|
406
|
+
node.arguments.some((nde) => {
|
|
407
|
+
return hasNonEmptyResolverCall(nde, resolverName);
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
case 'ClassExpression':
|
|
411
|
+
case 'ClassDeclaration':
|
|
412
|
+
return hasNonEmptyResolverCall(node.body, resolverName);
|
|
413
|
+
|
|
414
|
+
case 'AwaitExpression':
|
|
415
|
+
case 'SpreadElement':
|
|
416
|
+
case 'UnaryExpression':
|
|
417
|
+
case 'YieldExpression':
|
|
418
|
+
return hasNonEmptyResolverCall(node.argument, resolverName);
|
|
419
|
+
|
|
420
|
+
case 'VariableDeclaration': {
|
|
421
|
+
return node.declarations.some((nde) => {
|
|
422
|
+
return hasNonEmptyResolverCall(nde, resolverName);
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
case 'VariableDeclarator': {
|
|
427
|
+
return hasNonEmptyResolverCall(node.id, resolverName) ||
|
|
428
|
+
hasNonEmptyResolverCall(node.init, resolverName);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
case 'TaggedTemplateExpression':
|
|
432
|
+
return hasNonEmptyResolverCall(node.quasi, resolverName);
|
|
433
|
+
|
|
434
|
+
// ?.
|
|
435
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
436
|
+
// @ts-expect-error Babel?
|
|
437
|
+
case 'OptionalMemberExpression':
|
|
438
|
+
case 'MemberExpression':
|
|
439
|
+
return hasNonEmptyResolverCall(node.object, resolverName) ||
|
|
440
|
+
hasNonEmptyResolverCall(node.property, resolverName);
|
|
441
|
+
|
|
442
|
+
/* c8 ignore next 2 -- In Babel? */
|
|
443
|
+
// @ts-expect-error Babel?
|
|
444
|
+
case 'Import':
|
|
445
|
+
case 'ImportExpression':
|
|
446
|
+
return hasNonEmptyResolverCall(node.source, resolverName);
|
|
447
|
+
|
|
448
|
+
case 'ReturnStatement': {
|
|
449
|
+
if (node.argument === null) {
|
|
450
|
+
return false;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return hasNonEmptyResolverCall(node.argument, resolverName);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/*
|
|
457
|
+
// Shouldn't need to parse literals/literal components, etc.
|
|
458
|
+
|
|
459
|
+
case 'Identifier':
|
|
460
|
+
case 'TemplateElement':
|
|
461
|
+
case 'Super':
|
|
462
|
+
// Exports not relevant in this context
|
|
463
|
+
*/
|
|
464
|
+
default:
|
|
465
|
+
return false;
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Checks if a Promise executor has no resolve value or an empty value.
|
|
471
|
+
* An `undefined` resolve does not count.
|
|
472
|
+
* @param {ESTreeOrTypeScriptNode} node
|
|
473
|
+
* @param {boolean} anyPromiseAsReturn
|
|
474
|
+
* @param {boolean} [allBranches]
|
|
475
|
+
* @returns {boolean}
|
|
476
|
+
*/
|
|
477
|
+
const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {
|
|
478
|
+
const hasReturnMethod = allBranches ?
|
|
479
|
+
/**
|
|
480
|
+
* @param {ESTreeOrTypeScriptNode} nde
|
|
481
|
+
* @param {PromiseFilter} promiseFilter
|
|
482
|
+
* @returns {boolean}
|
|
483
|
+
*/
|
|
484
|
+
(nde, promiseFilter) => {
|
|
485
|
+
let hasReturn;
|
|
486
|
+
try {
|
|
487
|
+
hasReturn = hasReturnValue(nde, true, promiseFilter);
|
|
488
|
+
} catch (error) {
|
|
489
|
+
// c8 ignore else
|
|
490
|
+
if (/** @type {Error} */ (error).message === 'Null return') {
|
|
491
|
+
return false;
|
|
492
|
+
}
|
|
493
|
+
/* c8 ignore next 2 */
|
|
494
|
+
throw error;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
// `hasReturn` check needed since `throw` treated as valid return by
|
|
498
|
+
// `allBrancheshaveReturnValues`
|
|
499
|
+
return Boolean(hasReturn && allBrancheshaveReturnValues(nde, promiseFilter));
|
|
500
|
+
} :
|
|
501
|
+
/**
|
|
502
|
+
* @param {ESTreeOrTypeScriptNode} nde
|
|
503
|
+
* @param {PromiseFilter} promiseFilter
|
|
504
|
+
* @returns {boolean}
|
|
505
|
+
*/
|
|
506
|
+
(nde, promiseFilter) => {
|
|
507
|
+
return Boolean(hasReturnValue(nde, false, promiseFilter));
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
return hasReturnMethod(node, (prom) => {
|
|
511
|
+
if (anyPromiseAsReturn) {
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
if (isVoidPromise(prom)) {
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
const {
|
|
520
|
+
params,
|
|
521
|
+
body,
|
|
522
|
+
} =
|
|
523
|
+
/**
|
|
524
|
+
* @type {import('@typescript-eslint/types').TSESTree.FunctionExpression|
|
|
525
|
+
* import('@typescript-eslint/types').TSESTree.ArrowFunctionExpression}
|
|
526
|
+
*/ (
|
|
527
|
+
/** @type {import('@typescript-eslint/types').TSESTree.NewExpression} */ (
|
|
528
|
+
prom
|
|
529
|
+
).arguments[0]
|
|
530
|
+
) || {};
|
|
531
|
+
|
|
532
|
+
if (!params?.length) {
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
const {
|
|
537
|
+
name: resolverName,
|
|
538
|
+
} = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (
|
|
539
|
+
params[0]
|
|
540
|
+
);
|
|
541
|
+
|
|
542
|
+
return hasNonEmptyResolverCall(body, resolverName);
|
|
543
|
+
});
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
export {
|
|
547
|
+
hasReturnValue,
|
|
548
|
+
hasValueOrExecutorHasNonEmptyResolveValue,
|
|
549
|
+
};
|
package/dist/WarnSettings.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WarnSettings.js","names":["WarnSettings","warnedSettings","WeakMap","hasBeenWarned","context","setting","has","get","markSettingAsWarned","set","Set","add","_default","exports","default","module"],"sources":["../src/WarnSettings.js"],"sourcesContent":["const WarnSettings = function () {\n /** @type {WeakMap<object, Set<string>>} */\n const warnedSettings = new WeakMap();\n\n return {\n /**\n * Warn only once for each context and setting\n * @param {import('eslint').Rule.RuleContext} context\n * @param {string} setting\n * @returns {boolean}\n */\n hasBeenWarned (context, setting) {\n return warnedSettings.has(context) && /** @type {Set<string>} */ (\n warnedSettings.get(context)\n ).has(setting);\n },\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {string} setting\n * @returns {void}\n */\n markSettingAsWarned (context, setting) {\n // istanbul ignore else\n if (!warnedSettings.has(context)) {\n warnedSettings.set(context, new Set());\n }\n\n /** @type {Set<string>} */ (warnedSettings.get(context)).add(setting);\n },\n };\n};\n\nexport default WarnSettings;\n"],"mappings":";;;;;;AAAA,MAAMA,YAAY,GAAG,SAAAA,CAAA,EAAY;EAC/B;EACA,MAAMC,cAAc,GAAG,IAAIC,OAAO,CAAC,CAAC;EAEpC,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;IACIC,aAAaA,CAAEC,OAAO,EAAEC,OAAO,EAAE;MAC/B,OAAOJ,cAAc,CAACK,GAAG,CAACF,OAAO,CAAC,IAAI,0BACpCH,cAAc,CAACM,GAAG,CAACH,OAAO,CAAC,CAC3BE,GAAG,CAACD,OAAO,CAAC;IAChB,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIG,mBAAmBA,CAAEJ,OAAO,EAAEC,OAAO,EAAE;MACrC;MACA,IAAI,CAACJ,cAAc,CAACK,GAAG,CAACF,OAAO,CAAC,EAAE;QAChCH,cAAc,CAACQ,GAAG,CAACL,OAAO,EAAE,IAAIM,GAAG,CAAC,CAAC,CAAC;MACxC;;MAEA;MAA4BT,cAAc,CAACM,GAAG,CAACH,OAAO,CAAC,CAAEO,GAAG,CAACN,OAAO,CAAC;IACvE;EACF,CAAC;AACH,CAAC;AAAC,IAAAO,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEad,YAAY;AAAAe,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alignTransform.js","names":["_commentParser","require","rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","wrapIndent","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","indentTag","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce","tagIndentMode","ret","_default","exports","default","module"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n // `comment-parser/primitives` export\n util,\n} from 'comment-parser';\n\n/**\n * @typedef {{\n * hasNoTypes: boolean,\n * maxNamedTagLength: import('./iterateJsdoc.js').Integer,\n * maxUnnamedTagLength: import('./iterateJsdoc.js').Integer\n * }} TypelessInfo\n */\n\nconst {\n rewireSource,\n} = util;\n\n/**\n * @typedef {{\n * name: import('./iterateJsdoc.js').Integer,\n * start: import('./iterateJsdoc.js').Integer,\n * tag: import('./iterateJsdoc.js').Integer,\n * type: import('./iterateJsdoc.js').Integer\n * }} Width\n */\n\n/** @type {Width} */\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\n/**\n * @param {string[]} tags\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @returns {boolean}\n */\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param {string[]} tags\n * @returns {(\n * width: Width,\n * line: {\n * tokens: import('comment-parser').Tokens\n * },\n * index: import('./iterateJsdoc.js').Integer,\n * source: import('comment-parser').Line[]\n * ) => Width}\n */\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === '/**' ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\n/**\n * @param {{\n * description: string;\n * tags: import('comment-parser').Spec[];\n * problems: import('comment-parser').Problem[];\n * }} fields\n * @returns {TypelessInfo}\n */\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Integer} len\n * @returns {string}\n */\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\n/**\n * @param {{\n * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,\n * tags: string[],\n * indent: string,\n * preserveMainDescriptionPostDelimiter: boolean,\n * wrapIndent: string,\n * }} cfg\n * @returns {(\n * block: import('comment-parser').Block\n * ) => import('comment-parser').Block}\n */\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n wrapIndent,\n}) => {\n let intoTags = false;\n /** @type {Width} */\n let width;\n\n /**\n * @param {import('comment-parser').Tokens} tokens\n * @param {TypelessInfo} typelessInfo\n * @returns {import('comment-parser').Tokens}\n */\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n /**\n * @param {import('comment-parser').Line} line\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @param {TypelessInfo} typelessInfo\n * @param {string|false} indentTag\n * @returns {import('comment-parser').Line}\n */\n const update = (line, index, source, typelessInfo, indentTag) => {\n /** @type {import('comment-parser').Tokens} */\n const tokens = {\n ...line.tokens,\n };\n\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === '*/' && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n switch (tokens.delimiter) {\n case '/**':\n tokens.start = indent;\n break;\n case '*':\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s+/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (shouldAlign(tags, index, source)) {\n alignTokens(tokens, typelessInfo);\n if (indentTag) {\n tokens.postDelimiter += wrapIndent;\n }\n }\n\n return {\n ...line,\n tokens,\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n let tagIndentMode = false;\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n const indentTag = tagIndentMode && !line.tokens.tag && line.tokens.description;\n const ret = update(line, index, source, typelessInfo, indentTag);\n\n if (line.tokens.tag) {\n tagIndentMode = true;\n }\n\n return ret;\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder","tags","_default","exports","default","module"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n {\n tags: [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n\n // TypeScript\n 'internal',\n 'overload',\n\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // TypeScript\n 'satisfies',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n ],\n },\n];\n\nexport default defaultTagOrder;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,GAAG,CACtB;EACEC,IAAI,EAAE;EACJ;EACA,SAAS,EACT,aAAa;EAEb;EACA,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,EACd,UAAU;EAEV;EACA,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa;EAEb;EACA,UAAU,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU;EAEV;EACA,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS;EAET;;EAEA;EACA,UAAU,EACV,UAAU,EAEV,OAAO,EACP,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB;EAEjB;EACA,OAAO,EACP,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS;EAET;EACA,OAAO,EACP,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM;EAEN;EACA,WAAW;EAEX;EACA,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,QAAQ;EAER;EACA,KAAK,EACL,SAAS;EAET;;EAEA;EACA,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW;EAEX;EACA,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc;EAEd;EACA,UAAU;EAEV;EACA,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,MAAM;AAEV,CAAC,CACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaJ,eAAe;AAAAK,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
|