Skip to content

Commit dfd2a8a

Browse files
committed
feat(require-returns): add optional fixer
1 parent 6f1b50b commit dfd2a8a

File tree

4 files changed

+56
-3
lines changed

4 files changed

+56
-3
lines changed

.README/rules/require-returns.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Will also report if multiple `@returns` tags are present.
4242
`forceReturnsWithAsync` option is set with a present `@async` tag
4343
(since we are not checking against the actual `return` values in these
4444
cases).
45+
- `enableFixer` - Whether to enable the fixer to add a blank `@returns`.
46+
Defaults to `false`.
4547

4648
## Context and settings
4749

@@ -51,7 +53,7 @@ Will also report if multiple `@returns` tags are present.
5153
| Tags | `returns` |
5254
| Aliases | `return` |
5355
|Recommended|true|
54-
| Options |`checkConstructors`, `checkGetters`, `contexts`, `exemptedBy`, `forceRequireReturn`, `forceReturnsWithAsync`|
56+
| Options |`checkConstructors`, `checkGetters`, `contexts`, `enableFixer`, `exemptedBy`, `forceRequireReturn`, `forceReturnsWithAsync`|
5557
| Settings | `ignoreReplacesDocs`, `overrideReplacesDocs`, `augmentsExtendsReplacesDocs`, `implementsReplacesDocs` |
5658

5759
## Failing examples

docs/rules/require-returns.md

+13-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ Will also report if multiple `@returns` tags are present.
5050
`forceReturnsWithAsync` option is set with a present `@async` tag
5151
(since we are not checking against the actual `return` values in these
5252
cases).
53+
- `enableFixer` - Whether to enable the fixer to add a blank `@returns`.
54+
Defaults to `false`.
5355

5456
<a name="user-content-require-returns-context-and-settings"></a>
5557
<a name="require-returns-context-and-settings"></a>
@@ -61,7 +63,7 @@ Will also report if multiple `@returns` tags are present.
6163
| Tags | `returns` |
6264
| Aliases | `return` |
6365
|Recommended|true|
64-
| Options |`checkConstructors`, `checkGetters`, `contexts`, `exemptedBy`, `forceRequireReturn`, `forceReturnsWithAsync`|
66+
| Options |`checkConstructors`, `checkGetters`, `contexts`, `enableFixer`, `exemptedBy`, `forceRequireReturn`, `forceReturnsWithAsync`|
6567
| Settings | `ignoreReplacesDocs`, `overrideReplacesDocs`, `augmentsExtendsReplacesDocs`, `implementsReplacesDocs` |
6668

6769
<a name="user-content-require-returns-failing-examples"></a>
@@ -80,6 +82,16 @@ function quux (foo) {
8082
}
8183
// Message: Missing JSDoc @returns declaration.
8284

85+
/**
86+
*
87+
*/
88+
function quux (foo) {
89+
90+
return foo;
91+
}
92+
// "jsdoc/require-returns": ["error"|"warn", {"enableFixer":true}]
93+
// Message: Missing JSDoc @returns declaration.
94+
8395
/**
8496
*
8597
*/

src/rules/requireReturns.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export default iterateJsdoc(({
4444
}) => {
4545
const {
4646
contexts,
47+
enableFixer = false,
4748
forceRequireReturn = false,
4849
forceReturnsWithAsync = false,
4950
} = context.options[0] || {};
@@ -110,7 +111,9 @@ export default iterateJsdoc(({
110111
};
111112

112113
if (shouldReport()) {
113-
report(`Missing JSDoc @${tagName} declaration.`);
114+
utils.reportJSDoc(`Missing JSDoc @${tagName} declaration.`, null, enableFixer ? () => {
115+
utils.addTag(tagName);
116+
} : null);
114117
}
115118
}, {
116119
contextDefaults: true,
@@ -119,6 +122,7 @@ export default iterateJsdoc(({
119122
description: 'Requires that returns are documented.',
120123
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns.md#repos-sticky-header',
121124
},
125+
fixable: 'code',
122126
schema: [
123127
{
124128
additionalProperties: false,
@@ -156,6 +160,9 @@ export default iterateJsdoc(({
156160
},
157161
type: 'array',
158162
},
163+
enableFixer: {
164+
type: 'boolean',
165+
},
159166
exemptedBy: {
160167
items: {
161168
type: 'string',

test/rules/assertions/requireReturns.js

+32
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,38 @@ export default {
1717
},
1818
],
1919
},
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 @returns declaration.',
34+
},
35+
],
36+
options: [
37+
{
38+
enableFixer: true,
39+
},
40+
],
41+
output: `
42+
/**
43+
*
44+
* @returns
45+
*/
46+
function quux (foo) {
47+
48+
return foo;
49+
}
50+
`,
51+
},
2052
{
2153
code: `
2254
/**

0 commit comments

Comments
 (0)