diff --git a/.changeset/warm-eagles-sing.md b/.changeset/warm-eagles-sing.md
new file mode 100644
index 000000000..8cc32575d
--- /dev/null
+++ b/.changeset/warm-eagles-sing.md
@@ -0,0 +1,5 @@
+---
+"eslint-plugin-svelte": patch
+---
+
+feat: add `svelte/require-store-reactive-access` rule
diff --git a/.stylelintignore b/.stylelintignore
index e0a593652..9a04d6db8 100644
--- a/.stylelintignore
+++ b/.stylelintignore
@@ -13,3 +13,4 @@ LICENSE
# should we ignore markdown files?
*.md
/docs-svelte-kit/
+/coverage
diff --git a/README.md b/README.md
index 22714ad4c..1415dfc3c 100644
--- a/README.md
+++ b/README.md
@@ -308,6 +308,7 @@ These rules relate to possible syntax or logic errors in Svelte code:
| [svelte/no-store-async](https://ota-meshi.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 | |
| [svelte/no-unknown-style-directive-property](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/) | disallow unknown `style:property` | :star: |
| [svelte/require-store-callbacks-use-set-param](https://ota-meshi.github.io/eslint-plugin-svelte/rules/require-store-callbacks-use-set-param/) | store callbacks must use `set` param | |
+| [svelte/require-store-reactive-access](https://ota-meshi.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. | :wrench: |
| [svelte/valid-compile](https://ota-meshi.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. | :star: |
| [svelte/valid-prop-names-in-kit-pages](https://ota-meshi.github.io/eslint-plugin-svelte/rules/valid-prop-names-in-kit-pages/) | disallow props other than data or errors in Svelte Kit page components. | |
diff --git a/docs-svelte-kit/shim/path.mjs b/docs-svelte-kit/shim/path.mjs
index ff591d4a2..de66d18fb 100644
--- a/docs-svelte-kit/shim/path.mjs
+++ b/docs-svelte-kit/shim/path.mjs
@@ -21,12 +21,44 @@ function isAbsolute() {
}
function join(...args) {
- return args.join("/")
+ return args.length ? normalize(args.join("/")) : "."
}
-const sep = "/"
+function normalize(path) {
+ let result = []
+ for (const part of path.replace(/\/+/gu, "/").split("/")) {
+ if (part === "..") {
+ if (result[0] && result[0] !== ".." && result[0] !== ".") result.shift()
+ } else if (part === "." && result.length) {
+ // noop
+ } else {
+ result.unshift(part)
+ }
+ }
+ return result.reverse().join("/")
+}
-const posix = { dirname, extname, resolve, relative, sep, isAbsolute, join }
+const sep = "/"
+const posix = {
+ dirname,
+ extname,
+ resolve,
+ relative,
+ sep,
+ isAbsolute,
+ join,
+ normalize,
+}
posix.posix = posix
-export { dirname, extname, posix, resolve, relative, sep, isAbsolute, join }
+export {
+ dirname,
+ extname,
+ posix,
+ resolve,
+ relative,
+ sep,
+ isAbsolute,
+ join,
+ normalize,
+}
export default posix
diff --git a/docs-svelte-kit/src/lib/eslint/scripts/ts-create-program.mts b/docs-svelte-kit/src/lib/eslint/scripts/ts-create-program.mts
index c3d891203..dedb52302 100644
--- a/docs-svelte-kit/src/lib/eslint/scripts/ts-create-program.mts
+++ b/docs-svelte-kit/src/lib/eslint/scripts/ts-create-program.mts
@@ -1,5 +1,6 @@
import type typescript from "typescript"
import type tsvfs from "@typescript/vfs"
+import path from "path"
type TS = typeof typescript
type TSVFS = typeof tsvfs
@@ -68,10 +69,53 @@ export async function createVirtualCompilerHost(
true,
ts,
)
+
+ // Setup svelte type definition modules
+ for (const [key, get] of Object.entries(
+ // @ts-expect-error -- ignore
+ import.meta.glob("../../../../../node_modules/svelte/**/*.d.ts", {
+ as: "raw",
+ }),
+ )) {
+ const modulePath = key.slice("../../../../..".length)
+
+ fsMap.set(
+ modulePath,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore
+ await (get as any)(),
+ )
+ }
+
const system = tsvfs.createSystem(fsMap)
const host = tsvfs.createVirtualCompilerHost(system, compilerOptions, ts)
- // eslint-disable-next-line @typescript-eslint/unbound-method -- backup original
- const original = { getSourceFile: host.compilerHost.getSourceFile }
+ const original = {
+ // eslint-disable-next-line @typescript-eslint/unbound-method -- backup original
+ getSourceFile: host.compilerHost.getSourceFile,
+ }
+ host.compilerHost.resolveModuleNames = function (
+ moduleNames,
+ containingFile,
+ ) {
+ return moduleNames.map((m) => {
+ const targetPaths: string[] = []
+ if (m.startsWith(".")) {
+ targetPaths.push(path.join(path.dirname(containingFile), m))
+ } else {
+ targetPaths.push(`/node_modules/${m}`)
+ }
+ for (const modulePath of targetPaths.flatMap((m) => [
+ `${m}.d.ts`,
+ `${m}.ts`,
+ `${m}/index.d.ts`,
+ `${m}/index.ts`,
+ ])) {
+ if (fsMap.has(modulePath)) {
+ return { resolvedFileName: modulePath }
+ }
+ }
+ return undefined
+ })
+ }
host.compilerHost.getSourceFile = function (
fileName,
languageVersionOrOptions,
diff --git a/docs/rules.md b/docs/rules.md
index bc5e7a401..075eb2911 100644
--- a/docs/rules.md
+++ b/docs/rules.md
@@ -26,6 +26,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 | |
| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md) | disallow unknown `style:property` | :star: |
| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param | |
+| [svelte/require-store-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. | :wrench: |
| [svelte/valid-compile](./rules/valid-compile.md) | disallow warnings when compiling. | :star: |
| [svelte/valid-prop-names-in-kit-pages](./rules/valid-prop-names-in-kit-pages.md) | disallow props other than data or errors in Svelte Kit page components. | |
diff --git a/docs/rules/require-store-reactive-access.md b/docs/rules/require-store-reactive-access.md
new file mode 100644
index 000000000..21262b360
--- /dev/null
+++ b/docs/rules/require-store-reactive-access.md
@@ -0,0 +1,97 @@
+---
+pageClass: "rule-details"
+sidebarDepth: 0
+title: "svelte/require-store-reactive-access"
+description: "disallow to use of the store itself as an operand. Need to use $ prefix or get function."
+---
+
+# svelte/require-store-reactive-access
+
+> disallow to use of the store itself as an operand. Need to use $ prefix or get function.
+
+- :exclamation: **_This rule has not been released yet._**
+- :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
+
+## :book: Rule Details
+
+This rule disallow to use of the store itself as an operand.
+You should access the store value using the `$` prefix or the `get` function.
+
+
+
+
+
+```svelte
+
+
+
+
{$storeValue}
+
{get(storeValue)}
+
+
+
+
+
+
+
+
+
+
+
{storeValue}
+
+
+
+
+
+
+
+
+```
+
+
+
+This rule checks the usage of store variables only if the store can be determined within a single file.
+However, when using `@typescript-eslint/parser` and full type information, this rule uses the type information to determine if the expression is a store.
+
+
+
+```ts
+// fileName: my-stores.ts
+import { writable } from "svelte/store"
+export const storeValue = writable("hello")
+```
+
+
+
+```svelte
+
+
+
+
{$storeValue}
+
+
+
{storeValue}
+```
+
+## :wrench: Options
+
+Nothing.
+
+## :mag: Implementation
+
+- [Rule source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/src/rules/require-store-reactive-access.ts)
+- [Test source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/tests/src/rules/require-store-reactive-access.ts)
diff --git a/package.json b/package.json
index 5c3b6b646..331c858c7 100644
--- a/package.json
+++ b/package.json
@@ -163,6 +163,7 @@
"stylus": "^0.59.0",
"svelte": "^3.46.1",
"svelte-adapter-ghpages": "0.0.2",
+ "svelte-i18n": "^3.4.0",
"type-coverage": "^2.22.0",
"typescript": "^4.5.2",
"vite": "^3.1.0-0",
@@ -174,7 +175,7 @@
"access": "public"
},
"typeCoverage": {
- "atLeast": 98.69,
+ "atLeast": 98.72,
"cache": true,
"detail": true,
"ignoreAsAssertion": true,
diff --git a/src/rules/indent-helpers/es.ts b/src/rules/indent-helpers/es.ts
index 5f702f4df..78d5b818a 100644
--- a/src/rules/indent-helpers/es.ts
+++ b/src/rules/indent-helpers/es.ts
@@ -17,6 +17,7 @@ import {
isSemicolonToken,
} from "eslint-utils"
import type { ESNodeListener } from "../../types-for-node"
+import { getParent } from "../../utils/ast-utils"
type NodeListener = ESNodeListener
@@ -1097,12 +1098,6 @@ export function defineVisitor(context: IndentContext): NodeListener {
}
}
-/** Get the parent node from the given node */
-function getParent(node: ESTree.Node): ESTree.Node | null {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore
- return (node as any).parent || null
-}
-
/**
* Checks whether given text is known button type
*/
diff --git a/src/rules/reference-helpers/svelte-store.ts b/src/rules/reference-helpers/svelte-store.ts
index ba58abff3..5d41a63fd 100644
--- a/src/rules/reference-helpers/svelte-store.ts
+++ b/src/rules/reference-helpers/svelte-store.ts
@@ -1,6 +1,11 @@
import type * as ESTree from "estree"
+import type { TSESTree } from "@typescript-eslint/types"
import { ReferenceTracker } from "eslint-utils"
+import type { Variable } from "eslint-scope"
import type { RuleContext } from "../../types"
+import type { TS, TSTools } from "../../utils/ts-utils"
+import { getTypeScriptTools } from "../../utils/ts-utils"
+import { findVariable, getParent } from "../../utils/ast-utils"
type StoreName = "writable" | "readable" | "derived"
@@ -30,3 +35,162 @@ export function* extractStoreReferences(
}
}
}
+
+export type StoreChecker = (
+ node: ESTree.Expression | TSESTree.Expression,
+ options?: { consistent?: boolean },
+) => boolean
+type StoreCheckerWithOptions = (
+ node: ESTree.Expression,
+ options: { consistent: boolean },
+) => boolean
+
+/**
+ * Creates a function that checks whether the given expression node is a store instance or not.
+ */
+export function createStoreChecker(context: RuleContext): StoreChecker {
+ const tools = getTypeScriptTools(context)
+ const checker = tools
+ ? createStoreCheckerForTS(tools)
+ : createStoreCheckerForES(context)
+
+ return (node, options) =>
+ checker(node as ESTree.Expression, {
+ consistent: options?.consistent ?? false,
+ })
+}
+
+/**
+ * Creates a function that checks whether the given expression node is a store instance or not, for EcmaScript.
+ */
+function createStoreCheckerForES(
+ context: RuleContext,
+): StoreCheckerWithOptions {
+ const storeVariables = new Map()
+ for (const { node } of extractStoreReferences(context)) {
+ const parent = getParent(node)
+ if (
+ !parent ||
+ parent.type !== "VariableDeclarator" ||
+ parent.id.type !== "Identifier"
+ ) {
+ continue
+ }
+ const decl = getParent(parent)
+ if (!decl || decl.type !== "VariableDeclaration") {
+ continue
+ }
+
+ const variable = findVariable(context, parent.id)
+ if (variable) {
+ storeVariables.set(variable, { const: decl.kind === "const" })
+ }
+ }
+
+ return (node, options) => {
+ if (node.type !== "Identifier" || node.name.startsWith("$")) {
+ return false
+ }
+ const variable = findVariable(context, node)
+ if (!variable) {
+ return false
+ }
+ const info = storeVariables.get(variable)
+ if (!info) {
+ return false
+ }
+ return options.consistent ? info.const : true
+ }
+}
+
+/**
+ * Creates a function that checks whether the given expression node is a store instance or not, for TypeScript.
+ */
+function createStoreCheckerForTS(tools: TSTools): StoreCheckerWithOptions {
+ const { service } = tools
+ const checker = service.program.getTypeChecker()
+ const tsNodeMap = service.esTreeNodeToTSNodeMap
+
+ return (node, options) => {
+ const tsNode = tsNodeMap.get(node)
+ if (!tsNode) {
+ return false
+ }
+ const type = checker.getTypeAtLocation(tsNode)
+
+ return isStoreType(checker.getApparentType(type))
+
+ /**
+ * Checks whether the given type is a store or not
+ */
+ function isStoreType(type: TS.Type): boolean {
+ return eachTypeCheck(type, options, (type) => {
+ const subscribe = type.getProperty("subscribe")
+ if (!subscribe) {
+ return false
+ }
+ const subscribeType = checker.getTypeOfSymbolAtLocation(
+ subscribe,
+ tsNode!,
+ )
+ return isStoreSubscribeSignatureType(subscribeType)
+ })
+ }
+
+ /**
+ * Checks whether the given type is a store's subscribe or not
+ */
+ function isStoreSubscribeSignatureType(type: TS.Type): boolean {
+ return eachTypeCheck(type, options, (type) => {
+ for (const signature of type.getCallSignatures()) {
+ if (
+ signature.parameters.length >= 2 &&
+ maybeFunctionSymbol(signature.parameters[0]) &&
+ maybeFunctionSymbol(signature.parameters[1])
+ ) {
+ return true
+ }
+ }
+ return false
+ })
+ }
+
+ /**
+ * Checks whether the given symbol maybe function param or not
+ */
+ function maybeFunctionSymbol(param: TS.Symbol): boolean {
+ const type: TS.Type | undefined = checker.getApparentType(
+ checker.getTypeOfSymbolAtLocation(param, tsNode!),
+ )
+ return maybeFunctionType(type)
+ }
+
+ /**
+ * Checks whether the given type is maybe function param or not
+ */
+ function maybeFunctionType(type: TS.Type): boolean {
+ return eachTypeCheck(type, { consistent: false }, (type) => {
+ return type.getCallSignatures().length > 0
+ })
+ }
+ }
+}
+
+/**
+ * Check the given type with the given check function.
+ * For union types, `options.consistent: true` requires all types to pass the check function.
+ * `options.consistent: false` considers a match if any type passes the check function.
+ */
+function eachTypeCheck(
+ type: TS.Type,
+ options: { consistent: boolean },
+ check: (t: TS.Type) => boolean,
+): boolean {
+ if (type.isUnion()) {
+ if (options.consistent) {
+ return type.types.every((t) => eachTypeCheck(t, options, check))
+ }
+ return type.types.some((t) => eachTypeCheck(t, options, check))
+ }
+ return check(type)
+}
diff --git a/src/rules/require-store-reactive-access.ts b/src/rules/require-store-reactive-access.ts
new file mode 100644
index 000000000..0ea2bdd3d
--- /dev/null
+++ b/src/rules/require-store-reactive-access.ts
@@ -0,0 +1,302 @@
+import type * as ESTree from "estree"
+import type { TSESTree } from "@typescript-eslint/types"
+import type { AST } from "svelte-eslint-parser"
+import { createRule } from "../utils"
+import { createStoreChecker } from "./reference-helpers/svelte-store"
+
+export default createRule("require-store-reactive-access", {
+ meta: {
+ docs: {
+ description:
+ "disallow to use of the store itself as an operand. Need to use $ prefix or get function.",
+ category: "Possible Errors",
+ // TODO Switch to recommended in the major version.
+ // recommended: true,
+ recommended: false,
+ },
+ fixable: "code",
+ schema: [],
+ messages: {
+ usingRawStoreInText:
+ "Use the $ prefix or the get function to access reactive values instead of accessing the raw store.",
+ },
+ type: "problem",
+ },
+ create(context) {
+ if (!context.parserServices.isSvelte) {
+ return {}
+ }
+ const isStore = createStoreChecker(context)
+
+ /** Verify for expression node */
+ function verifyExpression(
+ node: ESTree.Expression | null | undefined | TSESTree.Expression,
+ options?: { disableFix?: boolean; consistent?: boolean },
+ ) {
+ if (!node) return
+ if (isStore(node, { consistent: options?.consistent })) {
+ context.report({
+ node,
+ messageId: "usingRawStoreInText",
+ fix:
+ node.type === "Identifier" && !options?.disableFix
+ ? (fixer) => fixer.insertTextBefore(node, "$")
+ : null,
+ })
+ }
+ }
+
+ return {
+ SvelteMustacheTag(node) {
+ if (canAcceptStoreMustache(node)) {
+ return
+ }
+ // Check for
+ //
+ return false
+ }
+ const attr = node.parent
+ if (attr.value.length > 1) {
+ // Template attribute value
+ // e.g.
+ //
+ return false
+ }
+ if (attr.key.name.startsWith("--")) {
+ // --style-props
+ // e.g.
+ //
+ return false
+ }
+ const element = attr.parent.parent
+ return canAcceptStoreAttributeElement(element)
+ }
+
+ /**
+ * Checks whether the given element node accepts a store instance attribute.
+ */
+ function canAcceptStoreAttributeElement(
+ node:
+ | AST.SvelteElement
+ | AST.SvelteScriptElement
+ | AST.SvelteStyleElement,
+ ) {
+ if (node.type !== "SvelteElement") {
+ // Unknown. Within
+
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/attrs-store01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/attrs-store01-output.svelte
new file mode 100644
index 000000000..686be5845
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/attrs-store01-output.svelte
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/await01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/await01-errors.yaml
new file mode 100644
index 000000000..bc0dd4458
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/await01-errors.yaml
@@ -0,0 +1,6 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 32
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/await01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/await01-input.svelte
new file mode 100644
index 000000000..939ff914f
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/await01-input.svelte
@@ -0,0 +1,9 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/await01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/await01-output.svelte
new file mode 100644
index 000000000..46d31be21
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/await01-output.svelte
@@ -0,0 +1,9 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-errors.yaml
new file mode 100644
index 000000000..7c66bfdc2
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-errors.yaml
@@ -0,0 +1,108 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 8
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 9
+ column: 17
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 10
+ column: 17
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 13
+ column: 16
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 15
+ column: 16
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 17
+ column: 16
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 19
+ column: 16
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 20
+ column: 22
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 25
+ column: 3
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 26
+ column: 10
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 30
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 31
+ column: 20
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 36
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 37
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 38
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 39
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 43
+ column: 15
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-input.svelte
new file mode 100644
index 000000000..314e07445
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-input.svelte
@@ -0,0 +1,44 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-output.svelte
new file mode 100644
index 000000000..ff65a7966
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-output.svelte
@@ -0,0 +1,44 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/call01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/call01-errors.yaml
new file mode 100644
index 000000000..71e3a4fdf
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/call01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 5
+ column: 12
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 6
+ column: 12
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/call01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/call01-input.svelte
new file mode 100644
index 000000000..3488032e6
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/call01-input.svelte
@@ -0,0 +1,7 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/call01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/call01-output.svelte
new file mode 100644
index 000000000..f1d0c0792
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/call01-output.svelte
@@ -0,0 +1,7 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-errors.yaml
new file mode 100644
index 000000000..afa58b15e
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-errors.yaml
@@ -0,0 +1,18 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 5
+ column: 27
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 6
+ column: 17
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 6
+ column: 33
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-input.svelte
new file mode 100644
index 000000000..7722c04b8
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-input.svelte
@@ -0,0 +1,7 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-output.svelte
new file mode 100644
index 000000000..0af50ce75
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-output.svelte
@@ -0,0 +1,7 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-errors.yaml
new file mode 100644
index 000000000..8545649af
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-errors.yaml
@@ -0,0 +1,60 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 11
+ column: 19
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 12
+ column: 19
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 13
+ column: 12
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 14
+ column: 10
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 15
+ column: 17
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 16
+ column: 9
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 17
+ column: 10
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 19
+ column: 16
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 21
+ column: 18
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 22
+ column: 12
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-input.svelte
new file mode 100644
index 000000000..790ea8fe0
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-input.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+{#each list as e (e)}
+
+{/each}
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-output.svelte
new file mode 100644
index 000000000..ac3aca381
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-output.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+{#each list as e (e)}
+
+{/each}
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-errors.yaml
new file mode 100644
index 000000000..0426ca4ab
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 5
+ column: 19
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 8
+ column: 19
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-input.svelte
new file mode 100644
index 000000000..3d1800833
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-input.svelte
@@ -0,0 +1,11 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-output.svelte
new file mode 100644
index 000000000..3faf82d8b
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-output.svelte
@@ -0,0 +1,11 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-errors.yaml
new file mode 100644
index 000000000..0426ca4ab
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 5
+ column: 19
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 8
+ column: 19
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-input.svelte
new file mode 100644
index 000000000..2ce8648d5
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-input.svelte
@@ -0,0 +1,11 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-output.svelte
new file mode 100644
index 000000000..d4fe3c7c1
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-output.svelte
@@ -0,0 +1,11 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-errors.yaml
new file mode 100644
index 000000000..1a3338c7a
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 11
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 12
+ column: 19
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-input.svelte
new file mode 100644
index 000000000..bda8699bb
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-input.svelte
@@ -0,0 +1,13 @@
+
+
+
+{#if store}
+
+{/if}
+{#if constStore}
+
+{/if}
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-output.svelte
new file mode 100644
index 000000000..36dd0a07d
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-output.svelte
@@ -0,0 +1,13 @@
+
+
+
+{#if store}
+
+{/if}
+{#if $constStore}
+
+{/if}
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-errors.yaml
new file mode 100644
index 000000000..2b0ff1ce4
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-errors.yaml
@@ -0,0 +1,6 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 8
+ column: 7
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-input.svelte
new file mode 100644
index 000000000..655a81622
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-input.svelte
@@ -0,0 +1,11 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-output.svelte
new file mode 100644
index 000000000..662170457
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-output.svelte
@@ -0,0 +1,11 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/import01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/import01-errors.yaml
new file mode 100644
index 000000000..089425d17
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/import01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 26
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 47
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/import01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/import01-input.svelte
new file mode 100644
index 000000000..233842b65
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/import01-input.svelte
@@ -0,0 +1,9 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/import01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/import01-output.svelte
new file mode 100644
index 000000000..5801f7e6f
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/import01-output.svelte
@@ -0,0 +1,9 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-errors.yaml
new file mode 100644
index 000000000..b6550d123
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-errors.yaml
@@ -0,0 +1,36 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 8
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 11
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 13
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 15
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 19
+ column: 6
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-input.svelte
new file mode 100644
index 000000000..db28c7374
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-input.svelte
@@ -0,0 +1,23 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-output.svelte
new file mode 100644
index 000000000..d2a7cfd63
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-output.svelte
@@ -0,0 +1,23 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-errors.yaml
new file mode 100644
index 000000000..b58d91454
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-errors.yaml
@@ -0,0 +1,16 @@
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 7
+ column: 27
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 8
+ column: 25
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 9
+ column: 30
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 10
+ column: 18
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-input.svelte
new file mode 100644
index 000000000..62fe91e03
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-input.svelte
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-output.svelte
new file mode 100644
index 000000000..36ca01d19
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-output.svelte
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-errors.yaml
new file mode 100644
index 000000000..4cea0c9b9
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 6
+ column: 18
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 18
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-input.svelte
new file mode 100644
index 000000000..130e59a35
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-input.svelte
@@ -0,0 +1,8 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-output.svelte
new file mode 100644
index 000000000..9003e9dab
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-output.svelte
@@ -0,0 +1,8 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-errors.yaml
new file mode 100644
index 000000000..82cc3d06d
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-errors.yaml
@@ -0,0 +1,32 @@
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 8
+ column: 25
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 8
+ column: 49
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 9
+ column: 25
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 9
+ column: 47
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 10
+ column: 25
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 10
+ column: 52
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 11
+ column: 25
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 11
+ column: 40
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-input.svelte
new file mode 100644
index 000000000..938dd24da
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-input.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-output.svelte
new file mode 100644
index 000000000..321d1fe05
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-output.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-errors.yaml
new file mode 100644
index 000000000..b15beddf1
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-errors.yaml
@@ -0,0 +1,48 @@
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 9
+ column: 23
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 9
+ column: 41
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 10
+ column: 23
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 10
+ column: 34
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 11
+ column: 23
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 11
+ column: 29
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 12
+ column: 23
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 12
+ column: 32
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 13
+ column: 23
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 13
+ column: 39
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 14
+ column: 23
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 14
+ column: 35
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-input.svelte
new file mode 100644
index 000000000..f7aa8b98d
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-input.svelte
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-output.svelte
new file mode 100644
index 000000000..10a56ee94
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-output.svelte
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-errors.yaml
new file mode 100644
index 000000000..faa0efb16
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 5
+ column: 11
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 12
+ column: 11
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-input.svelte
new file mode 100644
index 000000000..a6e210431
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-input.svelte
@@ -0,0 +1,19 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-output.svelte
new file mode 100644
index 000000000..730c114bf
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-output.svelte
@@ -0,0 +1,19 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-errors.yaml
new file mode 100644
index 000000000..67ac1646d
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-errors.yaml
@@ -0,0 +1,12 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 6
+ column: 15
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 15
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-input.svelte
new file mode 100644
index 000000000..03ae991a1
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-input.svelte
@@ -0,0 +1,8 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-output.svelte
new file mode 100644
index 000000000..dbafd48d5
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-output.svelte
@@ -0,0 +1,8 @@
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/test01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/test01-errors.yaml
new file mode 100644
index 000000000..40d67f8ba
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/test01-errors.yaml
@@ -0,0 +1,12 @@
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 17
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 18
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 19
+ column: 5
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/test01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/test01-input.svelte
new file mode 100644
index 000000000..04b4fcc61
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/test01-input.svelte
@@ -0,0 +1,19 @@
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-errors.yaml
new file mode 100644
index 000000000..74390e8b9
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-errors.yaml
@@ -0,0 +1,18 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 7
+ column: 19
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 8
+ column: 18
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 9
+ column: 12
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-input.svelte
new file mode 100644
index 000000000..3e85bb2ea
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-input.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-output.svelte
new file mode 100644
index 000000000..fda932c8e
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-output.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-errors.yaml
new file mode 100644
index 000000000..4e8d3ea8b
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-errors.yaml
@@ -0,0 +1,6 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 5
+ column: 6
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-input.svelte
new file mode 100644
index 000000000..fcb6181c1
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-input.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-errors.yaml
new file mode 100644
index 000000000..b3911db9c
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-errors.yaml
@@ -0,0 +1,18 @@
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 9
+ column: 19
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 11
+ column: 6
+ suggestions: null
+- message:
+ Use the $ prefix or the get function to access reactive values instead
+ of accessing the raw store.
+ line: 12
+ column: 19
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-input.svelte
new file mode 100644
index 000000000..97500ecd6
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-input.svelte
@@ -0,0 +1,13 @@
+
+
+
+{#if store}
+
+{/if}
+{#if constStore}
+
+{/if}
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-output.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-output.svelte
new file mode 100644
index 000000000..d09a49a01
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-output.svelte
@@ -0,0 +1,13 @@
+
+
+
+{#if store}
+
+{/if}
+{#if $constStore}
+
+{/if}
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-errors.yaml
new file mode 100644
index 000000000..a7cd33515
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-errors.yaml
@@ -0,0 +1,24 @@
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 6
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 7
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 8
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 9
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 10
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 11
+ column: 5
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-input.svelte
new file mode 100644
index 000000000..576ba10a0
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-input.svelte
@@ -0,0 +1,11 @@
+
+
+
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-errors.yaml b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-errors.yaml
new file mode 100644
index 000000000..3e80f367d
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-errors.yaml
@@ -0,0 +1,24 @@
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 27
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 28
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 29
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 30
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 31
+ column: 5
+ suggestions: null
+- message: Use the $ prefix or the get function to access reactive values instead of accessing the raw store.
+ line: 32
+ column: 5
+ suggestions: null
diff --git a/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-input.svelte b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-input.svelte
new file mode 100644
index 000000000..3e9e82a9f
--- /dev/null
+++ b/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-input.svelte
@@ -0,0 +1,32 @@
+
+
+
+