Skip to content

Commit b2bf54d

Browse files
committed
require-returns: for resolves, check more node types
Also ignores coverage-focused test for README
1 parent db001be commit b2bf54d

File tree

3 files changed

+139
-19
lines changed

3 files changed

+139
-19
lines changed

README.md

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14919,19 +14919,6 @@ function quux () {
1491914919
}
1492014920
// Message: Missing JSDoc @returns declaration.
1492114921

14922-
/**
14923-
*
14924-
*/
14925-
function quux () {
14926-
return new Promise((resolve, reject) => {
14927-
return () => {
14928-
identifierForCoverage;
14929-
resolve(true);
14930-
};
14931-
});
14932-
}
14933-
// Message: Missing JSDoc @returns declaration.
14934-
1493514922
/**
1493614923
*
1493714924
*/

src/jsdocUtils.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -627,8 +627,10 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
627627
case 'WithStatement': {
628628
return hasNonEmptyResolverCall(node.body, resolverName);
629629
}
630+
case 'ConditionalExpression':
630631
case 'IfStatement': {
631-
return hasNonEmptyResolverCall(node.consequent, resolverName) ||
632+
return hasNonEmptyResolverCall(node.test, resolverName) ||
633+
hasNonEmptyResolverCall(node.consequent, resolverName) ||
632634
hasNonEmptyResolverCall(node.alternate, resolverName);
633635
}
634636
case 'TryStatement': {
@@ -646,12 +648,24 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
646648
);
647649
}
648650
649-
/*
651+
case 'AssignmentExpression':
652+
case 'BinaryExpression':
653+
case 'LogicalExpression': {
654+
return hasNonEmptyResolverCall(node.left, resolverName) ||
655+
hasNonEmptyResolverCall(node.right, resolverName);
656+
}
657+
650658
// Comma
651-
case 'SequenceExpression':
652-
case 'ArrayExpression': case 'AssignmentExpression': case 'AssignmentPattern':
653-
case 'AwaitExpression': case 'BinaryExpression': case 'ConditionalExpression':
654-
case 'LogicalExpression': case 'MemberExpression': case 'OptionalMemberExpression':
659+
case 'SequenceExpression': {
660+
return node.expressions.some((subExpression) => {
661+
return hasNonEmptyResolverCall(subExpression, resolverName);
662+
});
663+
}
664+
665+
/*
666+
case 'ArrayExpression': case 'AssignmentPattern':
667+
case 'AwaitExpression':
668+
case 'MemberExpression': case 'OptionalMemberExpression':
655669
case 'VariableDeclaration':
656670
case 'OptionalCallExpression':
657671
case 'TaggedTemplateExpression':

test/rules/assertions/requireReturns.js

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,28 @@ export default {
646646
},
647647
],
648648
},
649+
{
650+
code: `
651+
/**
652+
*
653+
*/
654+
function quux () {
655+
return new Promise((resolve, reject) => {
656+
if (resolve(true)) {
657+
return;
658+
}
659+
return;
660+
});
661+
}
662+
`,
663+
errors: [
664+
{
665+
line: 2,
666+
message: 'Missing JSDoc @returns declaration.',
667+
},
668+
],
669+
ignoreReadme: true,
670+
},
649671
{
650672
code: `
651673
/**
@@ -666,6 +688,26 @@ export default {
666688
},
667689
],
668690
},
691+
{
692+
code: `
693+
/**
694+
*
695+
*/
696+
function quux () {
697+
return new Promise((resolve, reject) => {
698+
true ? resolve(true) : null;
699+
return;
700+
});
701+
}
702+
`,
703+
errors: [
704+
{
705+
line: 2,
706+
message: 'Missing JSDoc @returns declaration.',
707+
},
708+
],
709+
ignoreReadme: true,
710+
},
669711
{
670712
code: `
671713
/**
@@ -920,6 +962,83 @@ export default {
920962
message: 'Missing JSDoc @returns declaration.',
921963
},
922964
],
965+
ignoreReadme: true,
966+
},
967+
{
968+
code: `
969+
/**
970+
*
971+
*/
972+
function quux () {
973+
return new Promise((resolve, reject) => {
974+
a || resolve(true);
975+
});
976+
}
977+
`,
978+
errors: [
979+
{
980+
line: 2,
981+
message: 'Missing JSDoc @returns declaration.',
982+
},
983+
],
984+
ignoreReadme: true,
985+
},
986+
{
987+
code: `
988+
/**
989+
*
990+
*/
991+
function quux () {
992+
return new Promise((resolve, reject) => {
993+
(r = resolve(true));
994+
});
995+
}
996+
`,
997+
errors: [
998+
{
999+
line: 2,
1000+
message: 'Missing JSDoc @returns declaration.',
1001+
},
1002+
],
1003+
ignoreReadme: true,
1004+
},
1005+
{
1006+
code: `
1007+
/**
1008+
*
1009+
*/
1010+
function quux () {
1011+
return new Promise((resolve, reject) => {
1012+
a + (resolve(true));
1013+
});
1014+
}
1015+
`,
1016+
errors: [
1017+
{
1018+
line: 2,
1019+
message: 'Missing JSDoc @returns declaration.',
1020+
},
1021+
],
1022+
ignoreReadme: true,
1023+
},
1024+
{
1025+
code: `
1026+
/**
1027+
*
1028+
*/
1029+
function quux () {
1030+
return new Promise((resolve, reject) => {
1031+
a, resolve(true);
1032+
});
1033+
}
1034+
`,
1035+
errors: [
1036+
{
1037+
line: 2,
1038+
message: 'Missing JSDoc @returns declaration.',
1039+
},
1040+
],
1041+
ignoreReadme: true,
9231042
},
9241043
{
9251044
code: `

0 commit comments

Comments
 (0)