Skip to content

Commit 2072735

Browse files
committed
feat: remove preferredTypesDefined option in favor of making it apply automatically
BREAKING CHANGE: One can no longer avoid `preferredTypes` types being treated as defined
1 parent 9df41d7 commit 2072735

File tree

5 files changed

+44
-67
lines changed

5 files changed

+44
-67
lines changed

.README/README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,8 @@ but restricted to `@param`. These settings are now deprecated.
315315
`{{preferredType}}` (or `{{replacement}}`), noting that the latter is
316316
of no use when one is merely forbidding a type).
317317

318-
If `no-undefined-types` has the option key `preferredTypesDefined` set to
319-
`true`, the preferred types indicated in the `settings.jsdoc.preferredTypes`
320-
map will be assumed to be defined.
318+
Note that the preferred types indicated as targets in `settings.jsdoc.preferredTypes`
319+
map will be assumed to be defined by `no-undefined-types`.
321320

322321
See the option of `check-types`, `unifyParentAndChildTypeChecks`, for
323322
how the keys of `preferredTypes` may have `<>` or `.<>` (or just `.`)

.README/rules/no-undefined-types.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ The following types are always considered defined.
2020
- `any`, `*`
2121
- `Array`, `Object`, `RegExp`, `Date`, `Function`
2222

23+
Note that preferred types indicated within `settings.jsdoc.preferredTypes` will
24+
also be assumed to be defined.
25+
2326
#### Options
2427

25-
An option object may have the following keys:
28+
An option object may have the following key:
2629

27-
- `preferredTypesDefined` - If this option is set to `true` and preferred
28-
types are indicated within `settings.jsdoc.preferredTypes`, any such
29-
types will be assumed to be defined as well. Defaults to `false`.
3030
- `definedTypes` - This array can be populated to indicate other types which
3131
are automatically considered as defined (in addition to globals, etc.).
3232
Defaults to an empty array.
@@ -37,7 +37,7 @@ An option object may have the following keys:
3737
|Tags|`class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`|
3838
|Aliases|`constructor`, `const`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`|
3939
|Closure-only|`package`, `private`, `protected`, `public`, `static`|
40-
|Options|`preferredTypesDefined`, `definedTypes`|
40+
|Options|`definedTypes`|
4141
|Settings|`preferredTypes`|
4242

4343
<!-- assertions noUndefinedTypes -->

README.md

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -366,9 +366,8 @@ but restricted to `@param`. These settings are now deprecated.
366366
`{{preferredType}}` (or `{{replacement}}`), noting that the latter is
367367
of no use when one is merely forbidding a type).
368368

369-
If `no-undefined-types` has the option key `preferredTypesDefined` set to
370-
`true`, the preferred types indicated in the `settings.jsdoc.preferredTypes`
371-
map will be assumed to be defined.
369+
Note that the preferred types indicated as targets in `settings.jsdoc.preferredTypes`
370+
map will be assumed to be defined by `no-undefined-types`.
372371

373372
See the option of `check-types`, `unifyParentAndChildTypeChecks`, for
374373
how the keys of `preferredTypes` may have `<>` or `.<>` (or just `.`)
@@ -3092,14 +3091,14 @@ The following types are always considered defined.
30923091
- `any`, `*`
30933092
- `Array`, `Object`, `RegExp`, `Date`, `Function`
30943093

3094+
Note that preferred types indicated within `settings.jsdoc.preferredTypes` will
3095+
also be assumed to be defined.
3096+
30953097
<a name="eslint-plugin-jsdoc-rules-no-undefined-types-options-4"></a>
30963098
#### Options
30973099

3098-
An option object may have the following keys:
3100+
An option object may have the following key:
30993101

3100-
- `preferredTypesDefined` - If this option is set to `true` and preferred
3101-
types are indicated within `settings.jsdoc.preferredTypes`, any such
3102-
types will be assumed to be defined as well. Defaults to `false`.
31033102
- `definedTypes` - This array can be populated to indicate other types which
31043103
are automatically considered as defined (in addition to globals, etc.).
31053104
Defaults to an empty array.
@@ -3110,7 +3109,7 @@ An option object may have the following keys:
31103109
|Tags|`class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`|
31113110
|Aliases|`constructor`, `const`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`|
31123111
|Closure-only|`package`, `private`, `protected`, `public`, `static`|
3113-
|Options|`preferredTypesDefined`, `definedTypes`|
3112+
|Options|`definedTypes`|
31143113
|Settings|`preferredTypes`|
31153114

31163115
The following patterns are considered problems:
@@ -3123,7 +3122,6 @@ function quux(foo, bar, baz) {
31233122

31243123
}
31253124
// Settings: {"jsdoc":{"preferredTypes":{"HerType":1000}}}
3126-
// Options: [{"preferredTypesDefined":true}]
31273125
// Message: Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.
31283126

31293127
/**
@@ -3133,7 +3131,6 @@ function quux(foo, bar, baz) {
31333131

31343132
}
31353133
// Settings: {"jsdoc":{"preferredTypes":{"HerType":false}}}
3136-
// Options: [{"preferredTypesDefined":true}]
31373134
// Message: The type 'HerType' is undefined.
31383135

31393136
/**
@@ -3163,7 +3160,7 @@ function quux(foo, bar, baz) {
31633160

31643161
}
31653162
// Settings: {"jsdoc":{"preferredTypes":{"hertype":{"replacement":"HerType"}}}}
3166-
// Options: [{"definedTypes":["MyType"],"preferredTypesDefined":true}]
3163+
// Options: [{"definedTypes":["MyType"]}]
31673164
// Message: The type 'HisType' is undefined.
31683165

31693166
/**
@@ -3175,7 +3172,7 @@ function quux(foo, bar, baz) {
31753172

31763173
}
31773174
// Settings: {"jsdoc":{"preferredTypes":{"hertype":{"replacement":false},"histype":"HisType"}}}
3178-
// Options: [{"definedTypes":["MyType"],"preferredTypesDefined":true}]
3175+
// Options: [{"definedTypes":["MyType"]}]
31793176
// Message: The type 'HerType' is undefined.
31803177

31813178
/**
@@ -3332,7 +3329,6 @@ function foo () {
33323329
function foo () {
33333330

33343331
}
3335-
// Options: [{"preferredTypesDefined":true}]
33363332

33373333
/**
33383334
* @param {MyType} foo - Bar.
@@ -3352,7 +3348,7 @@ function quux(foo, bar, baz) {
33523348

33533349
}
33543350
// Settings: {"jsdoc":{"preferredTypes":{"hertype":{"replacement":"HerType"},"histype":"HisType"}}}
3355-
// Options: [{"definedTypes":["MyType"],"preferredTypesDefined":true}]
3351+
// Options: [{"definedTypes":["MyType"]}]
33563352

33573353
/**
33583354
* @param {MyType} foo - Bar.
@@ -3363,7 +3359,7 @@ function quux(foo, bar, baz) {
33633359

33643360
}
33653361
// Settings: {"jsdoc":{"preferredTypes":{"hertype":{"replacement":"HerType<>"},"histype":"HisType.<>"}}}
3366-
// Options: [{"definedTypes":["MyType"],"preferredTypesDefined":true}]
3362+
// Options: [{"definedTypes":["MyType"]}]
33673363

33683364
/**
33693365
* @template TEMPLATE_TYPE

src/rules/noUndefinedTypes.js

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,30 @@ export default iterateJsdoc(({
2525
}) => {
2626
const {globalScope} = scopeManager;
2727

28-
const {preferredTypesDefined, definedTypes = []} = context.options[0] || {};
28+
const {definedTypes = []} = context.options[0] || {};
2929

3030
let definedPreferredTypes = [];
31-
if (preferredTypesDefined) {
32-
const preferredTypes = _.get(context, 'settings.jsdoc.preferredTypes');
33-
if (preferredTypes) {
34-
// Replace `_.values` with `Object.values` when we may start requiring Node 7+
35-
definedPreferredTypes = _.values(preferredTypes).map((preferredType) => {
36-
if (typeof preferredType === 'string') {
37-
// May become an empty string but will be filtered out below
38-
return stripPseudoTypes(preferredType);
39-
}
40-
if (!preferredType) {
41-
return undefined;
42-
}
43-
if (typeof preferredType !== 'object') {
44-
report(
45-
'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'
46-
);
47-
}
31+
const preferredTypes = _.get(context, 'settings.jsdoc.preferredTypes');
32+
if (preferredTypes) {
33+
// Replace `_.values` with `Object.values` when we may start requiring Node 7+
34+
definedPreferredTypes = _.values(preferredTypes).map((preferredType) => {
35+
if (typeof preferredType === 'string') {
36+
// May become an empty string but will be filtered out below
37+
return stripPseudoTypes(preferredType);
38+
}
39+
if (!preferredType) {
40+
return undefined;
41+
}
42+
if (typeof preferredType !== 'object') {
43+
report(
44+
'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'
45+
);
46+
}
4847

49-
return stripPseudoTypes(preferredType.replacement);
50-
}).filter((preferredType) => {
51-
return preferredType;
52-
});
53-
}
48+
return stripPseudoTypes(preferredType.replacement);
49+
}).filter((preferredType) => {
50+
return preferredType;
51+
});
5452
}
5553

5654
const typedefDeclarations = _(context.getAllComments())
@@ -143,9 +141,6 @@ export default iterateJsdoc(({
143141
type: 'string'
144142
},
145143
type: 'array'
146-
},
147-
preferredTypesDefined: {
148-
type: 'boolean'
149144
}
150145
},
151146
type: 'object'

test/rules/assertions/noUndefinedTypes.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ export default {
1717
message: 'The type \'HerType\' is undefined.'
1818
}
1919
],
20-
options: [{
21-
preferredTypesDefined: true
22-
}],
2320
settings: {
2421
jsdoc: {
2522
preferredTypes: {
@@ -42,9 +39,6 @@ export default {
4239
message: 'The type \'HerType\' is undefined.'
4340
}
4441
],
45-
options: [{
46-
preferredTypesDefined: true
47-
}],
4842
settings: {
4943
jsdoc: {
5044
preferredTypes: {
@@ -110,8 +104,7 @@ export default {
110104
}
111105
],
112106
options: [{
113-
definedTypes: ['MyType'],
114-
preferredTypesDefined: true
107+
definedTypes: ['MyType']
115108
}],
116109
settings: {
117110
jsdoc: {
@@ -141,8 +134,7 @@ export default {
141134
}
142135
],
143136
options: [{
144-
definedTypes: ['MyType'],
145-
preferredTypesDefined: true
137+
definedTypes: ['MyType']
146138
}],
147139
settings: {
148140
jsdoc: {
@@ -384,10 +376,7 @@ export default {
384376
function foo () {
385377
386378
}
387-
`,
388-
options: [{
389-
preferredTypesDefined: true
390-
}]
379+
`
391380
},
392381
{
393382
code: `
@@ -415,8 +404,7 @@ export default {
415404
}
416405
`,
417406
options: [{
418-
definedTypes: ['MyType'],
419-
preferredTypesDefined: true
407+
definedTypes: ['MyType']
420408
}],
421409
settings: {
422410
jsdoc: {
@@ -441,8 +429,7 @@ export default {
441429
}
442430
`,
443431
options: [{
444-
definedTypes: ['MyType'],
445-
preferredTypesDefined: true
432+
definedTypes: ['MyType']
446433
}],
447434
settings: {
448435
jsdoc: {

0 commit comments

Comments
 (0)