diff --git a/packages/eslint-plugin-svelte/src/rules/no-unnecessary-state-wrap.ts b/packages/eslint-plugin-svelte/src/rules/no-unnecessary-state-wrap.ts index db54b7440..f89f52765 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unnecessary-state-wrap.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unnecessary-state-wrap.ts @@ -53,8 +53,12 @@ export default createRule('no-unnecessary-state-wrap', { const options = context.options[0] ?? {}; const additionalReactiveClasses = options.additionalReactiveClasses ?? []; const allowReassign = options.allowReassign ?? false; + const { globalScope } = context.sourceCode.scopeManager; + if (globalScope == null) { + return {}; + } - const referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!); + const referenceTracker = new ReferenceTracker(globalScope); const traceMap: Record> = {}; for (const reactiveClass of REACTIVE_CLASSES) { traceMap[reactiveClass] = { @@ -79,8 +83,10 @@ export default createRule('no-unnecessary-state-wrap', { }); function isReassigned(identifier: TSESTree.Identifier): boolean { - const variable = context.sourceCode.scopeManager.getDeclaredVariables(identifier.parent)[0]; - return variable.references.some((ref) => { + const references = context.sourceCode.scopeManager + .getDeclaredVariables(identifier.parent) + .flatMap((v) => v.references); + return references.some((ref) => { return ref.isWrite() && ref.identifier !== identifier; }); } diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-config.json new file mode 100644 index 000000000..e68fc5b00 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-config.json @@ -0,0 +1,7 @@ +{ + "options": [ + { + "allowReassign": true + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-input.svelte new file mode 100644 index 000000000..a59bfcf6f --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-input.svelte @@ -0,0 +1,8 @@ + + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-config.json new file mode 100644 index 000000000..e68fc5b00 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-config.json @@ -0,0 +1,7 @@ +{ + "options": [ + { + "allowReassign": true + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-input.svelte new file mode 100644 index 000000000..ec454a7bf --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-input.svelte @@ -0,0 +1,8 @@ + + + svelteSet, (v) => (svelteSet = v)} />