Skip to content

Commit 00922c3

Browse files
committed
fix(require-jsdoc): do not report MethodDefinition with non-public accessibility; fixes #1124
1 parent 1e45ae4 commit 00922c3

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

docs/rules/require-jsdoc.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ export default class Test {
639639
this.a = a;
640640
}
641641
}
642-
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition:not([accessibility=\"private\"]) > FunctionExpression"],"publicOnly":true,"require":{"ArrowFunctionExpression":false,"ClassDeclaration":false,"ClassExpression":false,"FunctionDeclaration":false,"FunctionExpression":false,"MethodDefinition":false}}]
642+
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition > FunctionExpression"],"publicOnly":true,"require":{"ArrowFunctionExpression":false,"ClassDeclaration":false,"ClassExpression":false,"FunctionDeclaration":false,"FunctionExpression":false,"MethodDefinition":false}}]
643643
// Message: Missing JSDoc comment.
644644

645645
e = function () {
@@ -1675,7 +1675,7 @@ export default class Test {
16751675
this.a = a;
16761676
}
16771677
}
1678-
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition:not([accessibility=\"private\"]) > FunctionExpression"],"publicOnly":true,"require":{"ArrowFunctionExpression":false,"ClassDeclaration":false,"ClassExpression":false,"FunctionDeclaration":false,"FunctionExpression":false,"MethodDefinition":false}}]
1678+
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition > FunctionExpression"],"publicOnly":true,"require":{"ArrowFunctionExpression":false,"ClassDeclaration":false,"ClassExpression":false,"FunctionDeclaration":false,"FunctionExpression":false,"MethodDefinition":false}}]
16791679

16801680
/**
16811681
* Basic application controller.
@@ -1846,5 +1846,12 @@ class A {
18461846
}
18471847
}
18481848
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":[{"context":"MethodDefinition","minLineCount":4}],"require":{"ClassDeclaration":false,"FunctionExpression":false,"MethodDefinition":false}}]
1849+
1850+
export default class Test {
1851+
private abc(a) {
1852+
this.a = a;
1853+
}
1854+
}
1855+
// "jsdoc/require-jsdoc": ["error"|"warn", {"publicOnly":true,"require":{"ArrowFunctionExpression":false,"ClassDeclaration":false,"ClassExpression":false,"FunctionDeclaration":false,"FunctionExpression":false,"MethodDefinition":true}}]
18491856
````
18501857

src/exportParser.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,21 @@ const parse = function (ast, node, opt) {
893893
};
894894
};
895895

896+
const accessibilityNodes = new Set([
897+
'PropertyDefinition',
898+
'MethodDefinition',
899+
]);
900+
901+
/**
902+
*
903+
* @param {import('eslint').Rule.Node} node
904+
* @returns {boolean}
905+
*/
906+
const hasAccessibility = (node) => {
907+
return accessibilityNodes.has(node.type) && 'accessibility' in node &&
908+
node.accessibility !== 'public';
909+
};
910+
896911
/**
897912
*
898913
* @param {import('eslint').Rule.Node} node
@@ -905,10 +920,8 @@ const isUncommentedExport = function (node, sourceCode, opt, settings) {
905920
// console.log({node});
906921
// Optimize with ancestor check for esm
907922
if (opt.esm) {
908-
if (
909-
node.type === 'PropertyDefinition' && 'accessibility' in node &&
910-
node.accessibility !== 'public'
911-
) {
923+
if (hasAccessibility(node) ||
924+
node.parent && hasAccessibility(node.parent)) {
912925
return false;
913926
}
914927

test/rules/assertions/requireJsdoc.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2323,7 +2323,7 @@ function quux (foo) {
23232323
options: [
23242324
{
23252325
contexts: [
2326-
'MethodDefinition:not([accessibility="private"]) > FunctionExpression',
2326+
'MethodDefinition > FunctionExpression',
23272327
],
23282328
publicOnly: true,
23292329
require: {
@@ -5629,7 +5629,7 @@ function quux (foo) {
56295629
options: [
56305630
{
56315631
contexts: [
5632-
'MethodDefinition:not([accessibility="private"]) > FunctionExpression',
5632+
'MethodDefinition > FunctionExpression',
56335633
],
56345634
publicOnly: true,
56355635
require: {
@@ -6142,5 +6142,31 @@ function quux (foo) {
61426142
],
61436143
parser: require.resolve('@typescript-eslint/parser'),
61446144
},
6145+
{
6146+
code: `
6147+
export default class Test {
6148+
private abc(a) {
6149+
this.a = a;
6150+
}
6151+
}
6152+
`,
6153+
options: [
6154+
{
6155+
publicOnly: true,
6156+
require: {
6157+
ArrowFunctionExpression: false,
6158+
ClassDeclaration: false,
6159+
ClassExpression: false,
6160+
FunctionDeclaration: false,
6161+
FunctionExpression: false,
6162+
MethodDefinition: true,
6163+
},
6164+
},
6165+
],
6166+
parser: require.resolve('@typescript-eslint/parser'),
6167+
parserOptions: {
6168+
sourceType: 'module',
6169+
},
6170+
},
61456171
],
61466172
};

0 commit comments

Comments
 (0)