Skip to content

Commit e273fba

Browse files
committed
feat(check-types, no-undefined-types): report error if settings.jsdoc.preferredTypes item is not falsy/string/object
testing: add more coverage suggested tests
1 parent cd2d28e commit e273fba

File tree

5 files changed

+118
-1
lines changed

5 files changed

+118
-1
lines changed

src/rules/checkTypes.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ export default iterateJsdoc(({
152152
preferred,
153153
_.get(preferredSetting, 'message')
154154
]);
155+
} else {
156+
report(
157+
'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',
158+
null,
159+
jsdocTag
160+
);
161+
162+
return;
155163
}
156164
} else if (!noDefaults && type === 'NAME') {
157165
for (const strictNativeType of strictNativeTypes) {

src/rules/noUndefinedTypes.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,14 @@ export default iterateJsdoc(({
3636
// May become an empty string but will be filtered out below
3737
return stripPseudoTypes(preferredType);
3838
}
39-
if (!preferredType || typeof preferredType !== 'object') {
39+
if (!preferredType) {
4040
return undefined;
4141
}
42+
if (typeof preferredType !== 'object') {
43+
report(
44+
'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'
45+
);
46+
}
4247

4348
return stripPseudoTypes(preferredType.replacement);
4449
}).filter((preferredType) => {

test/rules/assertions/checkTypes.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
export default {
22
invalid: [
3+
{
4+
code: `
5+
/**
6+
* @param {abc} foo
7+
*/
8+
function quux (foo) {
9+
10+
}
11+
`,
12+
errors: [
13+
{
14+
message: 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'
15+
}
16+
],
17+
settings: {
18+
jsdoc: {
19+
preferredTypes: {
20+
abc: 100
21+
}
22+
}
23+
}
24+
},
325
{
426
code: `
527
/**

test/rules/assertions/noUndefinedTypes.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,58 @@
11
export default {
22
invalid: [
3+
{
4+
code: `
5+
/**
6+
* @param {HerType} baz - Foo.
7+
*/
8+
function quux(foo, bar, baz) {
9+
10+
}
11+
`,
12+
errors: [
13+
{
14+
message: 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'
15+
},
16+
{
17+
message: 'The type \'HerType\' is undefined.'
18+
}
19+
],
20+
options: [{
21+
preferredTypesDefined: true
22+
}],
23+
settings: {
24+
jsdoc: {
25+
preferredTypes: {
26+
HerType: 1000
27+
}
28+
}
29+
}
30+
},
31+
{
32+
code: `
33+
/**
34+
* @param {HerType} baz - Foo.
35+
*/
36+
function quux(foo, bar, baz) {
37+
38+
}
39+
`,
40+
errors: [
41+
{
42+
message: 'The type \'HerType\' is undefined.'
43+
}
44+
],
45+
options: [{
46+
preferredTypesDefined: true
47+
}],
48+
settings: {
49+
jsdoc: {
50+
preferredTypes: {
51+
HerType: false
52+
}
53+
}
54+
}
55+
},
356
{
457
code: `
558
/**
@@ -261,6 +314,20 @@ export default {
261314
}
262315
`
263316
},
317+
{
318+
code: `
319+
/**
320+
*
321+
*
322+
*/
323+
function foo () {
324+
325+
}
326+
`,
327+
options: [{
328+
preferredTypesDefined: true
329+
}]
330+
},
264331
{
265332
code: `
266333
/**

test/rules/assertions/requireParam.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,21 @@ export default {
588588
exemptedBy: ['type']
589589
}
590590
]
591+
},
592+
{
593+
code: `
594+
/**
595+
* @override
596+
*/
597+
var A = class {
598+
/**
599+
*
600+
*/
601+
quux (foo) {
602+
603+
}
604+
}
605+
`
591606
}
592607
]
593608
};

0 commit comments

Comments
 (0)