Skip to content

Commit e7acd09

Browse files
committed
require-returns: More AST types
1 parent 7362525 commit e7acd09

File tree

2 files changed

+84
-8
lines changed

2 files changed

+84
-8
lines changed

src/jsdocUtils.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -662,27 +662,41 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
662662
});
663663
}
664664
665-
/*
666-
case 'ArrayExpression': case 'AssignmentPattern':
665+
case 'ArrayExpression':
666+
return node.elements.some((bodyNode) => {
667+
return hasNonEmptyResolverCall(bodyNode, resolverName);
668+
});
669+
667670
case 'AwaitExpression':
668-
case 'MemberExpression': case 'OptionalMemberExpression':
671+
case 'SpreadElement':
672+
case 'UnaryExpression':
673+
case 'YieldExpression':
674+
return hasNonEmptyResolverCall(node.argument, resolverName);
675+
676+
/*
677+
case 'LabeledStatement':
669678
case 'VariableDeclaration':
670-
case 'OptionalCallExpression':
679+
680+
case 'MemberExpression': case 'OptionalMemberExpression': // ?.
681+
case 'OptionalCallExpression': ?.x()
682+
671683
case 'TaggedTemplateExpression':
672-
case 'TemplateElement': case 'TemplateLiteral': case 'UnaryExpression':
673-
case 'SpreadElement':
684+
case 'TemplateElement': case 'TemplateLiteral':
685+
686+
case 'AssignmentPattern':
674687
case 'ArrayPattern': case 'ObjectPattern':
688+
675689
case 'ObjectExpression':
676690
case 'Property':
691+
677692
case 'ClassProperty':
678693
case 'ClassDeclaration': case 'ClassExpression': case 'MethodDefinition':
679694
case 'Super':
695+
680696
case 'ExportDefaultDeclaration': case 'ExportNamedDeclaration':
681-
case 'LabeledStatement':
682697
case 'Import':
683698
case 'ImportExpression':
684699
case 'Decorator':
685-
case 'YieldExpression':
686700
687701
// Todo: Add these (and also add to Yield/Throw checks)
688702
return false;

test/rules/assertions/requireReturns.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,68 @@ export default {
10401040
],
10411041
ignoreReadme: true,
10421042
},
1043+
{
1044+
code: `
1045+
/**
1046+
*
1047+
*/
1048+
function quux () {
1049+
return new Promise((resolve, reject) => {
1050+
+resolve();
1051+
[...resolve()];
1052+
[resolve(true)];
1053+
});
1054+
}
1055+
`,
1056+
errors: [
1057+
{
1058+
line: 2,
1059+
message: 'Missing JSDoc @returns declaration.',
1060+
},
1061+
],
1062+
ignoreReadme: true,
1063+
},
1064+
{
1065+
code: `
1066+
/**
1067+
*
1068+
*/
1069+
function quux () {
1070+
return new Promise(function * (resolve, reject) {
1071+
yield resolve(true)
1072+
});
1073+
}
1074+
`,
1075+
errors: [
1076+
{
1077+
line: 2,
1078+
message: 'Missing JSDoc @returns declaration.',
1079+
},
1080+
],
1081+
ignoreReadme: true,
1082+
},
1083+
{
1084+
code: `
1085+
/**
1086+
*
1087+
*/
1088+
function quux () {
1089+
return new Promise(async function (resolve, reject) {
1090+
await resolve(true)
1091+
});
1092+
}
1093+
`,
1094+
errors: [
1095+
{
1096+
line: 2,
1097+
message: 'Missing JSDoc @returns declaration.',
1098+
},
1099+
],
1100+
ignoreReadme: true,
1101+
parserOptions: {
1102+
ecmaVersion: 8,
1103+
},
1104+
},
10431105
{
10441106
code: `
10451107
/**

0 commit comments

Comments
 (0)