Skip to content

Commit cff8234

Browse files
chiawendtbrettz9
authored andcommitted
Feat: make checkParamNames report location more precise
Previously the report locaiont is the entire jsdoc. Now the report location is the line of the violating param tag.
1 parent d91cc9c commit cff8234

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/rules/checkParamNames.js

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
import _ from 'lodash';
22
import iterateJsdoc from '../iterateJsdoc';
33

4-
const validateParameterNames = (targetTagName : string, functionParameterNames : Array<string>, jsdocParameterNames : Array<string>, report : Function) => {
5-
return _.some(jsdocParameterNames, (jsdocParameterName, index) => {
4+
const validateParameterNames = (targetTagName : string, functionParameterNames : Array<string>, jsdoc, report) => {
5+
if (!jsdoc || !jsdoc.tags) {
6+
return false;
7+
}
8+
9+
const paramTags = jsdoc.tags.filter((tag) => {
10+
return tag.tag === targetTagName && !tag.name.includes('.');
11+
});
12+
13+
return _.some(paramTags, (tag, index) => {
614
const functionParameterName = functionParameterNames[index];
715

816
if (!functionParameterName) {
9-
report('@' + targetTagName + ' "' + jsdocParameterName + '" does not match an existing function parameter.');
17+
report(
18+
`@${targetTagName} "${tag.name}" does not match an existing function parameter.`,
19+
null,
20+
tag
21+
);
1022

1123
return true;
1224
}
@@ -15,8 +27,17 @@ const validateParameterNames = (targetTagName : string, functionParameterNames :
1527
return false;
1628
}
1729

18-
if (functionParameterName !== jsdocParameterName) {
19-
report('Expected @' + targetTagName + ' names to be "' + functionParameterNames.join(', ') + '". Got "' + jsdocParameterNames.join(', ') + '".');
30+
if (functionParameterName !== tag.name) {
31+
const expectedNames = functionParameterNames.join(', ');
32+
const actualNames = paramTags.map(({name}) => {
33+
return name;
34+
}).join(', ');
35+
36+
report(
37+
`Expected @${targetTagName} names to be "${expectedNames}". Got "${actualNames}".`,
38+
null,
39+
tag
40+
);
2041

2142
return true;
2243
}
@@ -59,14 +80,14 @@ const validateParameterNamesDeep = (targetTagName : string, jsdocParameterNames
5980
};
6081

6182
export default iterateJsdoc(({
83+
jsdoc,
6284
report,
6385
utils
6486
}) => {
6587
const functionParameterNames = utils.getFunctionParameterNames();
66-
const jsdocParameterNames = utils.getJsdocParameterNames();
6788
const jsdocParameterNamesDeep = utils.getJsdocParameterNamesDeep();
6889
const targetTagName = utils.getPreferredTagName('param');
69-
const isError = validateParameterNames(targetTagName, functionParameterNames, jsdocParameterNames, report);
90+
const isError = validateParameterNames(targetTagName, functionParameterNames, jsdoc, report);
7091

7192
if (isError) {
7293
return;

test/rules/assertions/checkParamNames.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export default {
1111
`,
1212
errors: [
1313
{
14+
line: 3,
1415
message: 'Expected @param names to be "foo". Got "Foo".'
1516
}
1617
]
@@ -112,6 +113,7 @@ export default {
112113
`,
113114
errors: [
114115
{
116+
line: 4,
115117
message: '@param "bar" does not match an existing function parameter.'
116118
}
117119
]

0 commit comments

Comments
 (0)