8000 fix(eslint-plugin): [prefer-reduce-type-parameter] handle already exi… · mvximvs/typescript-eslint@71dd273 · GitHub
[go: up one dir, main page]

Skip to content

Commit 71dd273

Browse files
authored
fix(eslint-plugin): [prefer-reduce-type-parameter] handle already existing type params (typescript-eslint#3706)
1 parent 820965c commit 71dd273

File tree

2 files changed

+42
-16
lines changed

2 files changed

+42
-16
lines changed

packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,31 @@ export default util.createRule({
7777
context.report({
7878
messageId: 'preferTypeParameter',
7979
node: secondArg,
80-
fix: fixer => [
81-
fixer.removeRange([
82-
secondArg.range[0],
83-
secondArg.expression.range[0],
84-
]),
85-
fixer.removeRange([
86-
secondArg.expression.range[1],
87-
secondArg.range[1],
88-
]),
89-
fixer.insertTextAfter(
90-
callee,
91-
`<${context
92-
.getSourceCode()
93-
.getText(secondArg.typeAnnotation)}>`,
94-
),
95-
],
80+
fix: fixer => {
81+
const fixes = [
82+
fixer.removeRange([
83+
secondArg.range[0],
84+
secondArg.expression.range[0],
85+
]),
86+
fixer.removeRange([
87+
secondArg.expression.range[1],
88+
secondArg.range[1],
89+
]),
90+
];
91+
92+
if (!callee.parent.typeParameters) {
93+
fixes.push(
94+
fixer.insertTextAfter(
95+
callee,
96+
`<${context
97+
.getSourceCode()
98+
.getText(secondArg.typeAnnotation)}>`,
99+
),
100+
);
101+
}
102+
103+
return fixes;
104+
},
96105
});
97106

98107
return;

packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts

Expand all lines: packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,23 @@ ruleTester.run('prefer-reduce-type-parameter', rule, {
3939
'[1, 2, 3]?.reduce<number[]>((a, s) => a.concat(s * 2), []);',
4040
],
4141
invalid: [
42+
{
43+
code: `
44+
declare const arr: string[];
45+
arr.reduce<string>(acc => acc, arr.shift() as string);
46+
`,
47+
output: `
48+
declare const arr: string[];
49+
arr.reduce<string>(acc => acc, arr.shift());
50+
`,
51+
errors: [
52+
{
53+
messageId: 'preferTypeParameter',
54+
column: 32,
55+
line: 3,
56+
},
57+
],
58+
},
4259
{
4360
code: '[1, 2, 3].reduce((a, s) => a.concat(s * 2), [] as number[]);',
4461
output: '[1, 2, 3].reduce<number[]>((a, s) => a.concat(s * 2), []);',

0 commit comments

Comments
 (0)
0