Skip to content

Commit 5cddd06

Browse files
ptkdevgajus
authored andcommitted
feat: require-returns (#138)
* [Feature] require-returns #14 #137 * docs: generate docs * [Feature] require-returns #14 #137 * [Feature] require-returns #14 #137 * [Misprint] remove eslint --fix * [Docs] Available require-returns * docs: generate docs * [Docs] Removed docs generated from README.md * docs: generate docs * [Docs] Restore generated docs
1 parent 14a9aab commit 5cddd06

File tree

7 files changed

+111
-0
lines changed

7 files changed

+111
-0
lines changed

.README/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ This table maps the rules between `eslint-plugin-jsdoc` and `jscs-jsdoc`.
2727
| [`require-param-description`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-description) | [`requireParamDescription`](https://github.com/jscs-dev/jscs-jsdoc#requireparamdescription) |
2828
| [`require-param-name`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-name) | N/A |
2929
| [`require-param-type`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-type) | [`requireParamTypes`](https://github.com/jscs-dev/jscs-jsdoc#requireparamtypes) |
30+
| [`require-returns`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns) | [`requireReturn`](https://github.com/jscs-dev/jscs-jsdoc#requirereturn) |
3031
| [`require-returns-description`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-description) | [`requireReturnDescription`](https://github.com/jscs-dev/jscs-jsdoc#requirereturndescription) |
3132
| [`require-returns-type`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-type) | [`requireReturnTypes`](https://github.com/jscs-dev/jscs-jsdoc#requirereturntypes) |
3233
| [`valid-types`](https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types) | N/A |
@@ -83,6 +84,7 @@ Finally, enable all of the rules that you would like to use.
8384
"jsdoc/require-param-description": 1,
8485
"jsdoc/require-param-name": 1,
8586
"jsdoc/require-param-type": 1,
87+
"jsdoc/require-returns": 1,
8688
"jsdoc/require-returns-description": 1,
8789
"jsdoc/require-returns-type": 1,
8890
"jsdoc/valid-types": 1

.README/rules/require-returns.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
### `require-returns`
2+
3+
Requires returns are documented.
4+
5+
|||
6+
|---|---|
7+
|Context|`ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`|
8+
|Tags|`returns`|
9+
10+
<!-- assertions requireParam -->

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import requireParamName from './rules/requireParamName';
1313
import requireParam from './rules/requireParam';
1414
import requireParamDescription from './rules/requireParamDescription';
1515
import requireParamType from './rules/requireParamType';
16+
import requireReturns from './rules/requireReturns';
1617
import requireReturnsDescription from './rules/requireReturnsDescription';
1718
import requireReturnsType from './rules/requireReturnsType';
1819
import validTypes from './rules/validTypes';
@@ -35,6 +36,7 @@ export default {
3536
'jsdoc/require-param-description': 'warn',
3637
'jsdoc/require-param-name': 'warn',
3738
'jsdoc/require-param-type': 'warn',
39+
'jsdoc/require-returns': 'warn',
3840
'jsdoc/require-returns-description': 'warn',
3941
'jsdoc/require-returns-type': 'warn',
4042
'jsdoc/valid-types': 'warn'
@@ -56,6 +58,7 @@ export default {
5658
'require-param-description': requireParamDescription,
5759
'require-param-name': requireParamName,
5860
'require-param-type': requireParamType,
61+
'require-returns': requireReturns,
5962
'require-returns-description': requireReturnsDescription,
6063
'require-returns-type': requireReturnsType,
6164
'valid-types': validTypes

src/iterateJsdoc.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ const curryUtils = (
4848
return jsdocUtils.getFunctionParameterNames(functionNode);
4949
};
5050

51+
utils.getFunctionSourceCode = function () {
52+
return sourceCode.getText(functionNode);
53+
};
54+
5155
utils.getJsdocParameterNamesDeep = () => {
5256
return jsdocUtils.getJsdocParameterNamesDeep(jsdoc, utils.getPreferredTagName('param'));
5357
};

src/rules/requireReturns.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import _ from 'lodash';
2+
import iterateJsdoc from '../iterateJsdoc';
3+
4+
export default iterateJsdoc(({
5+
jsdoc,
6+
report,
7+
utils
8+
}) => {
9+
const targetTagName = utils.getPreferredTagName('returns');
10+
11+
const jsdocTags = _.filter(jsdoc.tags, {
12+
tag: targetTagName
13+
});
14+
15+
const sourcecode = utils.getFunctionSourceCode();
16+
17+
if (JSON.stringify(jsdocTags) === '[]' && sourcecode.indexOf('return') >= 1) {
18+
report('Missing JSDoc @' + targetTagName + ' declaration.');
19+
}
20+
21+
if (JSON.stringify(jsdocTags) !== '[]' && sourcecode.indexOf('return') < 1) {
22+
report('Present JSDoc @' + targetTagName + ' declaration but not available return expression in function.');
23+
}
24+
});
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
export default {
2+
invalid: [
3+
{
4+
code: `
5+
/**
6+
*
7+
*/
8+
function quux (foo) {
9+
10+
return foo;
11+
}
12+
`,
13+
errors: [
14+
{
15+
line: 2,
16+
message: 'Missing JSDoc @returns declaration.'
17+
}
18+
]
19+
},
20+
{
21+
code: `
22+
/**
23+
*
24+
*/
25+
function quux (foo) {
26+
27+
return foo;
28+
}
29+
`,
30+
errors: [
31+
{
32+
line: 2,
33+
message: 'Missing JSDoc @return declaration.'
34+
}
35+
],
36+
settings: {
37+
jsdoc: {
38+
tagNamePreference: {
39+
returns: 'return'
40+
}
41+
}
42+
}
43+
}
44+
],
45+
valid: [
46+
{
47+
code: `
48+
/**
49+
* @returns Foo.
50+
*/
51+
function quux () {
52+
53+
return foo;
54+
}
55+
`
56+
},
57+
{
58+
code: `
59+
/**
60+
*
61+
*/
62+
function quux () {
63+
}
64+
`
65+
}
66+
]
67+
};

test/rules/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ _.forEach([
2121
'require-param-description',
2222
'require-param-name',
2323
'require-param-type',
24+
'require-returns',
2425
'require-returns-description',
2526
'require-returns-type',
2627
'valid-types'

0 commit comments

Comments
 (0)