diff --git a/.changeset/rich-colts-nail.md b/.changeset/rich-colts-nail.md
new file mode 100644
index 000000000..51c8eea60
--- /dev/null
+++ b/.changeset/rich-colts-nail.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': minor
+---
+
+feat: added the `prefer-svelte-reactivity` rule
diff --git a/README.md b/README.md
index 9cccc33bd..c8018284f 100644
--- a/README.md
+++ b/README.md
@@ -273,6 +273,7 @@ These rules relate to possible syntax or logic errors in Svelte code:
| [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-top-level-browser-globals](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-top-level-browser-globals/) | disallow using top-level browser global variables | |
| [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/prefer-svelte-reactivity](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-svelte-reactivity/) | disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity | :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 | :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. | |
diff --git a/docs/rules.md b/docs/rules.md
index 459eb2ae4..3465a4066 100644
--- a/docs/rules.md
+++ b/docs/rules.md
@@ -30,6 +30,7 @@ These rules relate to possible syntax or logic errors in Svelte code:
| [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-top-level-browser-globals](./rules/no-top-level-browser-globals.md) | disallow using top-level browser global variables | |
| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md) | disallow unknown `style:property` | :star: |
+| [svelte/prefer-svelte-reactivity](./rules/prefer-svelte-reactivity.md) | disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity | :star: |
| [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. | |
diff --git a/docs/rules/prefer-svelte-reactivity.md b/docs/rules/prefer-svelte-reactivity.md
new file mode 100644
index 000000000..7b3fe8236
--- /dev/null
+++ b/docs/rules/prefer-svelte-reactivity.md
@@ -0,0 +1,117 @@
+---
+pageClass: 'rule-details'
+sidebarDepth: 0
+title: 'svelte/prefer-svelte-reactivity'
+description: 'disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity'
+---
+
+# svelte/prefer-svelte-reactivity
+
+> disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity
+
+- :exclamation: **_This rule has not been released yet._**
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
+## :book: Rule Details
+
+The built-in `Date`, `Map`, `Set`, `URL` and `URLSearchParams` classes are often used in frontend code, however, their properties and methods are not reactive. Because of that, Svelte provides reactive versions of these 5 builtins as part of the "svelte/reactivity" package. This rule reports usage of mutable instances of the built-in versions in Svelte code.
+
+
+
+```svelte
+
+```
+
+```js
+// In svelte.js files, exported variables are also reported
+/* eslint svelte/prefer-svelte-reactivity: "error" */
+
+/* ✗ BAD */
+
+const a = new Date(8.64e15);
+const b = new Map([
+ [1, 'one'],
+ [2, 'two']
+]);
+const c = new Set([1, 2, 1, 3, 3]);
+const d = new URL('https://svelte.dev/');
+const e = new URLSearchParams('foo=1&bar=2');
+
+export { a, b, c, d as dd };
+export default e;
+```
+
+## :wrench: Options
+
+Nothing.
+
+## :books: Further Reading
+
+- [svelte/reactivity documentation](https://svelte.dev/docs/svelte/svelte-reactivity)
+
+## :mag: Implementation
+
+- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-svelte-reactivity.ts)
+- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-svelte-reactivity.ts)
diff --git a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
index 7a08befc8..1f950a90f 100644
--- a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
+++ b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
@@ -37,6 +37,7 @@ const config: Linter.Config[] = [
'svelte/no-unused-svelte-ignore': 'error',
'svelte/no-useless-children-snippet': 'error',
'svelte/no-useless-mustaches': 'error',
+ 'svelte/prefer-svelte-reactivity': 'error',
'svelte/prefer-writable-derived': 'error',
'svelte/require-each-key': 'error',
'svelte/require-event-dispatcher-types': 'error',
diff --git a/packages/eslint-plugin-svelte/src/rule-types.ts b/packages/eslint-plugin-svelte/src/rule-types.ts
index 2fd9c7db2..45e9458da 100644
--- a/packages/eslint-plugin-svelte/src/rule-types.ts
+++ b/packages/eslint-plugin-svelte/src/rule-types.ts
@@ -316,6 +316,11 @@ export interface RuleOptions {
* @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-style-directive/
*/
'svelte/prefer-style-directive'?: Linter.RuleEntry<[]>
+ /**
+ * disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity
+ * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-svelte-reactivity/
+ */
+ 'svelte/prefer-svelte-reactivity'?: Linter.RuleEntry<[]>
/**
* Prefer using writable $derived instead of $state and $effect
* @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-writable-derived/
diff --git a/packages/eslint-plugin-svelte/src/rules/prefer-svelte-reactivity.ts b/packages/eslint-plugin-svelte/src/rules/prefer-svelte-reactivity.ts
new file mode 100644
index 000000000..be001eb70
--- /dev/null
+++ b/packages/eslint-plugin-svelte/src/rules/prefer-svelte-reactivity.ts
@@ -0,0 +1,285 @@
+import { ReferenceTracker } from '@eslint-community/eslint-utils';
+import { createRule } from '../utils/index.js';
+import type { TSESTree } from '@typescript-eslint/types';
+import { findVariable, isIn } from '../utils/ast-utils.js';
+import { getSvelteContext } from '../utils/svelte-context.js';
+
+export default createRule('prefer-svelte-reactivity', {
+ meta: {
+ docs: {
+ description:
+ 'disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity',
+ category: 'Possible Errors',
+ recommended: true
+ },
+ schema: [],
+ messages: {
+ mutableDateUsed:
+ 'Found a mutable instance of the built-in Date class. Use SvelteDate instead.',
+ mutableMapUsed: 'Found a mutable instance of the built-in Map class. Use SvelteMap instead.',
+ mutableSetUsed: 'Found a mutable instance of the built-in Set class. Use SvelteSet instead.',
+ mutableURLUsed: 'Found a mutable instance of the built-in URL class. Use SvelteURL instead.',
+ mutableURLSearchParamsUsed:
+ 'Found a mutable instance of the built-in URLSearchParams class. Use SvelteURLSearchParams instead.'
+ },
+ type: 'problem',
+ conditions: [
+ {
+ svelteVersions: ['5'],
+ svelteFileTypes: ['.svelte', '.svelte.[js|ts]']
+ }
+ ]
+ },
+ create(context) {
+ const exportedVars: TSESTree.Node[] = [];
+ return {
+ ...(getSvelteContext(context)?.svelteFileType === '.svelte.[js|ts]' && {
+ ExportNamedDeclaration(node) {
+ if (node.declaration !== null) {
+ exportedVars.push(node.declaration);
+ }
+ for (const specifier of node.specifiers) {
+ if (specifier.local.type !== 'Identifier') {
+ continue;
+ }
+ const defs = findVariable(context, specifier.local)?.defs ?? [];
+ for (const def of defs) {
+ exportedVars.push(def.node);
+ }
+ }
+ },
+ ExportDefaultDeclaration(node) {
+ if (node.declaration.type === 'Identifier') {
+ const defs = findVariable(context, node.declaration)?.defs ?? [];
+ for (const def of defs) {
+ exportedVars.push(def.node);
+ }
+ } else {
+ exportedVars.push(node.declaration);
+ }
+ }
+ }),
+ 'Program:exit'() {
+ const referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);
+ for (const { node, path } of referenceTracker.iterateGlobalReferences({
+ Date: {
+ [ReferenceTracker.CONSTRUCT]: true
+ },
+ Map: {
+ [ReferenceTracker.CONSTRUCT]: true
+ },
+ Set: {
+ [ReferenceTracker.CONSTRUCT]: true
+ },
+ URL: {
+ [ReferenceTracker.CONSTRUCT]: true
+ },
+ URLSearchParams: {
+ [ReferenceTracker.CONSTRUCT]: true
+ }
+ })) {
+ const messageId =
+ path[0] === 'Date'
+ ? 'mutableDateUsed'
+ : path[0] === 'Map'
+ ? 'mutableMapUsed'
+ : path[0] === 'Set'
+ ? 'mutableSetUsed'
+ : path[0] === 'URL'
+ ? 'mutableURLUsed'
+ : 'mutableURLSearchParamsUsed';
+ for (const exportedVar of exportedVars) {
+ if (isIn(node, exportedVar)) {
+ context.report({
+ messageId,
+ node
+ });
+ }
+ }
+ if (path[0] === 'Date' && isDateMutable(referenceTracker, node as TSESTree.Expression)) {
+ context.report({
+ messageId: 'mutableDateUsed',
+ node
+ });
+ }
+ if (path[0] === 'Map' && isMapMutable(referenceTracker, node as TSESTree.Expression)) {
+ context.report({
+ messageId: 'mutableMapUsed',
+ node
+ });
+ }
+ if (path[0] === 'Set' && isSetMutable(referenceTracker, node as TSESTree.Expression)) {
+ context.report({
+ messageId: 'mutableSetUsed',
+ node
+ });
+ }
+ if (path[0] === 'URL' && isURLMutable(referenceTracker, node as TSESTree.Expression)) {
+ context.report({
+ messageId: 'mutableURLUsed',
+ node
+ });
+ }
+ if (
+ path[0] === 'URLSearchParams' &&
+ isURLSearchParamsMutable(referenceTracker, node as TSESTree.Expression)
+ ) {
+ context.report({
+ messageId: 'mutableURLSearchParamsUsed',
+ node
+ });
+ }
+ }
+ }
+ };
+ }
+});
+
+function isDateMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {
+ return !referenceTracker
+ .iteratePropertyReferences(ctorNode, {
+ setDate: {
+ [ReferenceTracker.CALL]: true
+ },
+ setFullYear: {
+ [ReferenceTracker.CALL]: true
+ },
+ setHours: {
+ [ReferenceTracker.CALL]: true
+ },
+ setMilliseconds: {
+ [ReferenceTracker.CALL]: true
+ },
+ setMinutes: {
+ [ReferenceTracker.CALL]: true
+ },
+ setMonth: {
+ [ReferenceTracker.CALL]: true
+ },
+ setSeconds: {
+ [ReferenceTracker.CALL]: true
+ },
+ setTime: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCDate: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCFullYear: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCHours: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCMilliseconds: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCMinutes: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCMonth: {
+ [ReferenceTracker.CALL]: true
+ },
+ setUTCSeconds: {
+ [ReferenceTracker.CALL]: true
+ },
+ setYear: {
+ [ReferenceTracker.CALL]: true
+ }
+ })
+ .next().done;
+}
+
+function isMapMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {
+ return !referenceTracker
+ .iteratePropertyReferences(ctorNode, {
+ clear: {
+ [ReferenceTracker.CALL]: true
+ },
+ delete: {
+ [ReferenceTracker.CALL]: true
+ },
+ set: {
+ [ReferenceTracker.CALL]: true
+ }
+ })
+ .next().done;
+}
+
+function isSetMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {
+ return !referenceTracker
+ .iteratePropertyReferences(ctorNode, {
+ add: {
+ [ReferenceTracker.CALL]: true
+ },
+ clear: {
+ [ReferenceTracker.CALL]: true
+ },
+ delete: {
+ [ReferenceTracker.CALL]: true
+ }
+ })
+ .next().done;
+}
+
+function isURLMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {
+ for (const { node } of referenceTracker.iteratePropertyReferences(ctorNode, {
+ hash: {
+ [ReferenceTracker.READ]: true
+ },
+ host: {
+ [ReferenceTracker.READ]: true
+ },
+ hostname: {
+ [ReferenceTracker.READ]: true
+ },
+ href: {
+ [ReferenceTracker.READ]: true
+ },
+ password: {
+ [ReferenceTracker.READ]: true
+ },
+ pathname: {
+ [ReferenceTracker.READ]: true
+ },
+ port: {
+ [ReferenceTracker.READ]: true
+ },
+ protocol: {
+ [ReferenceTracker.READ]: true
+ },
+ search: {
+ [ReferenceTracker.READ]: true
+ },
+ username: {
+ [ReferenceTracker.READ]: true
+ }
+ })) {
+ if (node.parent.type === 'AssignmentExpression') {
+ return true;
+ }
+ }
+ return false;
+}
+
+function isURLSearchParamsMutable(
+ referenceTracker: ReferenceTracker,
+ ctorNode: TSESTree.Expression
+): boolean {
+ return !referenceTracker
+ .iteratePropertyReferences(ctorNode, {
+ append: {
+ [ReferenceTracker.CALL]: true
+ },
+ delete: {
+ [ReferenceTracker.CALL]: true
+ },
+ set: {
+ [ReferenceTracker.CALL]: true
+ },
+ sort: {
+ [ReferenceTracker.CALL]: true
+ }
+ })
+ .next().done;
+}
diff --git a/packages/eslint-plugin-svelte/src/utils/ast-utils.ts b/packages/eslint-plugin-svelte/src/utils/ast-utils.ts
index bff6c0951..43d9044e4 100644
--- a/packages/eslint-plugin-svelte/src/utils/ast-utils.ts
+++ b/packages/eslint-plugin-svelte/src/utils/ast-utils.ts
@@ -722,3 +722,16 @@ export function findVariableForReplacement(
return { hasConflict: false, variable };
}
+
+/**
+ * Check if one node is contained withing the subtree of another node.
+ */
+export function isIn(needle: TSESTree.Node, haystack: TSESTree.Node): boolean {
+ if (needle === haystack) {
+ return true;
+ }
+ if (needle.parent === undefined || needle.parent === null) {
+ return false;
+ }
+ return isIn(needle.parent, haystack);
+}
diff --git a/packages/eslint-plugin-svelte/src/utils/rules.ts b/packages/eslint-plugin-svelte/src/utils/rules.ts
index bc62cc8c6..fa43f58b7 100644
--- a/packages/eslint-plugin-svelte/src/utils/rules.ts
+++ b/packages/eslint-plugin-svelte/src/utils/rules.ts
@@ -62,6 +62,7 @@ import preferClassDirective from '../rules/prefer-class-directive.js';
import preferConst from '../rules/prefer-const.js';
import preferDestructuredStoreProps from '../rules/prefer-destructured-store-props.js';
import preferStyleDirective from '../rules/prefer-style-directive.js';
+import preferSvelteReactivity from '../rules/prefer-svelte-reactivity.js';
import preferWritableDerived from '../rules/prefer-writable-derived.js';
import requireEachKey from '../rules/require-each-key.js';
import requireEventDispatcherTypes from '../rules/require-event-dispatcher-types.js';
@@ -141,6 +142,7 @@ export const rules = [
preferConst,
preferDestructuredStoreProps,
preferStyleDirective,
+ preferSvelteReactivity,
preferWritableDerived,
requireEachKey,
requireEventDispatcherTypes,
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-input.svelte
new file mode 100644
index 000000000..11833e43b
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-input.svelte
new file mode 100644
index 000000000..1a64fb628
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-input.svelte
new file mode 100644
index 000000000..5dc33f13d
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-input.svelte
new file mode 100644
index 000000000..eb794f8df
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-input.svelte
new file mode 100644
index 000000000..ff3e11e6c
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-input.svelte
new file mode 100644
index 000000000..481cfda04
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-input.svelte
new file mode 100644
index 000000000..be277bc8f
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-input.svelte
new file mode 100644
index 000000000..b379006f1
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-input.svelte
new file mode 100644
index 000000000..ca160205a
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-input.svelte
new file mode 100644
index 000000000..038ba40ad
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-input.svelte
new file mode 100644
index 000000000..8d9a9cecb
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-input.svelte
new file mode 100644
index 000000000..51ac2cdba
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-input.svelte
new file mode 100644
index 000000000..2d1fd09ba
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-input.svelte
new file mode 100644
index 000000000..cb026f1dc
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-input.svelte
new file mode 100644
index 000000000..80e967356
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-input.svelte
new file mode 100644
index 000000000..73e352bc1
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-input.svelte
new file mode 100644
index 000000000..acb7f19e4
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-input.svelte
new file mode 100644
index 000000000..f0069650a
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-input.svelte
new file mode 100644
index 000000000..b397a2096
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-input.svelte
new file mode 100644
index 000000000..04dce5751
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-input.svelte
new file mode 100644
index 000000000..bbd843373
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-input.svelte
new file mode 100644
index 000000000..6d005cb30
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-input.svelte
new file mode 100644
index 000000000..254653e9c
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-input.svelte
new file mode 100644
index 000000000..0d17f2371
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-input.svelte
new file mode 100644
index 000000000..1d6a73acb
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-input.svelte
new file mode 100644
index 000000000..62da2355e
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-input.svelte
new file mode 100644
index 000000000..6905d0e00
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-input.svelte
new file mode 100644
index 000000000..23fdfbfec
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-input.svelte
new file mode 100644
index 000000000..496b29116
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-input.svelte
new file mode 100644
index 000000000..b1beb0b4e
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-input.svelte
new file mode 100644
index 000000000..04b5782f6
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-input.svelte
new file mode 100644
index 000000000..9b5a457da
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-input.svelte
new file mode 100644
index 000000000..13b9bf0f5
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-errors.yaml
new file mode 100644
index 000000000..e0715f2aa
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-input.svelte
new file mode 100644
index 000000000..982ae71bf
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-errors.yaml
new file mode 100644
index 000000000..16ae06562
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-errors.yaml
@@ -0,0 +1,29 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 1
+ column: 19
+ suggestions: null
+- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.
+ line: 2
+ column: 19
+ suggestions: null
+- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.
+ line: 3
+ column: 19
+ suggestions: null
+- message: Found a mutable instance of the built-in URLSearchParams class. Use
+ SvelteURLSearchParams instead.
+ line: 4
+ column: 19
+ suggestions: null
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 5
+ column: 19
+ suggestions: null
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 6
+ column: 19
+ suggestions: null
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 10
+ column: 26
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-input.svelte.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-input.svelte.js
new file mode 100644
index 000000000..1c902ea7a
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-input.svelte.js
@@ -0,0 +1,10 @@
+const variable1 = new Date(8.64e15);
+const variable2 = new Map([[1, "one"], [2, "two"]]);
+const variable3 = new Set([1, 2, 1, 3, 3]);
+const variable4 = new URLSearchParams("foo=1&bar=2");
+const variable5 = new URL("https://svelte.dev/");
+const variable6 = new Date(8.64e15);
+
+export {variable1, variable2, variable3, variable4, variable5, variable6 as var};
+
+export const variable7 = new Date(8.64e15);
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-errors.yaml
new file mode 100644
index 000000000..2401e0107
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 1
+ column: 19
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-input.svelte.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-input.svelte.js
new file mode 100644
index 000000000..24fb4f6f4
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-input.svelte.js
@@ -0,0 +1,3 @@
+const variable1 = new Date(8.64e15);
+
+export default variable1;
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-errors.yaml
new file mode 100644
index 000000000..8806ddea8
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 1
+ column: 16
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-input.svelte.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-input.svelte.js
new file mode 100644
index 000000000..5bc61d219
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-input.svelte.js
@@ -0,0 +1 @@
+export default new Date(8.64e15);
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-errors.yaml
new file mode 100644
index 000000000..2401e0107
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.
+ line: 1
+ column: 19
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-input.svelte.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-input.svelte.js
new file mode 100644
index 000000000..0a392488a
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-input.svelte.js
@@ -0,0 +1,3 @@
+const variable1 = new Date(8.64e15);
+
+export { variable1 as default };
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-errors.yaml
new file mode 100644
index 000000000..9290e26c4
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-input.svelte
new file mode 100644
index 000000000..076f3c718
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-errors.yaml
new file mode 100644
index 000000000..9290e26c4
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-input.svelte
new file mode 100644
index 000000000..b46d846e6
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-errors.yaml
new file mode 100644
index 000000000..9290e26c4
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-input.svelte
new file mode 100644
index 000000000..6ec9bf26c
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-errors.yaml
new file mode 100644
index 000000000..b7ff0cd9b
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-input.svelte
new file mode 100644
index 000000000..f2fe183c2
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-errors.yaml
new file mode 100644
index 000000000..b7ff0cd9b
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-input.svelte
new file mode 100644
index 000000000..2177c4bb5
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-errors.yaml
new file mode 100644
index 000000000..b7ff0cd9b
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-input.svelte
new file mode 100644
index 000000000..47221e97e
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-errors.yaml
new file mode 100644
index 000000000..74c3a6f30
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-errors.yaml
@@ -0,0 +1,5 @@
+- message: Found a mutable instance of the built-in URLSearchParams class. Use
+ SvelteURLSearchParams instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-input.svelte
new file mode 100644
index 000000000..b42d06b7f
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-errors.yaml
new file mode 100644
index 000000000..74c3a6f30
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-errors.yaml
@@ -0,0 +1,5 @@
+- message: Found a mutable instance of the built-in URLSearchParams class. Use
+ SvelteURLSearchParams instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-input.svelte
new file mode 100644
index 000000000..9c9f83cb3
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-errors.yaml
new file mode 100644
index 000000000..74c3a6f30
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-errors.yaml
@@ -0,0 +1,5 @@
+- message: Found a mutable instance of the built-in URLSearchParams class. Use
+ SvelteURLSearchParams instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-input.svelte
new file mode 100644
index 000000000..2985e1c5b
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-errors.yaml
new file mode 100644
index 000000000..74c3a6f30
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-errors.yaml
@@ -0,0 +1,5 @@
+- message: Found a mutable instance of the built-in URLSearchParams class. Use
+ SvelteURLSearchParams instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-input.svelte
new file mode 100644
index 000000000..cdc914757
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-errors.yaml
new file mode 100644
index 000000000..74c3a6f30
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-errors.yaml
@@ -0,0 +1,5 @@
+- message: Found a mutable instance of the built-in URLSearchParams class. Use
+ SvelteURLSearchParams instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-input.svelte
new file mode 100644
index 000000000..58238d557
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-input.svelte
new file mode 100644
index 000000000..7e3c2abd0
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-input.svelte
new file mode 100644
index 000000000..dd40a07cb
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-input.svelte
new file mode 100644
index 000000000..35328b235
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-input.svelte
new file mode 100644
index 000000000..b7c427074
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-input.svelte
new file mode 100644
index 000000000..ad5c5efcf
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-input.svelte
new file mode 100644
index 000000000..a047b2c66
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-input.svelte
new file mode 100644
index 000000000..6435e1d5d
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-input.svelte
new file mode 100644
index 000000000..d3e029eb4
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-input.svelte
new file mode 100644
index 000000000..b14b6b9c5
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-errors.yaml
new file mode 100644
index 000000000..a576570ef
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-errors.yaml
@@ -0,0 +1,4 @@
+- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.
+ line: 2
+ column: 20
+ suggestions: null
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-input.svelte
new file mode 100644
index 000000000..8f94e0389
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/_requirements.json
new file mode 100644
index 000000000..498661308
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/_requirements.json
@@ -0,0 +1,3 @@
+{
+ "svelte": ">=5.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-date01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-date01-input.svelte
new file mode 100644
index 000000000..0ab09e823
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-date01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-map01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-map01-input.svelte
new file mode 100644
index 000000000..5f431b8b1
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-map01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-set01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-set01-input.svelte
new file mode 100644
index 000000000..bf3379c3c
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-set01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url-search-params01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url-search-params01-input.svelte
new file mode 100644
index 000000000..8d3d4d2d2
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url-search-params01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url01-input.svelte
new file mode 100644
index 000000000..ea960e9fd
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/date01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/date01-input.svelte
new file mode 100644
index 000000000..7d801e5a6
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/date01-input.svelte
@@ -0,0 +1,40 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/map01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/map01-input.svelte
new file mode 100644
index 000000000..593d30511
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/map01-input.svelte
@@ -0,0 +1,18 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/set01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/set01-input.svelte
new file mode 100644
index 000000000..c08c6b13e
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/set01-input.svelte
@@ -0,0 +1,24 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-date01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-date01-input.svelte
new file mode 100644
index 000000000..911cb5461
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-date01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-map01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-map01-input.svelte
new file mode 100644
index 000000000..43ff00a06
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-map01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-set01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-set01-input.svelte
new file mode 100644
index 000000000..6c6728c53
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-set01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url-search-params01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url-search-params01-input.svelte
new file mode 100644
index 000000000..0f66db767
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url-search-params01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url01-input.svelte
new file mode 100644
index 000000000..014046937
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-date01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-date01-input.svelte
new file mode 100644
index 000000000..851db5e63
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-date01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-map01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-map01-input.svelte
new file mode 100644
index 000000000..32eab3dc7
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-map01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-set01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-set01-input.svelte
new file mode 100644
index 000000000..fc378f046
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-set01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url-search-params01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url-search-params01-input.svelte
new file mode 100644
index 000000000..de69ce09e
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url-search-params01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url01-input.svelte
new file mode 100644
index 000000000..eab451693
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url01-input.svelte
@@ -0,0 +1,7 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url-search-params01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url-search-params01-input.svelte
new file mode 100644
index 000000000..c791d271b
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url-search-params01-input.svelte
@@ -0,0 +1,19 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url01-input.svelte
new file mode 100644
index 000000000..b54b2b03e
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url01-input.svelte
@@ -0,0 +1,24 @@
+
+
+{variable}
diff --git a/packages/eslint-plugin-svelte/tests/src/rules/prefer-svelte-reactivity.ts b/packages/eslint-plugin-svelte/tests/src/rules/prefer-svelte-reactivity.ts
new file mode 100644
index 000000000..da146b317
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/src/rules/prefer-svelte-reactivity.ts
@@ -0,0 +1,12 @@
+import { RuleTester } from '../../utils/eslint-compat.js';
+import rule from '../../../src/rules/prefer-svelte-reactivity.js';
+import { loadTestCases } from '../../utils/utils.js';
+
+const tester = new RuleTester({
+ languageOptions: {
+ ecmaVersion: 2020,
+ sourceType: 'module'
+ }
+});
+
+tester.run('prefer-svelte-reactivity', rule as any, loadTestCases('prefer-svelte-reactivity'));