Skip to content

Commit aff7358

Browse files
committed
fix(check-param-names): report proper line numbers (fixes #48)
1 parent 866b719 commit aff7358

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

src/rules/checkParamNames.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ const validateParameterNames = (targetTagName : string, functionParameterNames :
1010
});
1111

1212
return paramTags.some((tag, index) => {
13-
if (paramTags.some((tg, idx) => {
13+
const dupeTag = paramTags.find((tg, idx) => {
1414
return tg.name === tag.name && idx !== index;
15-
})) {
16-
report(`Duplicate @${targetTagName} "${tag.name}"`);
15+
});
16+
if (dupeTag) {
17+
report(`Duplicate @${targetTagName} "${tag.name}"`, null, dupeTag);
1718

1819
return true;
1920
}
@@ -52,15 +53,15 @@ const validateParameterNames = (targetTagName : string, functionParameterNames :
5253
});
5354
};
5455

55-
const validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames : Array<string>, report : Function) => {
56+
const validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames : Array<string>, jsdoc, report : Function) => {
5657
let lastRealParameter;
5758

58-
return jsdocParameterNames.some((jsdocParameterName) => {
59+
return jsdocParameterNames.some((jsdocParameterName, idx) => {
5960
const isPropertyPath = jsdocParameterName.includes('.');
6061

6162
if (isPropertyPath) {
6263
if (!lastRealParameter) {
63-
report(`@${targetTagName} path declaration ("${jsdocParameterName}") appears before any real parameter.`);
64+
report(`@${targetTagName} path declaration ("${jsdocParameterName}") appears before any real parameter.`, null, jsdoc.tags[idx]);
6465

6566
return true;
6667
}
@@ -74,7 +75,9 @@ const validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames
7475
if (pathRootNodeName !== lastRealParameter) {
7576
report(
7677
`@${targetTagName} path declaration ("${jsdocParameterName}") root node name ("${pathRootNodeName}") ` +
77-
`does not match previous real parameter name ("${lastRealParameter}").`
78+
`does not match previous real parameter name ("${lastRealParameter}").`,
79+
null,
80+
jsdoc.tags[idx]
7881
);
7982

8083
return true;
@@ -104,7 +107,7 @@ export default iterateJsdoc(({
104107
return;
105108
}
106109

107-
validateParameterNamesDeep(targetTagName, jsdocParameterNamesDeep, report);
110+
validateParameterNamesDeep(targetTagName, jsdocParameterNamesDeep, jsdoc, report);
108111
}, {
109112
meta: {
110113
type: 'suggestion'

test/rules/assertions/checkParamNames.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export default {
3333
`,
3434
errors: [
3535
{
36+
line: 3,
3637
message: 'Expected @arg names to be "foo". Got "Foo".'
3738
}
3839
],
@@ -55,6 +56,7 @@ export default {
5556
`,
5657
errors: [
5758
{
59+
line: 3,
5860
message: 'Expected @param names to be "foo". Got "Foo".'
5961
}
6062
]
@@ -70,6 +72,7 @@ export default {
7072
`,
7173
errors: [
7274
{
75+
line: 3,
7376
message: '@param path declaration ("Foo.Bar") appears before any real parameter.'
7477
}
7578
]
@@ -86,6 +89,7 @@ export default {
8689
`,
8790
errors: [
8891
{
92+
line: 4,
8993
message: '@param path declaration ("Foo.Bar") root node name ("Foo") does not match previous real parameter name ("foo").'
9094
}
9195
]
@@ -103,6 +107,7 @@ export default {
103107
`,
104108
errors: [
105109
{
110+
line: 3,
106111
message: 'Expected @param names to be "bar, foo". Got "foo, bar".'
107112
}
108113
]
@@ -136,6 +141,7 @@ export default {
136141
`,
137142
errors: [
138143
{
144+
line: 4,
139145
message: 'Duplicate @param "foo"'
140146
}
141147
]
@@ -152,6 +158,7 @@ export default {
152158
`,
153159
errors: [
154160
{
161+
line: 4,
155162
message: 'Duplicate @param "foo"'
156163
}
157164
]
@@ -168,6 +175,7 @@ export default {
168175
`,
169176
errors: [
170177
{
178+
line: 4,
171179
message: 'Duplicate @param "foo"'
172180
}
173181
]
@@ -183,6 +191,7 @@ export default {
183191
`,
184192
errors: [
185193
{
194+
line: 4,
186195
message: 'Expected @param names to be "property". Got "prop".'
187196
}
188197
],
@@ -202,6 +211,7 @@ export default {
202211
`,
203212
errors: [
204213
{
214+
line: 3,
205215
message: 'Unexpected tag `@param`'
206216
}
207217
],

0 commit comments

Comments
 (0)