Skip to content

Commit b528bc7

Browse files
fix(prefer-immutable-types): inheriting of config options
1 parent 8efc7dd commit b528bc7

File tree

2 files changed

+46
-41
lines changed

2 files changed

+46
-41
lines changed

src/rules/prefer-immutable-types.ts

Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -349,19 +349,21 @@ function getParameterTypeViolations(
349349
const { parameters: rawOption, fixer: rawFixerConfig } = optionsObject;
350350
const {
351351
enforcement: rawEnforcement,
352-
ignoreInferredTypes: rawIgnoreInferredTypes,
352+
ignoreInferredTypes,
353353
ignoreClasses,
354354
ignoreNamePattern,
355355
ignoreTypePattern,
356-
} = typeof rawOption === "object"
357-
? rawOption
358-
: {
359-
enforcement: rawOption,
360-
ignoreInferredTypes: optionsObject.ignoreInferredTypes,
361-
ignoreClasses: optionsObject.ignoreClasses,
362-
ignoreNamePattern: optionsObject.ignoreNamePattern,
363-
ignoreTypePattern: optionsObject.ignoreTypePattern,
364-
};
356+
} = {
357+
ignoreInferredTypes: optionsObject.ignoreInferredTypes,
358+
ignoreClasses: optionsObject.ignoreClasses,
359+
ignoreNamePattern: optionsObject.ignoreNamePattern,
360+
ignoreTypePattern: optionsObject.ignoreTypePattern,
361+
...(typeof rawOption === "object"
362+
? rawOption
363+
: {
364+
enforcement: rawOption,
365+
}),
366+
};
365367

366368
const enforcement = parseEnforcement(
367369
rawEnforcement ?? optionsObject.enforcement
@@ -375,9 +377,6 @@ function getParameterTypeViolations(
375377

376378
const fixerConfigs = parseFixerConfigs(rawFixerConfig, enforcement);
377379

378-
const ignoreInferredTypes =
379-
rawIgnoreInferredTypes ?? optionsObject.ignoreInferredTypes;
380-
381380
return node.params
382381
.map((param): Descriptor | undefined => {
383382
if (shouldIgnorePattern(param, context, ignoreNamePattern)) {
@@ -463,27 +462,22 @@ function getReturnTypeViolations(
463462
const { returnTypes: rawOption, fixer: rawFixerConfig } = optionsObject;
464463
const {
465464
enforcement: rawEnforcement,
466-
ignoreInferredTypes: rawIgnoreInferredTypes,
465+
ignoreInferredTypes,
467466
ignoreClasses,
468467
ignoreNamePattern,
469468
ignoreTypePattern,
470-
} = typeof rawOption === "object"
471-
? rawOption
472-
: {
473-
enforcement: rawOption,
474-
ignoreInferredTypes: optionsObject.ignoreInferredTypes,
475-
ignoreClasses: optionsObject.ignoreClasses,
476-
ignoreNamePattern: optionsObject.ignoreNamePattern,
477-
ignoreTypePattern: optionsObject.ignoreTypePattern,
478-
};
469+
} = {
470+
ignoreInferredTypes: optionsObject.ignoreInferredTypes,
471+
ignoreClasses: optionsObject.ignoreClasses,
472+
ignoreNamePattern: optionsObject.ignoreNamePattern,
473+
ignoreTypePattern: optionsObject.ignoreTypePattern,
474+
...(typeof rawOption === "object" ? rawOption : { enforcement: rawOption }),
475+
};
479476

480477
const enforcement = parseEnforcement(
481478
rawEnforcement ?? optionsObject.enforcement
482479
);
483480

484-
const ignoreInferredTypes =
485-
rawIgnoreInferredTypes ?? optionsObject.ignoreInferredTypes;
486-
487481
if (
488482
enforcement === false ||
489483
(ignoreInferredTypes && node.returnType?.typeAnnotation === undefined) ||
@@ -612,26 +606,23 @@ function checkVarible(
612606
const { variables: rawOption, fixer: rawFixerConfig } = optionsObject;
613607
const {
614608
enforcement: rawEnforcement,
615-
ignoreInferredTypes: rawIgnoreInferredTypes,
609+
ignoreInferredTypes,
616610
ignoreClasses,
617611
ignoreNamePattern,
618612
ignoreTypePattern,
619-
ignoreInFunctions: rawIgnoreInFunctions,
620-
} = typeof rawOption === "object"
621-
? rawOption
622-
: {
623-
enforcement: rawOption,
624-
ignoreInferredTypes: optionsObject.ignoreInferredTypes,
625-
ignoreClasses: optionsObject.ignoreClasses,
626-
ignoreNamePattern: optionsObject.ignoreNamePattern,
627-
ignoreTypePattern: optionsObject.ignoreTypePattern,
628-
ignoreInFunctions: false,
629-
};
613+
ignoreInFunctions,
614+
} = {
615+
ignoreInferredTypes: optionsObject.ignoreInferredTypes,
616+
ignoreClasses: optionsObject.ignoreClasses,
617+
ignoreNamePattern: optionsObject.ignoreNamePattern,
618+
ignoreTypePattern: optionsObject.ignoreTypePattern,
619+
ignoreInFunctions: false,
620+
...(typeof rawOption === "object" ? rawOption : { enforcement: rawOption }),
621+
};
630622

631623
const enforcement = parseEnforcement(
632624
rawEnforcement ?? optionsObject.enforcement
633625
);
634-
const ignoreInFunctions = rawIgnoreInFunctions ?? false;
635626

636627
if (
637628
enforcement === false ||
@@ -663,8 +654,6 @@ function checkVarible(
663654
};
664655
}
665656

666-
const ignoreInferredTypes =
667-
rawIgnoreInferredTypes ?? optionsObject.ignoreInferredTypes;
668657
const nodeWithTypeAnnotation = propertyDefinition ? node : node.id;
669658

670659
if (

tests/rules/prefer-immutable-types/ts/parameters/valid.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,22 @@ const tests: ReadonlyArray<ValidTestCase> = [
230230
`,
231231
optionsSet: [[{ ignoreNamePattern: "^mutable" }]],
232232
},
233+
// Inherit Ignore Name Prefix.
234+
{
235+
code: dedent`
236+
function foo(mutableArg: string[]) {}
237+
`,
238+
optionsSet: [
239+
[
240+
{
241+
ignoreNamePattern: "^mutable",
242+
parameters: {
243+
enforcement: "Immutable",
244+
},
245+
},
246+
],
247+
],
248+
},
233249
// Ignore Name Suffix.
234250
{
235251
code: dedent`

0 commit comments

Comments
 (0)