eslint-plugin-jsdoc 39.3.13 → 39.3.15
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 +147 -19
- package/dist/iterateJsdoc.js +2 -2
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +1 -1
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/utils/hasReturnValue.js +114 -12
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -17208,10 +17208,11 @@ The following patterns are not considered problems:
|
|
|
17208
17208
|
|
|
17209
17209
|
Requires a return statement (or non-`undefined` Promise resolve value) in
|
|
17210
17210
|
function bodies if a `@returns` tag (without a `void` or `undefined` type)
|
|
17211
|
-
is specified in the function's
|
|
17211
|
+
is specified in the function's JSDoc comment.
|
|
17212
17212
|
|
|
17213
17213
|
Will also report `@returns {void}` and `@returns {undefined}` if `exemptAsync`
|
|
17214
|
-
is set to `false`
|
|
17214
|
+
is set to `false` and a non-`undefined` value is returned or a resolved value
|
|
17215
|
+
is found. Also reports if `@returns {never}` is discovered with a return value.
|
|
17215
17216
|
|
|
17216
17217
|
Will also report if multiple `@returns` tags are present.
|
|
17217
17218
|
|
|
@@ -17437,6 +17438,17 @@ export function readFixture(path: string): void;
|
|
|
17437
17438
|
export function readFixture(path: string);
|
|
17438
17439
|
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17439
17440
|
|
|
17441
|
+
/**
|
|
17442
|
+
* @returns {SomeType}
|
|
17443
|
+
*/
|
|
17444
|
+
function quux (path) {
|
|
17445
|
+
if (true) {
|
|
17446
|
+
return;
|
|
17447
|
+
}
|
|
17448
|
+
return 15;
|
|
17449
|
+
};
|
|
17450
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17451
|
+
|
|
17440
17452
|
/**
|
|
17441
17453
|
* Reads a test fixture.
|
|
17442
17454
|
*
|
|
@@ -17449,6 +17461,87 @@ export function readFixture(path: string): void {
|
|
|
17449
17461
|
return;
|
|
17450
17462
|
};
|
|
17451
17463
|
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17464
|
+
|
|
17465
|
+
/**
|
|
17466
|
+
* @returns {true}
|
|
17467
|
+
*/
|
|
17468
|
+
function quux () {
|
|
17469
|
+
if (true) {
|
|
17470
|
+
return true;
|
|
17471
|
+
}
|
|
17472
|
+
}
|
|
17473
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17474
|
+
|
|
17475
|
+
/**
|
|
17476
|
+
* @returns {true}
|
|
17477
|
+
*/
|
|
17478
|
+
function quux () {
|
|
17479
|
+
if (true) {
|
|
17480
|
+
} else {
|
|
17481
|
+
return;
|
|
17482
|
+
}
|
|
17483
|
+
}
|
|
17484
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17485
|
+
|
|
17486
|
+
/**
|
|
17487
|
+
* @returns {true}
|
|
17488
|
+
*/
|
|
17489
|
+
function quux (someVar) {
|
|
17490
|
+
switch (someVar) {
|
|
17491
|
+
case 1:
|
|
17492
|
+
return true;
|
|
17493
|
+
case 2:
|
|
17494
|
+
return;
|
|
17495
|
+
}
|
|
17496
|
+
}
|
|
17497
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17498
|
+
|
|
17499
|
+
/**
|
|
17500
|
+
* @returns {boolean}
|
|
17501
|
+
*/
|
|
17502
|
+
const quux = (someVar) => {
|
|
17503
|
+
if (someVar) {
|
|
17504
|
+
return true;
|
|
17505
|
+
}
|
|
17506
|
+
};
|
|
17507
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17508
|
+
|
|
17509
|
+
/**
|
|
17510
|
+
* @returns {true}
|
|
17511
|
+
*/
|
|
17512
|
+
function quux () {
|
|
17513
|
+
try {
|
|
17514
|
+
return true;
|
|
17515
|
+
} catch (error) {
|
|
17516
|
+
}
|
|
17517
|
+
}
|
|
17518
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17519
|
+
|
|
17520
|
+
/**
|
|
17521
|
+
* @returns {true}
|
|
17522
|
+
*/
|
|
17523
|
+
function quux () {
|
|
17524
|
+
try {
|
|
17525
|
+
return true;
|
|
17526
|
+
} catch (error) {
|
|
17527
|
+
return true;
|
|
17528
|
+
} finally {
|
|
17529
|
+
return;
|
|
17530
|
+
}
|
|
17531
|
+
}
|
|
17532
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17533
|
+
|
|
17534
|
+
/**
|
|
17535
|
+
* @returns {true}
|
|
17536
|
+
*/
|
|
17537
|
+
function quux () {
|
|
17538
|
+
try {
|
|
17539
|
+
} catch (error) {
|
|
17540
|
+
} finally {
|
|
17541
|
+
return true;
|
|
17542
|
+
}
|
|
17543
|
+
}
|
|
17544
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17452
17545
|
````
|
|
17453
17546
|
|
|
17454
17547
|
The following patterns are not considered problems:
|
|
@@ -17614,7 +17707,7 @@ function quux () {
|
|
|
17614
17707
|
return true;
|
|
17615
17708
|
} catch (err) {
|
|
17616
17709
|
}
|
|
17617
|
-
return;
|
|
17710
|
+
return true;
|
|
17618
17711
|
}
|
|
17619
17712
|
|
|
17620
17713
|
/**
|
|
@@ -17625,7 +17718,7 @@ function quux () {
|
|
|
17625
17718
|
} finally {
|
|
17626
17719
|
return true;
|
|
17627
17720
|
}
|
|
17628
|
-
return;
|
|
17721
|
+
return true;
|
|
17629
17722
|
}
|
|
17630
17723
|
|
|
17631
17724
|
/**
|
|
@@ -17633,7 +17726,7 @@ function quux () {
|
|
|
17633
17726
|
*/
|
|
17634
17727
|
function quux () {
|
|
17635
17728
|
try {
|
|
17636
|
-
return;
|
|
17729
|
+
return true;
|
|
17637
17730
|
} catch (err) {
|
|
17638
17731
|
}
|
|
17639
17732
|
return true;
|
|
@@ -17648,7 +17741,7 @@ function quux () {
|
|
|
17648
17741
|
} catch (err) {
|
|
17649
17742
|
return true;
|
|
17650
17743
|
}
|
|
17651
|
-
return;
|
|
17744
|
+
return true;
|
|
17652
17745
|
}
|
|
17653
17746
|
|
|
17654
17747
|
/**
|
|
@@ -17659,7 +17752,7 @@ function quux () {
|
|
|
17659
17752
|
case 'abc':
|
|
17660
17753
|
return true;
|
|
17661
17754
|
}
|
|
17662
|
-
return;
|
|
17755
|
+
return true;
|
|
17663
17756
|
}
|
|
17664
17757
|
|
|
17665
17758
|
/**
|
|
@@ -17668,7 +17761,7 @@ function quux () {
|
|
|
17668
17761
|
function quux () {
|
|
17669
17762
|
switch (true) {
|
|
17670
17763
|
case 'abc':
|
|
17671
|
-
return;
|
|
17764
|
+
return true;
|
|
17672
17765
|
}
|
|
17673
17766
|
return true;
|
|
17674
17767
|
}
|
|
@@ -17680,7 +17773,7 @@ function quux () {
|
|
|
17680
17773
|
for (const i of abc) {
|
|
17681
17774
|
return true;
|
|
17682
17775
|
}
|
|
17683
|
-
return;
|
|
17776
|
+
return true;
|
|
17684
17777
|
}
|
|
17685
17778
|
|
|
17686
17779
|
/**
|
|
@@ -17696,7 +17789,7 @@ function quux () {
|
|
|
17696
17789
|
* @returns {true}
|
|
17697
17790
|
*/
|
|
17698
17791
|
function quux () {
|
|
17699
|
-
for (
|
|
17792
|
+
for (const a of b) {
|
|
17700
17793
|
return true;
|
|
17701
17794
|
}
|
|
17702
17795
|
}
|
|
@@ -17705,8 +17798,8 @@ function quux () {
|
|
|
17705
17798
|
* @returns {true}
|
|
17706
17799
|
*/
|
|
17707
17800
|
function quux () {
|
|
17708
|
-
|
|
17709
|
-
return true
|
|
17801
|
+
loop: for (const a of b) {
|
|
17802
|
+
return true;
|
|
17710
17803
|
}
|
|
17711
17804
|
}
|
|
17712
17805
|
|
|
@@ -17714,20 +17807,28 @@ function quux () {
|
|
|
17714
17807
|
* @returns {true}
|
|
17715
17808
|
*/
|
|
17716
17809
|
function quux () {
|
|
17717
|
-
|
|
17810
|
+
for (let i=0; i<n; i+=1) {
|
|
17811
|
+
return true;
|
|
17812
|
+
}
|
|
17813
|
+
}
|
|
17814
|
+
|
|
17815
|
+
/**
|
|
17816
|
+
* @returns {true}
|
|
17817
|
+
*/
|
|
17818
|
+
function quux () {
|
|
17819
|
+
while(true) {
|
|
17718
17820
|
return true
|
|
17719
17821
|
}
|
|
17720
|
-
while(true)
|
|
17721
17822
|
}
|
|
17722
17823
|
|
|
17723
17824
|
/**
|
|
17724
17825
|
* @returns {true}
|
|
17725
17826
|
*/
|
|
17726
17827
|
function quux () {
|
|
17727
|
-
|
|
17728
|
-
return
|
|
17828
|
+
do {
|
|
17829
|
+
return true
|
|
17729
17830
|
}
|
|
17730
|
-
|
|
17831
|
+
while(true)
|
|
17731
17832
|
}
|
|
17732
17833
|
|
|
17733
17834
|
/**
|
|
@@ -17737,6 +17838,7 @@ function quux () {
|
|
|
17737
17838
|
if (true) {
|
|
17738
17839
|
return true;
|
|
17739
17840
|
}
|
|
17841
|
+
return true;
|
|
17740
17842
|
}
|
|
17741
17843
|
|
|
17742
17844
|
/**
|
|
@@ -17754,11 +17856,11 @@ function quux () {
|
|
|
17754
17856
|
*/
|
|
17755
17857
|
function quux () {
|
|
17756
17858
|
if (true) {
|
|
17757
|
-
return;
|
|
17859
|
+
return true;
|
|
17758
17860
|
} else {
|
|
17759
17861
|
return true;
|
|
17760
17862
|
}
|
|
17761
|
-
return;
|
|
17863
|
+
return true;
|
|
17762
17864
|
}
|
|
17763
17865
|
|
|
17764
17866
|
/**
|
|
@@ -17865,6 +17967,32 @@ export function readFixture(path: string): Promise<Buffer> {
|
|
|
17865
17967
|
* @returns {void} The file contents as buffer.
|
|
17866
17968
|
*/
|
|
17867
17969
|
export function readFixture(path: string);
|
|
17970
|
+
|
|
17971
|
+
/**
|
|
17972
|
+
* @returns {SomeType}
|
|
17973
|
+
*/
|
|
17974
|
+
function quux (path) {
|
|
17975
|
+
if (true) {
|
|
17976
|
+
return 5;
|
|
17977
|
+
}
|
|
17978
|
+
return 15;
|
|
17979
|
+
};
|
|
17980
|
+
|
|
17981
|
+
/**
|
|
17982
|
+
* @returns {*} Foo.
|
|
17983
|
+
*/
|
|
17984
|
+
const quux = () => new Promise((resolve) => {
|
|
17985
|
+
resolve(3);
|
|
17986
|
+
});
|
|
17987
|
+
|
|
17988
|
+
/**
|
|
17989
|
+
* @returns {*} Foo.
|
|
17990
|
+
*/
|
|
17991
|
+
const quux = function () {
|
|
17992
|
+
return new Promise((resolve) => {
|
|
17993
|
+
resolve(3);
|
|
17994
|
+
});
|
|
17995
|
+
};
|
|
17868
17996
|
````
|
|
17869
17997
|
|
|
17870
17998
|
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -527,8 +527,8 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
527
527
|
utils.hasDefinedTypeTag = tag => {
|
|
528
528
|
return _jsdocUtils.default.hasDefinedTypeTag(tag);
|
|
529
529
|
};
|
|
530
|
-
utils.hasValueOrExecutorHasNonEmptyResolveValue = anyPromiseAsReturn => {
|
|
531
|
-
return _jsdocUtils.default.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);
|
|
530
|
+
utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {
|
|
531
|
+
return _jsdocUtils.default.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);
|
|
532
532
|
};
|
|
533
533
|
utils.hasYieldValue = () => {
|
|
534
534
|
if (['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type)) {
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","reducedNode","getReducedASTNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","reducedNode","getReducedASTNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
|
|
@@ -69,7 +69,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// In case a return value is declared in JSDoc, we also expect one in the code.
|
|
72
|
-
if (!returnNever && (reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tag)) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(exemptAsync) && (!exemptGenerators || !node.generator)) {
|
|
72
|
+
if (!returnNever && (reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tag)) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(exemptAsync, true) && (!exemptGenerators || !node.generator)) {
|
|
73
73
|
report(`JSDoc @${tagName} declaration present but return expression not available in function.`);
|
|
74
74
|
}
|
|
75
75
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireReturnsCheck.js","names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","iterateJsdoc","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","tag","type","trim","test","returnNever","hasValueOrExecutorHasNonEmptyResolveValue","hasDefinedTypeTag","generator","meta","docs","description","url","schema","additionalProperties","properties","default"],"sources":["../../src/rules/requireReturnsCheck.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({\n tagName: 'returns',\n });\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n const [\n tag,\n ] = tags;\n\n const type = tag.type.trim();\n\n // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions\n if (/asserts\\s/u.test(type)) {\n return;\n }\n\n const returnNever = type === 'never';\n\n if (returnNever && utils.hasValueOrExecutorHasNonEmptyResolveValue(false)) {\n report(`JSDoc @${tagName} declaration set with \"never\" but return expression is present in function.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if (\n !returnNever &&\n (\n reportMissingReturnForUndefinedTypes ||\n utils.hasDefinedTypeTag(tag)\n ) &&\n !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) && (!exemptGenerators || !node.generator)\n ) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AAA2C;AAE3C,MAAMA,OAAO,GAAG,CAACC,KAAK,EAAEC,QAAQ,KAAK;EACnC,MAAMC,WAAW,GAAG;EAClB;EACA;EACA;EACA;EACA;EACA,UAAU,EACV,SAAS;EAET;EACA;EACA,OAAO,EACP,aAAa,EACb,WAAW,CACZ;EAED,IAAID,QAAQ,CAACE,IAAI,KAAK,SAAS,EAAE;IAC/B;IACAD,WAAW,CAACE,IAAI,CAAC,QAAQ,CAAC;EAC5B;EAEA,OAAOJ,KAAK,CAACK,OAAO,CAACH,WAAW,CAAC,IAC/BF,KAAK,CAACM,aAAa,EAAE,IACrBN,KAAK,CAACO,WAAW,CAAC,WAAW,CAAC,IAC9BN,QAAQ,CAACE,IAAI,KAAK,SAAS,IAAIH,KAAK,CAACO,WAAW,CAAC,QAAQ,CAAC;AAC9D,CAAC;AAAC,eAEa,IAAAC,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,IAAI;EACJC,MAAM;EACNV,QAAQ;EACRD;AACF,CAAC,KAAK;EACJ,MAAM;IACJY,WAAW,GAAG,IAAI;IAClBC,gBAAgB,GAAGZ,QAAQ,CAACE,IAAI,KAAK,YAAY;IACjDW,oCAAoC,GAAG;EACzC,CAAC,GAAGL,OAAO,CAACM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,IAAIhB,OAAO,CAACC,KAAK,EAAEC,QAAQ,CAAC,EAAE;IAC5B;EACF;EAEA,IAAIW,WAAW,IAAIZ,KAAK,CAACgB,OAAO,EAAE,EAAE;IAClC;EACF;EAEA,MAAMC,OAAO,GAAGjB,KAAK,CAACkB,mBAAmB,CAAC;IACxCD,OAAO,EAAE;EACX,CAAC,CAAC;EACF,IAAI,CAACA,OAAO,EAAE;IACZ;EACF;EAEA,MAAME,IAAI,GAAGnB,KAAK,CAACoB,OAAO,CAACH,OAAO,CAAC;EAEnC,IAAIE,IAAI,CAACE,MAAM,KAAK,CAAC,EAAE;IACrB;EACF;EAEA,IAAIF,IAAI,CAACE,MAAM,GAAG,CAAC,EAAE;IACnBV,MAAM,CAAE,wBAAuBM,OAAQ,eAAc,CAAC;IAEtD;EACF;EAEA,MAAM,CACJK,GAAG,CACJ,GAAGH,IAAI;EAER,MAAMI,IAAI,GAAGD,GAAG,CAACC,IAAI,CAACC,IAAI,EAAE;;EAE5B;EACA,IAAI,YAAY,CAACC,IAAI,CAACF,IAAI,CAAC,EAAE;IAC3B;EACF;EAEA,MAAMG,WAAW,GAAGH,IAAI,KAAK,OAAO;EAEpC,IAAIG,WAAW,IAAI1B,KAAK,CAAC2B,yCAAyC,CAAC,KAAK,CAAC,EAAE;IACzEhB,MAAM,CAAE,UAASM,OAAQ,6EAA4E,CAAC;IAEtG;EACF;;EAEA;EACA,IACE,CAACS,WAAW,KAEVZ,oCAAoC,IACpCd,KAAK,CAAC4B,iBAAiB,CAACN,GAAG,CAAC,CAC7B,IACD,CAACtB,KAAK,CAAC2B,yCAAyC,CAC9Cf,WAAW,
|
|
1
|
+
{"version":3,"file":"requireReturnsCheck.js","names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","iterateJsdoc","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","tag","type","trim","test","returnNever","hasValueOrExecutorHasNonEmptyResolveValue","hasDefinedTypeTag","generator","meta","docs","description","url","schema","additionalProperties","properties","default"],"sources":["../../src/rules/requireReturnsCheck.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({\n tagName: 'returns',\n });\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n const [\n tag,\n ] = tags;\n\n const type = tag.type.trim();\n\n // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions\n if (/asserts\\s/u.test(type)) {\n return;\n }\n\n const returnNever = type === 'never';\n\n if (returnNever && utils.hasValueOrExecutorHasNonEmptyResolveValue(false)) {\n report(`JSDoc @${tagName} declaration set with \"never\" but return expression is present in function.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if (\n !returnNever &&\n (\n reportMissingReturnForUndefinedTypes ||\n utils.hasDefinedTypeTag(tag)\n ) &&\n !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n true,\n ) && (!exemptGenerators || !node.generator)\n ) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
@@ -21,6 +21,87 @@ const isVoidPromise = node => {
|
|
|
21
21
|
};
|
|
22
22
|
const undefinedKeywords = new Set(['TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword']);
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Checks if a node has a return statement. Void return does not count.
|
|
26
|
+
*
|
|
27
|
+
* @param {object} node
|
|
28
|
+
* @param {PromiseFilter} promFilter
|
|
29
|
+
* @returns {boolean|Node}
|
|
30
|
+
*/
|
|
31
|
+
// eslint-disable-next-line complexity
|
|
32
|
+
const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
33
|
+
if (!node) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
switch (node.type) {
|
|
37
|
+
case 'TSDeclareFunction':
|
|
38
|
+
case 'TSFunctionType':
|
|
39
|
+
case 'TSMethodSignature':
|
|
40
|
+
{
|
|
41
|
+
var _node$returnType, _node$returnType$type;
|
|
42
|
+
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
|
+
return type && !undefinedKeywords.has(type);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// case 'MethodDefinition':
|
|
47
|
+
// return allBrancheshaveReturnValues(node.value, promFilter);
|
|
48
|
+
case 'FunctionExpression':
|
|
49
|
+
case 'FunctionDeclaration':
|
|
50
|
+
case 'ArrowFunctionExpression':
|
|
51
|
+
{
|
|
52
|
+
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || allBrancheshaveReturnValues(node.body, promFilter);
|
|
53
|
+
}
|
|
54
|
+
case 'BlockStatement':
|
|
55
|
+
{
|
|
56
|
+
const lastBodyNode = node.body.slice(-1)[0];
|
|
57
|
+
return allBrancheshaveReturnValues(lastBodyNode, promFilter);
|
|
58
|
+
}
|
|
59
|
+
case 'LabeledStatement':
|
|
60
|
+
case 'WhileStatement':
|
|
61
|
+
case 'DoWhileStatement':
|
|
62
|
+
case 'ForStatement':
|
|
63
|
+
case 'ForInStatement':
|
|
64
|
+
case 'ForOfStatement':
|
|
65
|
+
case 'WithStatement':
|
|
66
|
+
{
|
|
67
|
+
return allBrancheshaveReturnValues(node.body, promFilter);
|
|
68
|
+
}
|
|
69
|
+
case 'IfStatement':
|
|
70
|
+
{
|
|
71
|
+
return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);
|
|
72
|
+
}
|
|
73
|
+
case 'TryStatement':
|
|
74
|
+
{
|
|
75
|
+
return allBrancheshaveReturnValues(node.block, promFilter) && allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter) && allBrancheshaveReturnValues(node.finalizer, promFilter);
|
|
76
|
+
}
|
|
77
|
+
case 'SwitchStatement':
|
|
78
|
+
{
|
|
79
|
+
return node.cases.every(someCase => {
|
|
80
|
+
return someCase.consequent.every(nde => {
|
|
81
|
+
return allBrancheshaveReturnValues(nde, promFilter);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
case 'ReturnStatement':
|
|
86
|
+
{
|
|
87
|
+
// void return does not count.
|
|
88
|
+
if (node.argument === null) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
92
|
+
// Let caller decide how to filter, but this is, at the least,
|
|
93
|
+
// a return of sorts and truthy
|
|
94
|
+
return promFilter(node.argument);
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
default:
|
|
99
|
+
{
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
24
105
|
/**
|
|
25
106
|
* @callback PromiseFilter
|
|
26
107
|
* @param {object} node
|
|
@@ -31,11 +112,12 @@ const undefinedKeywords = new Set(['TSVoidKeyword', 'TSUndefinedKeyword', 'TSNev
|
|
|
31
112
|
* Checks if a node has a return statement. Void return does not count.
|
|
32
113
|
*
|
|
33
114
|
* @param {object} node
|
|
115
|
+
* @param {boolean} throwOnNullReturn
|
|
34
116
|
* @param {PromiseFilter} promFilter
|
|
35
117
|
* @returns {boolean|Node}
|
|
36
118
|
*/
|
|
37
119
|
// eslint-disable-next-line complexity
|
|
38
|
-
const hasReturnValue = (node, promFilter) => {
|
|
120
|
+
const hasReturnValue = (node, throwOnNullReturn, promFilter) => {
|
|
39
121
|
if (!node) {
|
|
40
122
|
return false;
|
|
41
123
|
}
|
|
@@ -44,22 +126,22 @@ const hasReturnValue = (node, promFilter) => {
|
|
|
44
126
|
case 'TSFunctionType':
|
|
45
127
|
case 'TSMethodSignature':
|
|
46
128
|
{
|
|
47
|
-
var _node$
|
|
48
|
-
const type = node === null || node === void 0 ? void 0 : (_node$
|
|
129
|
+
var _node$returnType2, _node$returnType2$typ;
|
|
130
|
+
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;
|
|
49
131
|
return type && !undefinedKeywords.has(type);
|
|
50
132
|
}
|
|
51
133
|
case 'MethodDefinition':
|
|
52
|
-
return hasReturnValue(node.value, promFilter);
|
|
134
|
+
return hasReturnValue(node.value, throwOnNullReturn, promFilter);
|
|
53
135
|
case 'FunctionExpression':
|
|
54
136
|
case 'FunctionDeclaration':
|
|
55
137
|
case 'ArrowFunctionExpression':
|
|
56
138
|
{
|
|
57
|
-
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, promFilter);
|
|
139
|
+
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
58
140
|
}
|
|
59
141
|
case 'BlockStatement':
|
|
60
142
|
{
|
|
61
143
|
return node.body.some(bodyNode => {
|
|
62
|
-
return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);
|
|
144
|
+
return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);
|
|
63
145
|
});
|
|
64
146
|
}
|
|
65
147
|
case 'LabeledStatement':
|
|
@@ -70,21 +152,21 @@ const hasReturnValue = (node, promFilter) => {
|
|
|
70
152
|
case 'ForOfStatement':
|
|
71
153
|
case 'WithStatement':
|
|
72
154
|
{
|
|
73
|
-
return hasReturnValue(node.body, promFilter);
|
|
155
|
+
return hasReturnValue(node.body, throwOnNullReturn, promFilter);
|
|
74
156
|
}
|
|
75
157
|
case 'IfStatement':
|
|
76
158
|
{
|
|
77
|
-
return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);
|
|
159
|
+
return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) || hasReturnValue(node.alternate, throwOnNullReturn, promFilter);
|
|
78
160
|
}
|
|
79
161
|
case 'TryStatement':
|
|
80
162
|
{
|
|
81
|
-
return hasReturnValue(node.block, promFilter) || hasReturnValue(node.handler && node.handler.body, promFilter) || hasReturnValue(node.finalizer, promFilter);
|
|
163
|
+
return hasReturnValue(node.block, throwOnNullReturn, promFilter) || hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) || hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);
|
|
82
164
|
}
|
|
83
165
|
case 'SwitchStatement':
|
|
84
166
|
{
|
|
85
167
|
return node.cases.some(someCase => {
|
|
86
168
|
return someCase.consequent.some(nde => {
|
|
87
|
-
return hasReturnValue(nde, promFilter);
|
|
169
|
+
return hasReturnValue(nde, throwOnNullReturn, promFilter);
|
|
88
170
|
});
|
|
89
171
|
});
|
|
90
172
|
}
|
|
@@ -92,6 +174,9 @@ const hasReturnValue = (node, promFilter) => {
|
|
|
92
174
|
{
|
|
93
175
|
// void return does not count.
|
|
94
176
|
if (node.argument === null) {
|
|
177
|
+
if (throwOnNullReturn) {
|
|
178
|
+
throw new Error('Null return');
|
|
179
|
+
}
|
|
95
180
|
return false;
|
|
96
181
|
}
|
|
97
182
|
if (promFilter && isNewPromiseExpression(node.argument)) {
|
|
@@ -293,10 +378,27 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
293
378
|
*
|
|
294
379
|
* @param {object} node
|
|
295
380
|
* @param {boolean} anyPromiseAsReturn
|
|
381
|
+
* @param {boolean} allBranches
|
|
296
382
|
* @returns {boolean}
|
|
297
383
|
*/
|
|
298
|
-
const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {
|
|
299
|
-
|
|
384
|
+
const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {
|
|
385
|
+
const hasReturnMethod = allBranches ? (nde, promiseFilter) => {
|
|
386
|
+
try {
|
|
387
|
+
hasReturnValue(nde, true, promiseFilter);
|
|
388
|
+
} catch (error) {
|
|
389
|
+
// istanbul ignore else
|
|
390
|
+
if (error.message === 'Null return') {
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// istanbul ignore next
|
|
395
|
+
throw error;
|
|
396
|
+
}
|
|
397
|
+
return allBrancheshaveReturnValues(nde, promiseFilter);
|
|
398
|
+
} : (nde, promiseFilter) => {
|
|
399
|
+
return hasReturnValue(nde, false, promiseFilter);
|
|
400
|
+
};
|
|
401
|
+
return hasReturnMethod(node, prom => {
|
|
300
402
|
if (anyPromiseAsReturn) {
|
|
301
403
|
return true;
|
|
302
404
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","hasReturnValue","promFilter","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","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","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 * @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 {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (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 hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, 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, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(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 * 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 * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(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","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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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "http://gajus.com"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@es-joy/jsdoccomment": "~0.
|
|
8
|
+
"@es-joy/jsdoccomment": "~0.33.0",
|
|
9
9
|
"comment-parser": "1.3.1",
|
|
10
10
|
"debug": "^4.3.4",
|
|
11
11
|
"escape-string-regexp": "^4.0.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"description": "JSDoc linting rules for ESLint.",
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@babel/cli": "^7.19.3",
|
|
19
|
-
"@babel/core": "^7.19.
|
|
19
|
+
"@babel/core": "^7.19.6",
|
|
20
20
|
"@babel/eslint-parser": "^7.19.1",
|
|
21
21
|
"@babel/node": "^7.19.1",
|
|
22
22
|
"@babel/plugin-syntax-class-properties": "^7.12.13",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"chai": "^4.3.6",
|
|
33
33
|
"cross-env": "^7.0.3",
|
|
34
34
|
"decamelize": "^5.0.1",
|
|
35
|
-
"eslint": "^8.
|
|
35
|
+
"eslint": "^8.26.0",
|
|
36
36
|
"eslint-config-canonical": "~33.0.1",
|
|
37
37
|
"gitdown": "^3.1.5",
|
|
38
38
|
"glob": "^8.0.3",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"typescript": "^4.8.4"
|
|
49
49
|
},
|
|
50
50
|
"engines": {
|
|
51
|
-
"node": "^14 || ^16 || ^17 || ^18"
|
|
51
|
+
"node": "^14 || ^16 || ^17 || ^18 || ^19"
|
|
52
52
|
},
|
|
53
53
|
"keywords": [
|
|
54
54
|
"eslint",
|
|
@@ -117,5 +117,5 @@
|
|
|
117
117
|
"test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
|
|
118
118
|
"test-index": "npm run test-no-cov -- test/rules/index.js"
|
|
119
119
|
},
|
|
120
|
-
"version": "39.3.
|
|
120
|
+
"version": "39.3.15"
|
|
121
121
|
}
|