|
| 1 | +--- |
| 2 | +pageClass: "rule-details" |
| 3 | +sidebarDepth: 0 |
| 4 | +title: "svelte/require-store-callbacks-use-set-param" |
| 5 | +description: "store callbacks must use `set` param" |
| 6 | +--- |
| 7 | + |
| 8 | +# svelte/require-store-callbacks-use-set-param |
| 9 | + |
| 10 | +> Store callbacks must use `set` param. |
| 11 | +
|
| 12 | +## :book: Rule Details |
| 13 | + |
| 14 | +This rule disallows if `readable` / `writable` store's setter function doesn't use `set` parameter.<br> |
| 15 | +This rule doesn't check `derived` store. Therefore if you set a updated value asynchronously, please don't forget to use `set` function. |
| 16 | + |
| 17 | +<ESLintCodeBlock> |
| 18 | + |
| 19 | +<!--eslint-skip--> |
| 20 | + |
| 21 | +```svelte |
| 22 | +<script> |
| 23 | + /* eslint svelte/require-store-callbacks-use-set-param: "error" */ |
| 24 | + import { readable, writable, derived } from "svelte/store" |
| 25 | +
|
| 26 | + /** ✓ GOOD */ |
| 27 | + readable(null, (set) => { |
| 28 | + set(new Date()) |
| 29 | + const interval = setInterval(() => set(new Date()), 1000) |
| 30 | + return () => clearInterval(interval) |
| 31 | + }) |
| 32 | +
|
| 33 | + // `set` is unused but this rule doesn't report. |
| 34 | + // For that, please use `no-unused-vars` rule. |
| 35 | + // refer: https://eslint.org/docs/latest/rules/no-unused-vars |
| 36 | + readable(false, (set) => true) |
| 37 | +
|
| 38 | + writable(null, (set) => { |
| 39 | + set(1) |
| 40 | + return () => { /* no more subscribers */ } |
| 41 | + }) |
| 42 | +
|
| 43 | + writable(false, (set) => true) |
| 44 | +
|
| 45 | + derived(a, ($a) => $a * 2) |
| 46 | + derived( |
| 47 | + a, |
| 48 | + ($a, set) => { |
| 49 | + setTimeout(() => set($a), 1000) |
| 50 | + }, |
| 51 | + "one moment...", |
| 52 | + ) |
| 53 | +
|
| 54 | + /** ✗ BAD */ |
| 55 | + readable(false, () => true) |
| 56 | + readable(false, (foo) => true) |
| 57 | +
|
| 58 | + writable(false, () => true) |
| 59 | + writable(false, (foo) => true) |
| 60 | +</script> |
| 61 | +``` |
| 62 | + |
| 63 | +</ESLintCodeBlock> |
| 64 | + |
| 65 | +## :wrench: Options |
| 66 | + |
| 67 | +Nothing. |
| 68 | + |
| 69 | +## :books: Further Reading |
| 70 | + |
| 71 | +- [Svelte - Docs > RUN TIME > svelte/store](https://svelte.dev/docs#run-time-svelte-store) |
| 72 | + |
| 73 | +## :mag: Implementation |
| 74 | + |
| 75 | +- [Rule source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/src/rules/require-store-callbacks-use-set-param.ts) |
| 76 | +- [Test source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/tests/src/rules/require-store-callbacks-use-set-param.ts) |
0 commit comments