Skip to content

Commit a62bcc2

Browse files
committed
consistent-boolean-name: Rename booleanWrappers option
Fixes #3556
1 parent fc66de6 commit a62bcc2

4 files changed

Lines changed: 34 additions & 34 deletions

File tree

docs/rules/consistent-boolean-name.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ And this would fail:
233233
const didUpdate = true;
234234
```
235235

236-
### booleanWrappers
236+
### wrappers
237237

238238
Type: `Record<string, string>`\
239239
Default: `{}`
@@ -244,7 +244,7 @@ Map unqualified TypeScript wrapper type names to the property or method that pro
244244
'unicorn/consistent-boolean-name': [
245245
'error',
246246
{
247-
booleanWrappers: {
247+
wrappers: {
248248
StorageItem: 'get',
249249
},
250250
},

rules/consistent-boolean-name.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,12 @@ const prepareOptions = ({
144144
checkProperties = false,
145145
prefixes = {},
146146
ignore = [],
147-
booleanWrappers = {},
147+
wrappers = {},
148148
} = {}) => ({
149149
checkProperties,
150150
prefixes: getEnabledPrefixes({prefixes}),
151151
ignore: ignore.map(pattern => isRegExp(pattern) ? pattern : new RegExp(pattern, 'u')),
152-
booleanWrappers: new Map(Object.entries(booleanWrappers)),
152+
wrappers: new Map(Object.entries(wrappers)),
153153
});
154154

155155
function isIgnoredName(name, ignore) {
@@ -1199,7 +1199,7 @@ function getAutofix({
11991199

12001200
/** @param {import('eslint').Rule.RuleContext} context */
12011201
const create = context => {
1202-
const {checkProperties, prefixes, ignore, booleanWrappers} = prepareOptions(context.options[0]);
1202+
const {checkProperties, prefixes, ignore, wrappers} = prepareOptions(context.options[0]);
12031203

12041204
if (prefixes.length === 0) {
12051205
return;
@@ -1217,13 +1217,13 @@ const create = context => {
12171217
const booleanPrefix = getBooleanPrefix(nameForPrefixCheck, prefixes);
12181218
if (booleanPrefix) {
12191219
const booleanState = getVariableBooleanState(variable, context);
1220-
const booleanWrapperState = booleanWrappers.size === 0 || booleanState === boolean
1220+
const booleanWrapperState = wrappers.size === 0 || booleanState === boolean
12211221
? unknown
12221222
: getBooleanWrapperVariableState({
12231223
variable,
12241224
definition: getSupportedVariableDefinition(variable),
12251225
context,
1226-
booleanWrappers,
1226+
wrappers,
12271227
});
12281228
const effectiveBooleanState = booleanWrapperState === unknown ? booleanState : booleanWrapperState;
12291229
if (
@@ -1378,7 +1378,7 @@ const config = {
13781378
pattern: '^[a-z][a-zA-Z0-9]*$',
13791379
},
13801380
},
1381-
booleanWrappers: {
1381+
wrappers: {
13821382
type: 'object',
13831383
description: 'Wrapper type names and their boolean-like value members.',
13841384
additionalProperties: {
@@ -1395,7 +1395,7 @@ const config = {
13951395
},
13961396
},
13971397
],
1398-
defaultOptions: [{ignore: [], booleanWrappers: {}}],
1398+
defaultOptions: [{ignore: [], wrappers: {}}],
13991399
messages,
14001400
languages: [
14011401
'js/js',

rules/utils/get-boolean-wrapper-variable-state.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ const mappedTypeFlag = 32;
1010

1111
const isMappedType = type => (type.objectFlags % (mappedTypeFlag * 2)) >= mappedTypeFlag;
1212

13-
function getConfiguredMemberName(type, checker, booleanWrappers, visitedTypes = new Set()) {
13+
function getConfiguredMemberName(type, checker, wrappers, visitedTypes = new Set()) {
1414
if (!type) {
1515
return;
1616
}
1717

1818
const nonNullableType = checker.getNonNullableType(type);
1919
if (nonNullableType !== type) {
20-
return getConfiguredMemberName(nonNullableType, checker, booleanWrappers, visitedTypes);
20+
return getConfiguredMemberName(nonNullableType, checker, wrappers, visitedTypes);
2121
}
2222

2323
if (visitedTypes.has(type)) {
@@ -32,19 +32,19 @@ function getConfiguredMemberName(type, checker, booleanWrappers, visitedTypes =
3232
type.target?.symbol?.name,
3333
];
3434
const memberName = typeNames
35-
.map(typeName => booleanWrappers.get(typeName))
35+
.map(typeName => wrappers.get(typeName))
3636
.find(Boolean);
3737
if (memberName) {
3838
return memberName;
3939
}
4040

4141
if (isTypeParameterType(type)) {
42-
return getConfiguredMemberName(type.getConstraint(), checker, booleanWrappers, visitedTypes);
42+
return getConfiguredMemberName(type.getConstraint(), checker, wrappers, visitedTypes);
4343
}
4444

4545
if (type.isIntersection()) {
4646
for (const constituentType of type.types) {
47-
const memberName = getConfiguredMemberName(constituentType, checker, booleanWrappers, visitedTypes);
47+
const memberName = getConfiguredMemberName(constituentType, checker, wrappers, visitedTypes);
4848
if (memberName) {
4949
return memberName;
5050
}
@@ -53,15 +53,15 @@ function getConfiguredMemberName(type, checker, booleanWrappers, visitedTypes =
5353

5454
if (isMappedType(type)) {
5555
for (const typeArgument of type.aliasTypeArguments ?? []) {
56-
const memberName = getConfiguredMemberName(typeArgument, checker, booleanWrappers, visitedTypes);
56+
const memberName = getConfiguredMemberName(typeArgument, checker, wrappers, visitedTypes);
5757
if (memberName) {
5858
return memberName;
5959
}
6060
}
6161
}
6262

6363
for (const baseType of getBaseTypes(type, checker)) {
64-
const memberName = getConfiguredMemberName(baseType, checker, booleanWrappers, visitedTypes);
64+
const memberName = getConfiguredMemberName(baseType, checker, wrappers, visitedTypes);
6565
if (memberName) {
6666
return memberName;
6767
}
@@ -96,31 +96,31 @@ function getBooleanWrapperMemberState(type, memberName, checker) {
9696
: getBooleanValueState(memberType, checker);
9797
}
9898

99-
function getBooleanWrapperTypeState(type, checker, booleanWrappers) {
99+
function getBooleanWrapperTypeState(type, checker, wrappers) {
100100
if (!type) {
101101
return unknown;
102102
}
103103

104104
const nonNullableType = checker.getNonNullableType(type);
105105
if (nonNullableType !== type) {
106-
return getBooleanWrapperTypeState(nonNullableType, checker, booleanWrappers);
106+
return getBooleanWrapperTypeState(nonNullableType, checker, wrappers);
107107
}
108108

109109
if (type.isUnion()) {
110-
return combineBooleanStates(type.types.map(type => getBooleanWrapperTypeState(type, checker, booleanWrappers)));
110+
return combineBooleanStates(type.types.map(type => getBooleanWrapperTypeState(type, checker, wrappers)));
111111
}
112112

113-
const memberName = getConfiguredMemberName(type, checker, booleanWrappers);
113+
const memberName = getConfiguredMemberName(type, checker, wrappers);
114114
if (!memberName) {
115115
return unknown;
116116
}
117117

118118
return getBooleanWrapperMemberState(type, memberName, checker);
119119
}
120120

121-
function getBooleanWrapperVariableState({variable, definition, context, booleanWrappers}) {
121+
function getBooleanWrapperVariableState({variable, definition, context, wrappers}) {
122122
if (
123-
booleanWrappers.size === 0
123+
wrappers.size === 0
124124
|| !definition
125125
|| !['Variable', 'Parameter'].includes(definition.type)
126126
|| variable.references.some(reference => !reference.init && reference.isWrite())
@@ -137,7 +137,7 @@ function getBooleanWrapperVariableState({variable, definition, context, booleanW
137137
return getBooleanWrapperTypeState(
138138
parserServices.getTypeAtLocation(definition.name),
139139
parserServices.program.getTypeChecker(),
140-
booleanWrappers,
140+
wrappers,
141141
);
142142
} catch {
143143
return unknown;

test/consistent-boolean-name-boolean-wrappers.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const typeAware = testCase => {
3636
};
3737

3838
const booleanWrapperOptions = {
39-
booleanWrappers: {
39+
wrappers: {
4040
StorageItem: 'get',
4141
},
4242
};
@@ -76,12 +76,12 @@ test({
7676
validBooleanWrapper(`${storageItemType} type ReadonlyStorageItem = Readonly<StorageItem<unknown, boolean>>; declare const isUnicorn: ReadonlyStorageItem;`),
7777
validBooleanWrapper(`${storageItemType} declare function createStorageItem(): StorageItem<boolean>; const isUnicorn = createStorageItem();`),
7878
validBooleanWrapper(`${storageItemType} function useStorage<T extends StorageItem<boolean>>(isUnicorn: T) {}`),
79-
validBooleanWrapper('interface BooleanWrapper {value: boolean} declare const isReady: BooleanWrapper;', {booleanWrappers: {BooleanWrapper: 'value'}}),
80-
validBooleanWrapper('interface DirectBooleanMethodWrapper {get(): boolean} declare const isReady: DirectBooleanMethodWrapper;', {booleanWrappers: {DirectBooleanMethodWrapper: 'get'}}),
81-
validBooleanWrapper('interface BooleanWrapper {get(): boolean} declare const ready: BooleanWrapper;', {booleanWrappers: {BooleanWrapper: 'get'}}),
82-
validBooleanWrapper('interface StringMemberWrapper {\'value-state\': boolean} declare const isReady: StringMemberWrapper;', {booleanWrappers: {StringMemberWrapper: 'value-state'}}),
83-
validBooleanWrapper('interface PromiseWrapper {get: Promise<boolean>} declare const isReady: PromiseWrapper;', {booleanWrappers: {PromiseWrapper: 'get'}}),
84-
validBooleanWrapper('interface PromiseLikeWrapper {get(): PromiseLike<boolean>} declare const isReady: PromiseLikeWrapper;', {booleanWrappers: {PromiseLikeWrapper: 'get'}}),
79+
validBooleanWrapper('interface BooleanWrapper {value: boolean} declare const isReady: BooleanWrapper;', {wrappers: {BooleanWrapper: 'value'}}),
80+
validBooleanWrapper('interface DirectBooleanMethodWrapper {get(): boolean} declare const isReady: DirectBooleanMethodWrapper;', {wrappers: {DirectBooleanMethodWrapper: 'get'}}),
81+
validBooleanWrapper('interface BooleanWrapper {get(): boolean} declare const ready: BooleanWrapper;', {wrappers: {BooleanWrapper: 'get'}}),
82+
validBooleanWrapper('interface StringMemberWrapper {\'value-state\': boolean} declare const isReady: StringMemberWrapper;', {wrappers: {StringMemberWrapper: 'value-state'}}),
83+
validBooleanWrapper('interface PromiseWrapper {get: Promise<boolean>} declare const isReady: PromiseWrapper;', {wrappers: {PromiseWrapper: 'get'}}),
84+
validBooleanWrapper('interface PromiseLikeWrapper {get(): PromiseLike<boolean>} declare const isReady: PromiseLikeWrapper;', {wrappers: {PromiseLikeWrapper: 'get'}}),
8585
],
8686
invalid: [
8787
invalidBooleanWrapper(`${storageItemType} declare const isUnicorn: StorageItem<unknown, string>;`),
@@ -104,17 +104,17 @@ test({
104104
'interface ExtendedStorageItem<Return> extends StorageItem<Return> {}',
105105
'declare const isUnicorn: ExtendedStorageItem<string>;',
106106
].join('\n')),
107-
invalidBooleanWrapper('interface MissingMember {value: boolean} declare const isReady: MissingMember;', {booleanWrappers: {MissingMember: 'get'}}),
108-
invalidBooleanWrapper('interface StringPropertyWrapper {get: string} declare const isReady: StringPropertyWrapper;', {booleanWrappers: {StringPropertyWrapper: 'get'}}),
107+
invalidBooleanWrapper('interface MissingMember {value: boolean} declare const isReady: MissingMember;', {wrappers: {MissingMember: 'get'}}),
108+
invalidBooleanWrapper('interface StringPropertyWrapper {get: string} declare const isReady: StringPropertyWrapper;', {wrappers: {StringPropertyWrapper: 'get'}}),
109109
invalidBooleanWrapper([
110110
'interface OverloadedWrapper {',
111111
'\tget(): Promise<boolean>;',
112112
'\tget(value: string): Promise<string>;',
113113
'}',
114114
'declare const isReady: OverloadedWrapper;',
115-
].join('\n'), {booleanWrappers: {OverloadedWrapper: 'get'}}),
115+
].join('\n'), {wrappers: {OverloadedWrapper: 'get'}}),
116116
// Boolean wrappers intentionally apply only to variable and parameter bindings.
117-
invalidBooleanWrapper('interface BooleanWrapper {get(): Promise<boolean>} interface Settings {isReady: BooleanWrapper}', {checkProperties: true, booleanWrappers: {BooleanWrapper: 'get'}}),
117+
invalidBooleanWrapper('interface BooleanWrapper {get(): Promise<boolean>} interface Settings {isReady: BooleanWrapper}', {checkProperties: true, wrappers: {BooleanWrapper: 'get'}}),
118118
invalidBooleanWrapper(`${storageItemType} let isUnicorn: StorageItem<unknown, boolean> = value; isUnicorn = value;`),
119119
invalidBooleanWrapper(`${storageItemType} declare const isUnicorn: StorageItem<unknown, boolean>;`, {}),
120120
typescript({

0 commit comments

Comments
 (0)