Skip to content

Commit 687ebf7

Browse files
fix(functional-parameters): default options not being applied to option overrides
fix #885
1 parent e36178c commit 687ebf7

File tree

3 files changed

+51
-13
lines changed

3 files changed

+51
-13
lines changed

docs/rules/functional-parameters.md

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,24 @@ const defaults = {
132132

133133
```ts
134134
const recommendedOptions = {
135-
enforceParameterCount: {
136-
ignoreLambdaExpression: true,
137-
ignoreIIFE: true,
138-
ignoreGettersAndSetters: true,
139-
},
135+
enforceParameterCount: false,
136+
overrides: [
137+
{
138+
specifiers: [
139+
{
140+
from: "file",
141+
},
142+
],
143+
options: {
144+
enforceParameterCount: {
145+
count: "atLeastOne",
146+
ignoreLambdaExpression: true,
147+
ignoreIIFE: true,
148+
ignoreGettersAndSetters: true,
149+
},
150+
},
151+
},
152+
],
140153
};
141154
```
142155

src/configs/recommended.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const overrides = {
4141
],
4242
options: {
4343
enforceParameterCount: {
44+
count: "atLeastOne",
4445
ignoreLambdaExpression: true,
4546
ignoreIIFE: true,
4647
ignoreGettersAndSetters: true,

src/rules/functional-parameters.ts

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ const schema: JSONSchema4[] = [
127127
/**
128128
* The default options for the rule.
129129
*/
130-
const defaultOptions: RawOptions = [
130+
const defaultOptions = [
131131
{
132132
allowRestParameter: false,
133133
allowArgumentsKeyword: false,
@@ -138,7 +138,7 @@ const defaultOptions: RawOptions = [
138138
ignoreGettersAndSetters: true,
139139
},
140140
},
141-
];
141+
] satisfies RawOptions;
142142

143143
/**
144144
* The possible error messages.
@@ -234,6 +234,31 @@ function getParamCountViolations(
234234
return [];
235235
}
236236

237+
/**
238+
* Add the default options to the given options.
239+
*/
240+
function getOptionsWithDefaults(
241+
options: Readonly<Options> | null,
242+
): Options | null {
243+
if (options === null) {
244+
return null;
245+
}
246+
247+
const topLevel = {
248+
...defaultOptions[0],
249+
...options,
250+
};
251+
return typeof topLevel.enforceParameterCount === "object"
252+
? {
253+
...topLevel,
254+
enforceParameterCount: {
255+
...defaultOptions[0].enforceParameterCount,
256+
...topLevel.enforceParameterCount,
257+
},
258+
}
259+
: topLevel;
260+
}
261+
237262
/**
238263
* Check if the given function node has a reset parameter this rule.
239264
*/
@@ -243,10 +268,8 @@ function checkFunction(
243268
rawOptions: Readonly<RawOptions>,
244269
): RuleResult<keyof typeof errorMessages, RawOptions> {
245270
const options = upgradeRawOverridableOptions(rawOptions[0]);
246-
const optionsToUse = getCoreOptions<CoreOptions, Options>(
247-
node,
248-
context,
249-
options,
271+
const optionsToUse = getOptionsWithDefaults(
272+
getCoreOptions<CoreOptions, Options>(node, context, options),
250273
);
251274

252275
if (optionsToUse === null) {
@@ -291,10 +314,11 @@ function checkIdentifier(
291314

292315
const functionNode = getEnclosingFunction(node);
293316
const options = upgradeRawOverridableOptions(rawOptions[0]);
294-
const optionsToUse =
317+
const optionsToUse = getOptionsWithDefaults(
295318
functionNode === null
296319
? options
297-
: getCoreOptions<CoreOptions, Options>(functionNode, context, options);
320+
: getCoreOptions<CoreOptions, Options>(functionNode, context, options),
321+
);
298322

299323
if (optionsToUse === null) {
300324
return {

0 commit comments

Comments
 (0)