Skip to content

Commit 92519e2

Browse files
brettz9golopot
authored andcommitted
feat(require-jsdoc): allow require to posses ClassExpression boolean property
1 parent 1e8bf34 commit 92519e2

File tree

5 files changed

+87
-3
lines changed

5 files changed

+87
-3
lines changed

.README/rules/require-jsdoc.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@ be checked by the rule.
2929

3030
- `ArrowFunctionExpression`
3131
- `ClassDeclaration`
32+
- `ClassExpression`
3233
- `FunctionDeclaration` (defaults to `true`)
3334
- `FunctionExpression`
3435
- `MethodDefinition`
3536

3637
|||
3738
|---|---|
38-
|Context|`ArrowFunctionExpression`, `ClassDeclaration`, `FunctionDeclaration`, `FunctionExpression`|
39+
|Context|`ArrowFunctionExpression`, `ClassDeclaration`, `ClassExpression`, `FunctionDeclaration`, `FunctionExpression`|
3940
|Tags|N/A|
4041
|Options|`publicOnly`|
4142
|Settings|`exemptEmptyFunctions`|

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3659,13 +3659,14 @@ be checked by the rule.
36593659

36603660
- `ArrowFunctionExpression`
36613661
- `ClassDeclaration`
3662+
- `ClassExpression`
36623663
- `FunctionDeclaration` (defaults to `true`)
36633664
- `FunctionExpression`
36643665
- `MethodDefinition`
36653666

36663667
|||
36673668
|---|---|
3668-
|Context|`ArrowFunctionExpression`, `ClassDeclaration`, `FunctionDeclaration`, `FunctionExpression`|
3669+
|Context|`ArrowFunctionExpression`, `ClassDeclaration`, `ClassExpression`, `FunctionDeclaration`, `FunctionExpression`|
36693670
|Tags|N/A|
36703671
|Options|`publicOnly`|
36713672
|Settings|`exemptEmptyFunctions`|
@@ -3692,6 +3693,12 @@ export const test = () => {
36923693
// Options: [{"publicOnly":true,"require":{"ArrowFunctionExpression":true}}]
36933694
// Message: Missing JSDoc comment.
36943695

3696+
export let test = class {
3697+
3698+
};
3699+
// Options: [{"publicOnly":true,"require":{"ClassExpression":true}}]
3700+
// Message: Missing JSDoc comment.
3701+
36953702
export default function () {}
36963703
// Options: [{"publicOnly":{"cjs":false,"esm":true,"window":false},"require":{"FunctionDeclaration":true}}]
36973704
// Message: Missing JSDoc comment.
@@ -4430,6 +4437,19 @@ let test = function () {
44304437
}
44314438
// Options: [{"publicOnly":{"window":true},"require":{"FunctionExpression":true}}]
44324439

4440+
let test = class {
4441+
4442+
}
4443+
// Options: [{"publicOnly":true,"require":{"ClassExpression":false}}]
4444+
4445+
/**
4446+
*
4447+
*/
4448+
let test = class {
4449+
4450+
}
4451+
// Options: [{"publicOnly":true,"require":{"ClassExpression":true}}]
4452+
44334453
export function someMethod() {
44344454

44354455
}

src/exportParser.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ const getSymbol = function (node, globals, scope, opt) {
8181

8282
/* istanbul ignore next */
8383
return null;
84-
} case 'ClassDeclaration': case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': {
84+
} case 'ClassDeclaration': case 'ClassExpression': case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': {
8585
const val = createNode();
8686
val.props.prototype = createNode();
8787
val.props.prototype.type = 'object';

src/rules/requireJsdoc.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ const OPTIONS_SCHEMA = {
4646
default: false,
4747
type: 'boolean'
4848
},
49+
ClassExpression: {
50+
default: false,
51+
type: 'boolean'
52+
},
4953
FunctionDeclaration: {
5054
default: true,
5155
type: 'boolean'
@@ -181,6 +185,14 @@ export default iterateJsdoc(null, {
181185
checkJsDoc(node);
182186
},
183187

188+
ClassExpression (node) {
189+
if (!requireOption.ClassExpression) {
190+
return;
191+
}
192+
193+
checkJsDoc(node);
194+
},
195+
184196
FunctionDeclaration (node) {
185197
if (!requireOption.FunctionDeclaration) {
186198
return;

test/rules/assertions/requireJsdoc.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,28 @@ export default {
7171
sourceType: 'module'
7272
}
7373
},
74+
{
75+
code: `
76+
export let test = class {
77+
78+
};
79+
`,
80+
errors: [
81+
{
82+
message: 'Missing JSDoc comment.',
83+
type: 'ClassExpression'
84+
}
85+
],
86+
options: [{
87+
publicOnly: true,
88+
require: {
89+
ClassExpression: true
90+
}
91+
}],
92+
parserOptions: {
93+
sourceType: 'module'
94+
}
95+
},
7496
{
7597
code: `
7698
export default function () {}
@@ -1847,6 +1869,35 @@ export default {
18471869
sourceType: 'module'
18481870
}
18491871
},
1872+
{
1873+
code: `
1874+
let test = class {
1875+
1876+
}
1877+
`,
1878+
options: [{
1879+
publicOnly: true,
1880+
require: {
1881+
ClassExpression: false
1882+
}
1883+
}]
1884+
},
1885+
{
1886+
code: `
1887+
/**
1888+
*
1889+
*/
1890+
let test = class {
1891+
1892+
}
1893+
`,
1894+
options: [{
1895+
publicOnly: true,
1896+
require: {
1897+
ClassExpression: true
1898+
}
1899+
}]
1900+
},
18501901
{
18511902
code: `
18521903
export function someMethod() {

0 commit comments

Comments
 (0)