Skip to content

Commit 16099cb

Browse files
committed
fix: rename variable references within the current scope
1 parent d0f2b5a commit 16099cb

File tree

5 files changed

+56
-1
lines changed

5 files changed

+56
-1
lines changed

Diff for: packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { TSESTree } from '@typescript-eslint/types';
22
import { createRule } from '../utils/index.js';
33
import type { RuleContext } from '../types.js';
44
import { extractStoreReferences } from './reference-helpers/svelte-store.js';
5+
import { getSourceCode } from 'src/utils/compat.js';
56

67
export default createRule('derived-has-same-inputs-outputs', {
78
meta: {
@@ -55,7 +56,19 @@ export default createRule('derived-has-same-inputs-outputs', {
5556
loc: fnParam.loc,
5657
messageId: 'unexpected',
5758
data: { name: expectedName },
58-
fix: (fixer) => fixer.replaceText(fnParam, expectedName)
59+
fix: (fixer) => {
60+
const scope = getSourceCode(context).getScope(fn.body);
61+
const variable = scope.variables.find((variable) => variable.name === fnParam.name);
62+
63+
if (!variable) {
64+
return fixer.replaceText(fnParam, expectedName);
65+
}
66+
67+
return [
68+
fixer.replaceText(fnParam, expectedName),
69+
...variable.references.map((ref) => fixer.replaceText(ref.identifier, expectedName))
70+
];
71+
}
5972
});
6073
}
6174
}

Diff for: packages/eslint-plugin-svelte/src/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -366,4 +366,6 @@ export interface SourceCode {
366366
getCommentsAfter(nodeOrToken: NodeOrToken | AST.Token): AST.Comment[];
367367

368368
getCommentsInside(node: NodeOrToken): AST.Comment[];
369+
370+
getScope(node: NodeOrToken): Scope;
369371
}

Diff for: packages/eslint-plugin-svelte/tests/fixtures/rules/derived-has-same-inputs-outputs/invalid/test01-errors.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,11 @@
3030
line: 18
3131
column: 22
3232
suggestions: null
33+
- message: The argument name should be '$a'.
34+
line: 21
35+
column: 13
36+
suggestions: null
37+
- message: The argument name should be '$a'.
38+
line: 28
39+
column: 13
40+
suggestions: null

Diff for: packages/eslint-plugin-svelte/tests/fixtures/rules/derived-has-same-inputs-outputs/invalid/test01-input.js

+16
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,19 @@ derived([null, l], ([$m, $n]) => {
1818
derived([o, null], ([$p, $q]) => {
1919
/** do nothing */
2020
});
21+
derived(a, (b) => {
22+
doSomethingWith(b);
23+
24+
somethingWithACallback(() => {
25+
b;
26+
});
27+
});
28+
derived(a, (b) => {
29+
b;
30+
31+
somethingWithACallback(() => {
32+
// purposely shadow the var, this should not be updated
33+
const b = 303;
34+
b;
35+
});
36+
});

Diff for: packages/eslint-plugin-svelte/tests/fixtures/rules/derived-has-same-inputs-outputs/invalid/test01-output.js

+16
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,19 @@ derived([null, l], ([$m, $l]) => {
1818
derived([o, null], ([$o, $q]) => {
1919
/** do nothing */
2020
});
21+
derived(a, ($a) => {
22+
doSomethingWith($a);
23+
24+
somethingWithACallback(() => {
25+
$a;
26+
});
27+
});
28+
derived(a, ($a) => {
29+
$a;
30+
31+
somethingWithACallback(() => {
32+
// purposely shadow the var, this should not be updated
33+
const b = 303;
34+
b;
35+
});
36+
});

0 commit comments

Comments
 (0)