Skip to content

Commit 4da1024

Browse files
fix(functional-parameters): default options not being applied to option overrides
fix #885
1 parent 9763bdc commit 4da1024

File tree

3 files changed

+49
-13
lines changed

3 files changed

+49
-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: 30 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,29 @@ function getParamCountViolations(
234234
return [];
235235
}
236236

237+
/**
238+
* Add the default options to the given options.
239+
*/
240+
function getOptionsWithDefaults(options: Readonly<Options> | null): Options {
241+
if (options === null) {
242+
return defaultOptions[0];
243+
}
244+
245+
const topLevel = {
246+
...defaultOptions[0],
247+
...options,
248+
};
249+
return typeof topLevel.enforceParameterCount === "object"
250+
? {
251+
...topLevel,
252+
enforceParameterCount: {
253+
...defaultOptions[0].enforceParameterCount,
254+
...topLevel.enforceParameterCount,
255+
},
256+
}
257+
: topLevel;
258+
}
259+
237260
/**
238261
* Check if the given function node has a reset parameter this rule.
239262
*/
@@ -243,10 +266,8 @@ function checkFunction(
243266
rawOptions: Readonly<RawOptions>,
244267
): RuleResult<keyof typeof errorMessages, RawOptions> {
245268
const options = upgradeRawOverridableOptions(rawOptions[0]);
246-
const optionsToUse = getCoreOptions<CoreOptions, Options>(
247-
node,
248-
context,
249-
options,
269+
const optionsToUse = getOptionsWithDefaults(
270+
getCoreOptions<CoreOptions, Options>(node, context, options),
250271
);
251272

252273
if (optionsToUse === null) {
@@ -291,10 +312,11 @@ function checkIdentifier(
291312

292313
const functionNode = getEnclosingFunction(node);
293314
const options = upgradeRawOverridableOptions(rawOptions[0]);
294-
const optionsToUse =
315+
const optionsToUse = getOptionsWithDefaults(
295316
functionNode === null
296317
? options
297-
: getCoreOptions<CoreOptions, Options>(functionNode, context, options);
318+
: getCoreOptions<CoreOptions, Options>(functionNode, context, options),
319+
);
298320

299321
if (optionsToUse === null) {
300322
return {

0 commit comments

Comments
 (0)