From b5bbcf0eaf8b4a86cf7794886bef2fa87fedb14d Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Fri, 28 Mar 2025 20:33:52 +0000
Subject: [PATCH 1/5] feat: add fixer to
`require-store-callbacks-use-set-param`
Adds a fixer which adds or changes the param to `set`.
For example:
```ts
// before
readable(val, () => ...);
readable(val, function () { ... });
// after
readable(val, (set) => ...);
readable(val, function (set) { ... });
```
---
.../require-store-callbacks-use-set-param.ts | 16 +++++++++++++++-
.../invalid/test01-output.svelte | 9 +++++++++
.../invalid/test02-output.svelte | 9 +++++++++
3 files changed, 33 insertions(+), 1 deletion(-)
create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte
create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte
diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
index fc12fdfee..05ef76e01 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
@@ -8,6 +8,7 @@ export default createRule('require-store-callbacks-use-set-param', {
category: 'Possible Errors',
recommended: false
},
+ fixable: 'code',
schema: [],
messages: {
unexpected: 'Store callbacks must use `set` param.'
@@ -27,7 +28,20 @@ export default createRule('require-store-callbacks-use-set-param', {
context.report({
node: fn,
loc: fn.loc,
- messageId: 'unexpected'
+ messageId: 'unexpected',
+ fix: (fixer) => {
+ if (param) {
+ return fixer.replaceText(param, 'set');
+ }
+ const token = context.getSourceCode().getTokenBefore(fn.body, {
+ filter: (token) => token.type === 'Punctuator' && token.value === '(',
+ includeComments: false
+ });
+ if (token) {
+ return fixer.insertTextAfter(token, 'set');
+ }
+ return [];
+ }
});
}
}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte
new file mode 100644
index 000000000..674c6a181
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte
@@ -0,0 +1,9 @@
+
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte
new file mode 100644
index 000000000..9b503866f
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte
@@ -0,0 +1,9 @@
+
From e22c62e49bf0cdb174fae017a33b0aef727c08fc Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 29 Mar 2025 14:49:31 +0000
Subject: [PATCH 2/5] fix: use a suggestion instead
---
.../require-store-callbacks-use-set-param.ts | 84 ++++++++--
.../invalid/test01-errors.yaml | 149 +++++++++++++++++-
.../invalid/test01-input.svelte | 15 ++
.../invalid/test01-output.svelte | 9 --
.../invalid/test02-errors.yaml | 56 ++++++-
.../invalid/test02-output.svelte | 9 --
6 files changed, 284 insertions(+), 38 deletions(-)
delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte
delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte
diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
index 05ef76e01..5c4994522 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
@@ -1,5 +1,36 @@
+import { getScope } from '../utils/ast-utils.js';
+import type { RuleContext, SuggestionReportDescriptor } from '../types.js';
import { createRule } from '../utils/index.js';
import { extractStoreReferences } from './reference-helpers/svelte-store.js';
+import type { TSESTree } from '@typescript-eslint/types';
+import type { Variable } from '@typescript-eslint/scope-manager';
+import { getSourceCode } from '../utils/compat.js';
+
+function findVariableForName(
+ context: RuleContext,
+ node: TSESTree.Node,
+ name: string | null,
+ expectedName: string
+): { hasConflict: boolean; variable: Variable | null } {
+ const scope = getScope(context, node);
+ let hasConflict = false;
+ let variable: Variable | null = null;
+
+ for (const v of scope.variables) {
+ if (hasConflict && (variable || name === null)) {
+ break;
+ }
+ if (v.name === expectedName) {
+ hasConflict = true;
+ continue;
+ }
+ if (name !== null && v.name === name) {
+ variable = v;
+ }
+ }
+
+ return { hasConflict, variable };
+}
export default createRule('require-store-callbacks-use-set-param', {
meta: {
@@ -8,10 +39,12 @@ export default createRule('require-store-callbacks-use-set-param', {
category: 'Possible Errors',
recommended: false
},
- fixable: 'code',
+ hasSuggestions: true,
schema: [],
messages: {
- unexpected: 'Store callbacks must use `set` param.'
+ unexpected: 'Store callbacks must use `set` param.',
+ updateParam: 'Rename parameter from {{oldName}} to `set`.',
+ addParam: 'Add a `set` parameter.'
},
type: 'suggestion'
},
@@ -25,23 +58,48 @@ export default createRule('require-store-callbacks-use-set-param', {
}
const param = fn.params[0];
if (!param || (param.type === 'Identifier' && param.name !== 'set')) {
- context.report({
- node: fn,
- loc: fn.loc,
- messageId: 'unexpected',
- fix: (fixer) => {
- if (param) {
- return fixer.replaceText(param, 'set');
- }
- const token = context.getSourceCode().getTokenBefore(fn.body, {
+ const { hasConflict, variable } = findVariableForName(
+ context,
+ fn.body,
+ param ? param.name : null,
+ 'set'
+ );
+ const suggest: SuggestionReportDescriptor[] = [];
+ if (!hasConflict) {
+ if (param) {
+ suggest.push({
+ messageId: 'updateParam',
+ data: { oldName: param.name },
+ *fix(fixer) {
+ yield fixer.replaceText(param, 'set');
+
+ if (variable) {
+ for (const ref of variable.references) {
+ yield fixer.replaceText(ref.identifier, 'set');
+ }
+ }
+ }
+ });
+ } else {
+ const token = getSourceCode(context).getTokenBefore(fn.body, {
filter: (token) => token.type === 'Punctuator' && token.value === '(',
includeComments: false
});
if (token) {
- return fixer.insertTextAfter(token, 'set');
+ suggest.push({
+ messageId: 'addParam',
+ fix(fixer) {
+ return fixer.insertTextAfter(token, 'set');
+ }
+ });
}
- return [];
}
+ }
+ context.report({
+ node: fn,
+ loc: fn.loc,
+ messageId: 'unexpected',
+ suggest
});
}
}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml
index 74e27379c..424ffca69 100644
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml
@@ -1,16 +1,159 @@
- message: Store callbacks must use `set` param.
line: 4
column: 18
- suggestions: null
+ suggestions:
+ - desc: Add a `set` parameter.
+ messageId: addParam
+ output: |
+
- message: Store callbacks must use `set` param.
line: 5
column: 18
- suggestions: null
+ suggestions:
+ - desc: Rename parameter from foo to `set`.
+ messageId: updateParam
+ output: |
+
- message: Store callbacks must use `set` param.
line: 7
column: 18
- suggestions: null
+ suggestions:
+ - desc: Add a `set` parameter.
+ messageId: addParam
+ output: |
+
- message: Store callbacks must use `set` param.
line: 8
column: 18
+ suggestions:
+ - desc: Rename parameter from foo to `set`.
+ messageId: updateParam
+ output: |
+
+- message: Store callbacks must use `set` param.
+ line: 10
+ column: 19
+ suggestions:
+ - desc: Rename parameter from foo to `set`.
+ messageId: updateParam
+ output: |
+
+- message: Store callbacks must use `set` param.
+ line: 21
+ column: 19
suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte
index a41201205..164a644c9 100644
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte
@@ -6,4 +6,19 @@
writable(false, () => true);
writable(false, (foo) => true);
+
+ readable(false, (foo) => {
+ foo;
+ insideACallback(() => {
+ foo;
+ });
+ conflictingName(() => {
+ const foo = 303;
+ foo;
+ });
+ });
+
+ readable(false, () => {
+ const set = 303;
+ });
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte
deleted file mode 100644
index 674c6a181..000000000
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-output.svelte
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-errors.yaml
index 74e27379c..6f2236ad9 100644
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-errors.yaml
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-errors.yaml
@@ -1,16 +1,64 @@
- message: Store callbacks must use `set` param.
line: 4
column: 18
- suggestions: null
+ suggestions:
+ - desc: Add a `set` parameter.
+ messageId: addParam
+ output: |
+
- message: Store callbacks must use `set` param.
line: 5
column: 18
- suggestions: null
+ suggestions:
+ - desc: Rename parameter from foo to `set`.
+ messageId: updateParam
+ output: |
+
- message: Store callbacks must use `set` param.
line: 7
column: 18
- suggestions: null
+ suggestions:
+ - desc: Add a `set` parameter.
+ messageId: addParam
+ output: |
+
- message: Store callbacks must use `set` param.
line: 8
column: 18
- suggestions: null
+ suggestions:
+ - desc: Rename parameter from foo to `set`.
+ messageId: updateParam
+ output: |
+
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte
deleted file mode 100644
index 9b503866f..000000000
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-output.svelte
+++ /dev/null
@@ -1,9 +0,0 @@
-
From 1b9a07a8c763b07929f72acc100c5b35c515f83a Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 29 Mar 2025 17:05:39 +0000
Subject: [PATCH 3/5] fix: reuse helper from ast-utils
---
.../rules/derived-has-same-inputs-outputs.ts | 33 +---
.../require-store-callbacks-use-set-param.ts | 34 +---
.../src/utils/ast-utils.ts | 34 ++++
.../invalid/test01-errors.yaml | 181 +++++++++++-------
.../invalid/test01-input.svelte | 7 +
5 files changed, 157 insertions(+), 132 deletions(-)
diff --git a/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts b/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts
index 30f86aa31..319c49d95 100644
--- a/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts
+++ b/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts
@@ -3,34 +3,7 @@ import type { Variable } from '@typescript-eslint/scope-manager';
import { createRule } from '../utils/index.js';
import type { RuleContext, RuleFixer } from '../types.js';
import { extractStoreReferences } from './reference-helpers/svelte-store.js';
-import { getScope } from '../utils/ast-utils.js';
-
-function findVariableForName(
- context: RuleContext,
- node: TSESTree.Node,
- name: string,
- expectedName: string
-): { hasConflict: boolean; variable: Variable | null } {
- const scope = getScope(context, node);
- let variable: Variable | null = null;
-
- for (const ref of scope.references) {
- if (ref.identifier.name === expectedName) {
- return { hasConflict: true, variable: null };
- }
- }
-
- for (const v of scope.variables) {
- if (v.name === expectedName) {
- return { hasConflict: true, variable: null };
- }
- if (v.name === name) {
- variable = v;
- }
- }
-
- return { hasConflict: false, variable };
-}
+import { findVariableForReplacement } from '../utils/ast-utils.js';
function createFixer(node: TSESTree.Node, variable: Variable | null, name: string) {
return function* fix(fixer: RuleFixer) {
@@ -92,7 +65,7 @@ export default createRule('derived-has-same-inputs-outputs', {
if (fnParam.type !== 'Identifier') return;
const expectedName = `$${args.name}`;
if (expectedName !== fnParam.name) {
- const { hasConflict, variable } = findVariableForName(
+ const { hasConflict, variable } = findVariableForReplacement(
context,
fn.body,
fnParam.name,
@@ -136,7 +109,7 @@ export default createRule('derived-has-same-inputs-outputs', {
if (element && element.type === 'Identifier' && argName) {
const expectedName = `$${argName}`;
if (expectedName !== element.name) {
- const { hasConflict, variable } = findVariableForName(
+ const { hasConflict, variable } = findVariableForReplacement(
context,
fn.body,
element.name,
diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
index 5c4994522..6d138c88a 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts
@@ -1,37 +1,9 @@
-import { getScope } from '../utils/ast-utils.js';
-import type { RuleContext, SuggestionReportDescriptor } from '../types.js';
+import { findVariableForReplacement } from '../utils/ast-utils.js';
+import type { SuggestionReportDescriptor } from '../types.js';
import { createRule } from '../utils/index.js';
import { extractStoreReferences } from './reference-helpers/svelte-store.js';
-import type { TSESTree } from '@typescript-eslint/types';
-import type { Variable } from '@typescript-eslint/scope-manager';
import { getSourceCode } from '../utils/compat.js';
-function findVariableForName(
- context: RuleContext,
- node: TSESTree.Node,
- name: string | null,
- expectedName: string
-): { hasConflict: boolean; variable: Variable | null } {
- const scope = getScope(context, node);
- let hasConflict = false;
- let variable: Variable | null = null;
-
- for (const v of scope.variables) {
- if (hasConflict && (variable || name === null)) {
- break;
- }
- if (v.name === expectedName) {
- hasConflict = true;
- continue;
- }
- if (name !== null && v.name === name) {
- variable = v;
- }
- }
-
- return { hasConflict, variable };
-}
-
export default createRule('require-store-callbacks-use-set-param', {
meta: {
docs: {
@@ -58,7 +30,7 @@ export default createRule('require-store-callbacks-use-set-param', {
}
const param = fn.params[0];
if (!param || (param.type === 'Identifier' && param.name !== 'set')) {
- const { hasConflict, variable } = findVariableForName(
+ const { hasConflict, variable } = findVariableForReplacement(
context,
fn.body,
param ? param.name : null,
diff --git a/packages/eslint-plugin-svelte/src/utils/ast-utils.ts b/packages/eslint-plugin-svelte/src/utils/ast-utils.ts
index 1b804baef..02c5fff66 100644
--- a/packages/eslint-plugin-svelte/src/utils/ast-utils.ts
+++ b/packages/eslint-plugin-svelte/src/utils/ast-utils.ts
@@ -685,3 +685,37 @@ function getSimpleNameFromNode(
return getSourceCode(context).getText(node);
}
+
+/**
+ * Finds the variable for a given name in the specified node's scope.
+ * Also determines if the replacement name is already in use.
+ *
+ * If the `name` is set to null, this assumes you're adding a new variable
+ * and reports if it is already in use.
+ */
+export function findVariableForReplacement(
+ context: RuleContext,
+ node: TSESTree.Node,
+ name: string | null,
+ replacementName: string
+): { hasConflict: boolean; variable: Variable | null } {
+ const scope = getScope(context, node);
+ let variable: Variable | null = null;
+
+ for (const ref of scope.references) {
+ if (ref.identifier.name === replacementName) {
+ return { hasConflict: true, variable: null };
+ }
+ }
+
+ for (const v of scope.variables) {
+ if (v.name === replacementName) {
+ return { hasConflict: true, variable: null };
+ }
+ if (v.name === name) {
+ variable = v;
+ }
+ }
+
+ return { hasConflict: false, variable };
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml
index 424ffca69..2f0e15716 100644
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml
@@ -14,20 +14,27 @@
writable(false, () => true);
writable(false, (foo) => true);
- readable(false, (foo) => {
- foo;
- insideACallback(() => {
- foo;
- });
- conflictingName(() => {
- const foo = 303;
- foo;
- });
- });
-
- readable(false, () => {
- const set = 303;
- });
+ readable(false, (foo) => {
+ foo;
+ insideACallback(() => {
+ foo;
+ });
+ conflictingName(() => {
+ const foo = 303;
+ foo;
+ });
+ });
+
+ readable(false, () => {
+ const set = 303;
+ });
+
+ insideACallback(() => {
+ const set = 303;
+ readable(false, () => {
+ set;
+ });
+ });
- message: Store callbacks must use `set` param.
line: 5
@@ -45,20 +52,27 @@
writable(false, () => true);
writable(false, (foo) => true);
- readable(false, (foo) => {
- foo;
- insideACallback(() => {
- foo;
- });
- conflictingName(() => {
- const foo = 303;
- foo;
- });
- });
-
- readable(false, () => {
- const set = 303;
- });
+ readable(false, (foo) => {
+ foo;
+ insideACallback(() => {
+ foo;
+ });
+ conflictingName(() => {
+ const foo = 303;
+ foo;
+ });
+ });
+
+ readable(false, () => {
+ const set = 303;
+ });
+
+ insideACallback(() => {
+ const set = 303;
+ readable(false, () => {
+ set;
+ });
+ });
- message: Store callbacks must use `set` param.
line: 7
@@ -76,20 +90,27 @@
writable(false, (set) => true);
writable(false, (foo) => true);
- readable(false, (foo) => {
- foo;
- insideACallback(() => {
- foo;
- });
- conflictingName(() => {
- const foo = 303;
- foo;
- });
- });
-
- readable(false, () => {
- const set = 303;
- });
+ readable(false, (foo) => {
+ foo;
+ insideACallback(() => {
+ foo;
+ });
+ conflictingName(() => {
+ const foo = 303;
+ foo;
+ });
+ });
+
+ readable(false, () => {
+ const set = 303;
+ });
+
+ insideACallback(() => {
+ const set = 303;
+ readable(false, () => {
+ set;
+ });
+ });
- message: Store callbacks must use `set` param.
line: 8
@@ -107,24 +128,31 @@
writable(false, () => true);
writable(false, (set) => true);
- readable(false, (foo) => {
- foo;
- insideACallback(() => {
- foo;
- });
- conflictingName(() => {
- const foo = 303;
- foo;
- });
- });
-
- readable(false, () => {
- const set = 303;
- });
+ readable(false, (foo) => {
+ foo;
+ insideACallback(() => {
+ foo;
+ });
+ conflictingName(() => {
+ const foo = 303;
+ foo;
+ });
+ });
+
+ readable(false, () => {
+ const set = 303;
+ });
+
+ insideACallback(() => {
+ const set = 303;
+ readable(false, () => {
+ set;
+ });
+ });
- message: Store callbacks must use `set` param.
line: 10
- column: 19
+ column: 18
suggestions:
- desc: Rename parameter from foo to `set`.
messageId: updateParam
@@ -138,22 +166,33 @@
writable(false, () => true);
writable(false, (foo) => true);
- readable(false, (set) => {
- set;
- insideACallback(() => {
- set;
- });
- conflictingName(() => {
- const foo = 303;
- foo;
- });
- });
-
- readable(false, () => {
- const set = 303;
- });
+ readable(false, (set) => {
+ set;
+ insideACallback(() => {
+ set;
+ });
+ conflictingName(() => {
+ const foo = 303;
+ foo;
+ });
+ });
+
+ readable(false, () => {
+ const set = 303;
+ });
+
+ insideACallback(() => {
+ const set = 303;
+ readable(false, () => {
+ set;
+ });
+ });
- message: Store callbacks must use `set` param.
line: 21
+ column: 18
+ suggestions: null
+- message: Store callbacks must use `set` param.
+ line: 27
column: 19
suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte
index 164a644c9..e89cab34f 100644
--- a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte
@@ -21,4 +21,11 @@
readable(false, () => {
const set = 303;
});
+
+ insideACallback(() => {
+ const set = 303;
+ readable(false, () => {
+ set;
+ });
+ });
From fd3747860e59978ea7fd04ed650cce4bb005e933 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 29 Mar 2025 17:09:05 +0000
Subject: [PATCH 4/5] chore: add docs update
---
README.md | 2 +-
docs/rules.md | 2 +-
docs/rules/require-store-callbacks-use-set-param.md | 2 ++
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 3308ebfc6..c379a3d82 100644
--- a/README.md
+++ b/README.md
@@ -272,7 +272,7 @@ These rules relate to possible syntax or logic errors in Svelte code:
| [svelte/no-shorthand-style-property-overrides](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-shorthand-style-property-overrides/) | disallow shorthand style properties that override related longhand properties | :star: |
| [svelte/no-store-async](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-store-async/) | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features | :star: |
| [svelte/no-unknown-style-directive-property](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/) | disallow unknown `style:property` | :star: |
-| [svelte/require-store-callbacks-use-set-param](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-callbacks-use-set-param/) | store callbacks must use `set` param | |
+| [svelte/require-store-callbacks-use-set-param](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-callbacks-use-set-param/) | store callbacks must use `set` param | :bulb: |
| [svelte/require-store-reactive-access](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-reactive-access/) | disallow to use of the store itself as an operand. Need to use $ prefix or get function. | :star::wrench: |
| [svelte/valid-compile](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. | |
| [svelte/valid-style-parse](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-style-parse/) | require valid style element parsing | |
diff --git a/docs/rules.md b/docs/rules.md
index 5a47ddea8..df2ca5ec4 100644
--- a/docs/rules.md
+++ b/docs/rules.md
@@ -29,7 +29,7 @@ These rules relate to possible syntax or logic errors in Svelte code:
| [svelte/no-shorthand-style-property-overrides](./rules/no-shorthand-style-property-overrides.md) | disallow shorthand style properties that override related longhand properties | :star: |
| [svelte/no-store-async](./rules/no-store-async.md) | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features | :star: |
| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md) | disallow unknown `style:property` | :star: |
-| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param | |
+| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param | :bulb: |
| [svelte/require-store-reactive-access](./rules/require-store-reactive-access.md) | disallow to use of the store itself as an operand. Need to use $ prefix or get function. | :star::wrench: |
| [svelte/valid-compile](./rules/valid-compile.md) | disallow warnings when compiling. | |
| [svelte/valid-style-parse](./rules/valid-style-parse.md) | require valid style element parsing | |
diff --git a/docs/rules/require-store-callbacks-use-set-param.md b/docs/rules/require-store-callbacks-use-set-param.md
index 4995fa495..dbe0f5945 100644
--- a/docs/rules/require-store-callbacks-use-set-param.md
+++ b/docs/rules/require-store-callbacks-use-set-param.md
@@ -10,6 +10,8 @@ since: 'v2.12.0'
> store callbacks must use `set` param
+- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).
+
## :book: Rule Details
This rule disallows if `readable` / `writable` store's setter function doesn't use `set` parameter.
From f651936822c236654d3eb8606068659e5790765e Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 29 Mar 2025 17:10:00 +0000
Subject: [PATCH 5/5] chore: add changeset
---
.changeset/clear-mugs-rush.md | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 .changeset/clear-mugs-rush.md
diff --git a/.changeset/clear-mugs-rush.md b/.changeset/clear-mugs-rush.md
new file mode 100644
index 000000000..83198ba36
--- /dev/null
+++ b/.changeset/clear-mugs-rush.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': minor
+---
+
+Adds a suggestion to the `require-store-callbacks-use-set-param` rule to automatically rename or add function parameters.