Skip to content

Commit f19e706

Browse files
committed
fix(require-param, check-param-names): do not fail with destructured array pattern containing empty slots; fixes #716
Also ensures array indexes are quoted in output and examples as per jsdoc rules
1 parent 117063d commit f19e706

File tree

4 files changed

+54
-37
lines changed

4 files changed

+54
-37
lines changed

README.md

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2684,7 +2684,7 @@ function quux (error, cde = 1) {
26842684
function quux ([a, b] = []) {
26852685

26862686
}
2687-
// Message: Missing @param "foo.0"
2687+
// Message: Missing @param "foo."0""
26882688

26892689
/**
26902690
* @param options
@@ -3191,12 +3191,12 @@ export default function Item({
31913191
/**
31923192
* @param obj
31933193
* @param obj.data
3194-
* @param obj.data.0
3195-
* @param obj.data.1
3196-
* @param obj.data.2
3194+
* @param obj.data."0"
3195+
* @param obj.data."1"
3196+
* @param obj.data."2"
31973197
* @param obj.defaulting
3198-
* @param obj.defaulting.0
3199-
* @param obj.defaulting.1
3198+
* @param obj.defaulting."0"
3199+
* @param obj.defaulting."1"
32003200
*/
32013201
function Item({
32023202
data: [foo, bar, ...baz],
@@ -3239,6 +3239,13 @@ class A {
32393239
}) {
32403240
}
32413241
}
3242+
3243+
/**
3244+
* @param root
3245+
* @param root."0" Ignored
3246+
* @param root."1" Our "b"
3247+
*/
3248+
const foo = ([, b]) => b;
32423249
````
32433250

32443251

@@ -13008,12 +13015,12 @@ function quux ({opts: {num, ...extra}}) {
1300813015

1300913016
/**
1301013017
* @param {GenericArray} cfg
13011-
* @param {number} cfg.0
13018+
* @param {number} cfg."0"
1301213019
*/
1301313020
function baar ([a, ...extra]) {
1301413021
//
1301513022
}
13016-
// Message: Missing JSDoc @param "cfg.1" declaration.
13023+
// Message: Missing JSDoc @param "cfg."1"" declaration.
1301713024

1301813025
/**
1301913026
* @param a
@@ -13613,7 +13620,7 @@ function quux ({num, ...extra}) {
1361313620

1361413621
/**
1361513622
* @param {GenericArray} cfg
13616-
* @param {number} cfg.0
13623+
* @param {number} cfg."0"
1361713624
*/
1361813625
function baar ([a, ...extra]) {
1361913626
//
@@ -13716,12 +13723,12 @@ function quux ({ foo: { bar } }) {}
1371613723
/**
1371713724
* @param obj
1371813725
* @param obj.data
13719-
* @param obj.data.0
13720-
* @param obj.data.1
13721-
* @param obj.data.2
13726+
* @param obj.data."0"
13727+
* @param obj.data."1"
13728+
* @param obj.data."2"
1372213729
* @param obj.defaulting
13723-
* @param obj.defaulting.0
13724-
* @param obj.defaulting.1
13730+
* @param obj.defaulting."0"
13731+
* @param obj.defaulting."1"
1372513732
*/
1372613733
function Item({
1372713734
data: [foo, bar, ...baz],

src/jsdocUtils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ const getFunctionParameterNames = (
197197
const elements = param.elements || param.left?.elements;
198198
const roots = elements.map((prop, idx) => {
199199
return {
200-
name: idx,
201-
restElement: prop.type === 'RestElement',
200+
name: `"${idx}"`,
201+
restElement: prop?.type === 'RestElement',
202202
};
203203
});
204204

test/rules/assertions/checkParamNames.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -682,11 +682,11 @@ export default {
682682
errors: [
683683
{
684684
line: 3,
685-
message: 'Missing @param "foo.0"',
685+
message: 'Missing @param "foo."0""',
686686
},
687687
{
688688
line: 3,
689-
message: 'Missing @param "foo.1"',
689+
message: 'Missing @param "foo."1""',
690690
},
691691
],
692692
},
@@ -1571,12 +1571,12 @@ export default {
15711571
/**
15721572
* @param obj
15731573
* @param obj.data
1574-
* @param obj.data.0
1575-
* @param obj.data.1
1576-
* @param obj.data.2
1574+
* @param obj.data."0"
1575+
* @param obj.data."1"
1576+
* @param obj.data."2"
15771577
* @param obj.defaulting
1578-
* @param obj.defaulting.0
1579-
* @param obj.defaulting.1
1578+
* @param obj.defaulting."0"
1579+
* @param obj.defaulting."1"
15801580
*/
15811581
function Item({
15821582
data: [foo, bar, ...baz],
@@ -1640,5 +1640,15 @@ export default {
16401640
`,
16411641
parser: require.resolve('@typescript-eslint/parser'),
16421642
},
1643+
{
1644+
code: `
1645+
/**
1646+
* @param root
1647+
* @param root."0" Ignored
1648+
* @param root."1" Our "b"
1649+
*/
1650+
const foo = ([, b]) => b;
1651+
`,
1652+
},
16431653
],
16441654
};

test/rules/assertions/requireParam.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,10 +1006,10 @@ export default {
10061006
message: 'Missing JSDoc @param "root0" declaration.',
10071007
},
10081008
{
1009-
message: 'Missing JSDoc @param "root0.0" declaration.',
1009+
message: 'Missing JSDoc @param "root0."0"" declaration.',
10101010
},
10111011
{
1012-
message: 'Missing JSDoc @param "root0.1" declaration.',
1012+
message: 'Missing JSDoc @param "root0."1"" declaration.',
10131013
},
10141014
{
10151015
message: 'Missing JSDoc @param "foo" declaration.',
@@ -1018,8 +1018,8 @@ export default {
10181018
output: `
10191019
/**
10201020
* @param root0
1021-
* @param root0.0
1022-
* @param root0.1
1021+
* @param root0."0"
1022+
* @param root0."1"
10231023
* @param foo
10241024
*/
10251025
function quux ([bar, baz], foo) {
@@ -1786,22 +1786,22 @@ export default {
17861786
code: `
17871787
/**
17881788
* @param {GenericArray} cfg
1789-
* @param {number} cfg.0
1789+
* @param {number} cfg."0"
17901790
*/
17911791
function baar ([a, ...extra]) {
17921792
//
17931793
}
17941794
`,
17951795
errors: [
17961796
{
1797-
message: 'Missing JSDoc @param "cfg.1" declaration.',
1797+
message: 'Missing JSDoc @param "cfg."1"" declaration.',
17981798
},
17991799
],
18001800
output: `
18011801
/**
18021802
* @param {GenericArray} cfg
1803-
* @param {number} cfg.0
1804-
* @param {...any} cfg.1
1803+
* @param {number} cfg."0"
1804+
* @param {...any} cfg."1"
18051805
*/
18061806
function baar ([a, ...extra]) {
18071807
//
@@ -2898,7 +2898,7 @@ export default {
28982898
code: `
28992899
/**
29002900
* @param {GenericArray} cfg
2901-
* @param {number} cfg.0
2901+
* @param {number} cfg."0"
29022902
*/
29032903
function baar ([a, ...extra]) {
29042904
//
@@ -3068,12 +3068,12 @@ export default {
30683068
/**
30693069
* @param obj
30703070
* @param obj.data
3071-
* @param obj.data.0
3072-
* @param obj.data.1
3073-
* @param obj.data.2
3071+
* @param obj.data."0"
3072+
* @param obj.data."1"
3073+
* @param obj.data."2"
30743074
* @param obj.defaulting
3075-
* @param obj.defaulting.0
3076-
* @param obj.defaulting.1
3075+
* @param obj.defaulting."0"
3076+
* @param obj.defaulting."1"
30773077
*/
30783078
function Item({
30793079
data: [foo, bar, ...baz],

0 commit comments

Comments
 (0)