[
  {
    "path": ".changeset/README.md",
    "content": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works\nwith multi-package repos, or single-package repos to help you version and publish your code. You can\nfind the full documentation for it [in our repository](https://github.com/changesets/changesets)\n\nWe have a quick list of common questions to get you started engaging with this project in\n[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)\n"
  },
  {
    "path": ".changeset/config.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/@changesets/config/schema.json\",\n  \"changelog\": [\n    \"@changesets/changelog-github\",\n    {\n      \"repo\": \"sveltejs/eslint-plugin-svelte\"\n    }\n  ],\n  \"commit\": false,\n  \"linked\": [],\n  \"access\": \"public\",\n  \"baseBranch\": \"main\",\n  \"updateInternalDependencies\": \"patch\",\n  \"bumpVersionsWithWorkspaceProtocolOnly\": true,\n  \"ignore\": []\n}\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the\n// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node\n{\n\t\"name\": \"Node.js & TypeScript\",\n\t// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile\n\t\"image\": \"mcr.microsoft.com/devcontainers/typescript-node:4-20-bullseye\",\n\n\t// Features to add to the dev container. More info: https://containers.dev/features.\n\t// \"features\": {},\n\n\t// Use 'forwardPorts' to make a list of ports inside the container available locally.\n\t// \"forwardPorts\": [],\n\n\t// Use 'postCreateCommand' to run commands after the container is created.\n\t\"postCreateCommand\": \"pnpm install --frozen-lockfile\",\n\n\t// Configure tool-specific properties.\n\t\"customizations\": {\n\t\t\"vscode\": {\n\t\t\t\"extensions\": [\"dbaeumer.vscode-eslint\", \"svelte.svelte-vscode\", \"esbenp.prettier-vscode\"]\n\t\t}\n\t}\n\n\t// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.\n\t// \"remoteUser\": \"root\"\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = lf\nindent_size = 2\nindent_style = tab\ntrim_trailing_whitespace = true\n\n[docs/rules/no-trailing-spaces.md]\ntrim_trailing_whitespace = false\n\n[packages/eslint-plugin-svelte/tests/fixtures/**/*-input.svelte]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".env-cmdrc.json",
    "content": "{\n\t\"version\": {\n\t\t\"IN_VERSION_SCRIPT\": \"true\"\n\t},\n\t\"version-ci\": {\n\t\t\"IN_VERSION_CI_SCRIPT\": \"true\"\n\t},\n\t\"debug\": {\n\t\t\"DEBUG\": \"eslint-plugin-svelte*\"\n\t},\n\t\"update-fixtures\": {\n\t\t\"UPDATE_FIXTURES\": \"true\"\n\t}\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto eol=lf"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\nopen_collective: svelte\ngithub: [ota-meshi, JounQin]\npatreon: 1stG\ncustom:\n  - https://opencollective.com/rxts\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: Bug report\ndescription: Create a report to help us improve.\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report!\n  - type: checkboxes\n    id: sanity-checks\n    attributes:\n      label: Before You File a Bug Report Please Confirm You Have Done The Following...\n      description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you!\n      options:\n        - label: I have tried restarting my IDE and the issue persists.\n          required: true\n        - label: I have updated to the latest version of the packages.\n          required: true\n  - type: input\n    id: eslint-version\n    attributes:\n      label: What version of ESLint are you using?\n      placeholder: 0.0.0\n    validations:\n      required: true\n  - type: input\n    id: eslint-plugin-svelte-version\n    attributes:\n      label: What version of `eslint-plugin-svelte` are you using?\n      placeholder: 0.0.0\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: What did you do?\n      description: |\n        Please include a *minimal* reproduction case.\n      value: |\n        <details>\n        <summary>Configuration</summary>\n\n        ```\n        <!-- Paste your configuration here -->\n        ```\n        </details>\n\n        ```svelte\n        <!-- Paste your code here -->\n        ```\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: What did you expect to happen?\n      description: |\n        You can use Markdown in this field.\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: What actually happened?\n      description: |\n        Please copy-paste the actual ESLint output. You can use Markdown in this field.\n    validations:\n      required: true\n  - type: textarea\n    id: bug-reproduction\n    attributes:\n      label: Link to **GitHub Repo** with Minimal Reproducible Example\n      description: |\n        Create a minimal reproduction of the problem. **A minimal reproduction is required** so that others can help debug your issue. If a report is vague (e.g. just a generic error message) and has no reproduction, it may be closed.\\\n        [Why Reproductions are Required](https://antfu.me/posts/why-reproductions-are-required)\\\n\n        Be sure to share the repo on GitHub. GitHub's repo is ready to debug using Codespace.\\\n        Please DON'T USE non-GitHub repos such as GitLab as repro.\\\n        It takes me a long time to prepare my local PC for debugging.\\\n        Please DON'T USE stackblitz as a repro.\\\n        We can't debug eslint with stackblitz.\n      placeholder: |\n        https://github.com/[your]/[repo]\n        or\n        https://eslint-online-playground.netlify.app/#[hash]\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Additional comments\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: Feature request\ndescription: Suggest a new feature.\nlabels: [enhancement]\n\nbody:\n  - type: textarea\n    attributes:\n      label: Description\n      description: |\n        A clear and concise description of the new feature.\\\n        Also give a few code examples.\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/new_rule_request.yml",
    "content": "name: New rule request\ndescription: Propose a new rule to be added.\nlabels: [enhancement, new rule]\n\nbody:\n  - type: textarea\n    attributes:\n      label: Motivation\n      description: |\n        A clear and concise description of the problem the new rule is supposed to solve.\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Description\n      description: |\n        A clear and concise description of the new rule.\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Examples\n      description: |\n        Add some examples of svelte that the rule does and does not report.\n      value: |\n        ```svelte\n        <script>\n        </script>\n\n        <!-- ✓ GOOD -->\n        <Foo />\n        <Foo />\n        <Foo />\n\n        <!-- ✗ BAD -->\n        <Foo />\n        <Foo />\n        <Foo />\n        ```\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Additional comments\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/other.md",
    "content": "---\nname: Other\nabout: An issue that doesn't fit into the other categories.\ntitle: ''\nlabels: ''\nassignees: ''\n---\n"
  },
  {
    "path": ".github/workflows/GHPages.yml",
    "content": "name: GHPages\n\non:\n  workflow_dispatch: null\n  push:\n    branches: [main]\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow one concurrent deployment\nconcurrency:\n  group: pages\n  cancel-in-progress: true\n\njobs:\n  deploy:\n    if: github.repository == 'sveltejs/eslint-plugin-svelte'\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v6\n      - name: Install And Build\n        run: |\n          pnpm install --frozen-lockfile\n          cd packages/eslint-plugin-svelte\n          pnpm run update\n          pnpm build\n          cd ../../docs-svelte-kit\n          export NODE_OPTIONS=\"--max-old-space-size=8192\"\n          pnpm build\n      - name: Setup Pages\n        uses: actions/configure-pages@v6\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v4\n        with:\n          path: ./docs-svelte-kit/build\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v4\n"
  },
  {
    "path": ".github/workflows/NodeCI.yml",
    "content": "name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\nenv:\n  project_root_path: ./packages/eslint-plugin-svelte\n\ndefaults:\n  run:\n    # Setting every runner to bash simplifies command calls;\n    #  plus, every platform supports it\n    shell: bash\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v6\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Lint eslint-plugin-svelte\n        run: |\n          pnpm run build\n          pnpm run lint\n        working-directory: ${{ env.project_root_path }}\n      - name: Lint docs-svelte-kit\n        run: |\n          pnpm run build\n          pnpm run lint\n        working-directory: ./docs-svelte-kit\n      - name: Type Coverage\n        run: pnpm run typecov\n        working-directory: ${{ env.project_root_path }}\n\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v6\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Build\n        run: |\n          pnpm run update\n          pnpm run build\n        working-directory: ${{ env.project_root_path }}\n\n  test:\n    name: 'Test for ESLint ${{ matrix.eslint }} on Node.js: ${{ matrix.node }} OS: ${{matrix.os}}'\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n        eslint: [8, 9, 10]\n        node: [20.x, 22.x, latest]\n        include:\n          # ESLint v9 and Node.js 18.x\n          - os: ubuntu-latest\n            eslint: 9\n            node: 18.x\n          # ESLint v8 and Node.js 18.x\n          - os: ubuntu-latest\n            eslint: 8\n            node: 18.x\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - name: Setup Node.js ${{ matrix.node }}\n        uses: actions/setup-node@v6\n        with:\n          node-version: ${{ matrix.node }}\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Build eslint-plugin-svelte\n        run: pnpm build\n        working-directory: ${{ env.project_root_path }}\n      # Hack: Install `eslint-plugin-svelte` is necessary for `packages/eslint-plugin-svelte/tests/src/configs` tests.\n      - name: Install eslint-plugin-svelte\n        run: pnpm install -D eslint-plugin-svelte\n        working-directory: ${{ env.project_root_path }}\n      - name: Install ESLint ${{ matrix.eslint }}\n        if: matrix.eslint != 9\n        run: pnpm install -D -w eslint@${{ matrix.eslint }}\n\n      - name: Test\n        run: pnpm test\n        working-directory: ${{ env.project_root_path }}\n\n  test-for-svelte-v4:\n    name: 'Test for Svelte v4 on Node.js: ${{ matrix.node }} OS: ${{matrix.os}}'\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n        eslint: [9]\n        node: [18, 20, 22]\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - name: Setup Node.js ${{ matrix.node }}\n        uses: actions/setup-node@v6\n        with:\n          node-version: ${{ matrix.node }}\n      - name: Install svelte@4\n        run: |\n          pnpm install -D svelte@4\n          rm -rf node_modules\n        working-directory: ${{ env.project_root_path }}\n      - name: Install ESLint ${{ matrix.eslint }}\n        run: |\n          pnpm install -D -w eslint@${{ matrix.eslint }}\n          rm -rf node_modules\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Test\n        run: pnpm run test\n        working-directory: ${{ env.project_root_path }}\n\n  test-for-svelte-v3:\n    name: Test for Svelte v3\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n        node: [18]\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - name: Setup Node.js ${{ matrix.node }}\n        uses: actions/setup-node@v6\n        with:\n          node-version: ${{ matrix.node }}\n      - name: Install svelte@3\n        run: |\n          cd ./packages/eslint-plugin-svelte\n          pnpm install -D svelte@3\n          cd ../..\n          rm -rf packages/eslint-plugin-svelte/node_modules\n          rm -rf docs-svelte-kit/node_modules\n          rm -rf node_modules\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Test\n        run: pnpm run test\n        working-directory: ${{ env.project_root_path }}\n\n  update-resources:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v6\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Update resources\n        run: pnpm run update\n        working-directory: ${{ env.project_root_path }}\n      - name: Check changes\n        run: |\n          git add --all && \\\n          git diff-index --cached HEAD --stat --exit-code\n"
  },
  {
    "path": ".github/workflows/Release.yml",
    "content": "name: Release\n\non:\n  push:\n    branches:\n      - main\n\npermissions: {}\n\njobs:\n  release:\n    permissions:\n      contents: write\n      issues: write\n      pull-requests: write\n      id-token: write\n    name: Release\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repo\n        uses: actions/checkout@v6\n        with:\n          # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits\n          fetch-depth: 0\n\n      - name: Setup pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v6\n        with:\n          node-version: 24\n      - name: Install Dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Create Release Pull Request or Publish to npm\n        id: changesets\n        uses: changesets/action@v1\n        with:\n          # this expects you to have a npm script called version that runs some logic and then calls `changeset version`.\n          version: pnpm run version:ci\n          # This expects you to have a script called release which does a build for your packages and calls changeset publish\n          publish: pnpm run release\n          commit: 'chore: release eslint-plugin-svelte'\n          title: 'chore: release eslint-plugin-svelte'\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_CONFIG_PROVENANCE: true\n"
  },
  {
    "path": ".github/workflows/pkg.pr.new-comment.yml",
    "content": "name: Update pkg.pr.new comment\n\non:\n  workflow_run:\n    workflows: ['Publish to pkg.pr.new']\n    types:\n      - completed\n\npermissions:\n  issues: write\n  pull-requests: write\n\njobs:\n  build:\n    if: github.repository == 'sveltejs/eslint-plugin-svelte'\n    name: 'Update comment'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Download artifact\n        uses: actions/download-artifact@v7\n        with:\n          name: output\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          run-id: ${{ github.event.workflow_run.id }}\n      - run: ls -R .\n      - name: 'Post or update comment'\n        uses: actions/github-script@v8\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          script: |\n            const fs = require('fs');\n            const output = JSON.parse(fs.readFileSync('output.json', 'utf8'));\n            const { default: process } = await import('${{ github.workspace }}/tools/pkg.pr.new-comment.mjs')\n\n            await process({github, context, core, output})\n"
  },
  {
    "path": ".github/workflows/pkg.pr.new.yml",
    "content": "name: Publish to pkg.pr.new\non:\n  pull_request:\n    branches: [main]\n  push:\n    branches: [main]\n    tags: ['!**']\n\njobs:\n  build:\n    if: github.repository == 'sveltejs/eslint-plugin-svelte'\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v6\n      - name: Install Packages\n        run: pnpm install --frozen-lockfile\n      - name: Build\n        run: pnpm run build\n      - run: pnpx pkg-pr-new publish --compact './packages/eslint-plugin-svelte' --json output.json --comment=off\n      - name: Add metadata to output\n        uses: actions/github-script@v8\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          script: |\n            const fs = require('fs');\n            const output = JSON.parse(fs.readFileSync('output.json', 'utf8'));\n            output.number = context.issue.number;\n            output.event_name = context.eventName;\n            output.ref = context.ref;\n            output.sha = context.eventName === 'pull_request'\n              ? context.payload.pull_request.head.sha\n              : context.payload.after;\n            fs.writeFileSync('output.json', JSON.stringify(output), 'utf8');\n      - name: Upload output\n        uses: actions/upload-artifact@v6\n        with:\n          name: output\n          path: ./output.json\n\n      - run: ls -R .\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "name: Close stale issues and PRs\non:\n  schedule:\n    - cron: '30 1 * * *'\n\npermissions:\n  issues: write\n  pull-requests: write\n\njobs:\n  stale:\n    if: github.repository == 'sveltejs/eslint-plugin-svelte'\n    name: Close stale issues with missing information\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/stale@v10\n        with:\n          any-of-labels: 'needs repro,needs info,needs more info'\n          days-before-stale: 60\n          days-before-close: 14\n          stale-issue-message: This issue is is stale because it missing information and has been open for 60 days with no activity.\n          stale-pr-message: This PR is is stale because it missing information and has been open for 60 days with no activity.\n          close-issue-message: >\n            This issue has been automatically closed because we haven't received a\n            response from the original author 🙈. This automation helps keep the issue\n            tracker clean from issues that aren't actionable. Please reach out if you\n            have more information for us! 🙂\n          close-pr-message: >\n            This PR has been automatically closed because we haven't received a\n            response from the original author 🙈. This automation helps keep the issue\n            tracker clean from PRs that aren't actionable. Please reach out if you\n            have more information for us! 🙂\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\n# typings/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint/stylelint cache, etc\n.*cache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n.env.test\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# Next.js build output\n.next\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and *not* Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n\n## repo\npackages/eslint-plugin-svelte/lib\npackages/eslint-plugin-svelte/.type-coverage\n\ndocs-svelte-kit/.svelte-kit\ndocs-svelte-kit/build\n/svelte.config-dist.js\n/docs-svelte-kit/shim/eslint.mjs\n/docs-svelte-kit/shim/assert.mjs\n/docs-svelte-kit/src/routes/*.md\n/docs-svelte-kit/src/routes/**/*.md\npackages/eslint-plugin-svelte/README.md\n\n**/.DS_Store\n"
  },
  {
    "path": ".npmrc",
    "content": "enable-pre-post-scripts=true\n"
  },
  {
    "path": ".prettierignore",
    "content": ".svelte-kit\n.type-coverage\nbuild\n/lib\n.npmrc\n/tests/fixtures/rules/indent/valid/\n.changeset\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n\t\"recommendations\": [\"rvest.vs-code-prettier-eslint\"]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t\"eslint.validate\": [\"javascript\", \"typescript\", \"markdown\", \"svelte\", \"json\", \"jsonc\", \"yaml\"],\n\t\"editor.formatOnSave\": true,\n\t\"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n\t\"editor.codeActionsOnSave\": {\n\t\t\"source.fixAll\": \"explicit\",\n\t\t\"source.fixAll.stylelint\": \"explicit\"\n\t},\n\t\"svelte.plugin.typescript.diagnostics.enable\": false,\n\t\"typescript.tsdk\": \"node_modules/typescript/lib\",\n\t\"[typescript]\": {\n\t\t\"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n\t},\n\t\"files.eol\": \"\\n\"\n}\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThank you for contributing!\n\n## Installation\n\n```sh\ngit clone https://github.com/sveltejs/eslint-plugin-svelte.git\ncd eslint-plugin-svelte\npnpm install\n```\n\n## Running Tests\n\n```sh\ncd packages/eslint-plugin-svelte\npnpm run test\n```\n\nThis is an [ESLint](http://eslint.org) plugin. See ESLint's [Working with Plugins](http://eslint.org/docs/developer-guide/working-with-plugins) for API details.\n\nThe plugin lints itself. Running `pnpm run lint` checks the style and will fail the build if there are lint errors. Use `pnpm run lint-fix` to automatically fix some issues.\n\n## Other Development Tools\n\n- `pnpm run test` – runs tests.\n- `pnpm run new -- [new-rule-name]` – generates files for a new rule.\n- `pnpm run update` – updates the README and recommended configuration.\n\n## Rule Testing\n\nRule tests typically use fixtures. For example, for the `indent` rule, the test file is `tests/src/rules/indent.ts` and the fixtures are in `tests/fixtures/rules/indent`, which contains `invalid` and `valid` directories.\n\n- The `invalid` directory contains test cases where the rule should report errors.\n- The `valid` directory contains test cases where no errors are reported.\n\nFixture input files should be named `*-input.svelte` and are automatically collected.\\\nIf configuration is needed, include a JSON file:\n\n- For a specific test file (e.g., `my-test-input.svelte`), add `my-test-config.json`.\n- For all fixtures in a directory, add `_config.json`.\n\nVerifying output for invalid tests requires `*-errors.json` and `*-output.svelte` (for auto-fix). These files are auto-generated if missing—delete them to recreate.\n\n**Tips**:\n\nTo test only one rule (e.g., `indent`), run:\n\n```sh\npnpm run test -- -g indent\n```\n\nRefer to [this Stack Overflow post](https://stackoverflow.com/questions/10832031/how-to-run-a-single-test-with-mocha) for details.\n\nTo test a single file (e.g., `my-test-input.svelte`), add a `my-test-config.json` with `{\"only\": true}`.\n(Remember to remove `{\"only\": true}` before submitting a pull request.)\n\n## Preview Docs\n\n```sh\ncd docs-svelte-kit\npnpm run build && pnpm run preview\n```\n\n## Publishing\n\nWe use [changesets](https://github.com/changesets/changesets) for version management, changelog generation, and automated releases.\n\nFor more details, see [changesets-bot](https://github.com/apps/changeset-bot) and its [action](https://github.com/changesets/action).\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 Yosuke Ota\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<!--DOCS_IGNORE_START-->\n\n[![NPM license](https://img.shields.io/npm/l/eslint-plugin-svelte.svg)](https://www.npmjs.com/package/eslint-plugin-svelte)\n[![NPM version](https://img.shields.io/npm/v/eslint-plugin-svelte.svg)](https://www.npmjs.com/package/eslint-plugin-svelte)\n[![NPM downloads](https://img.shields.io/badge/dynamic/json.svg?label=downloads&colorB=green&suffix=/day&query=$.downloads&uri=https://api.npmjs.org//downloads/point/last-day/eslint-plugin-svelte&maxAge=3600)](http://www.npmtrends.com/eslint-plugin-svelte)\n[![NPM downloads](https://img.shields.io/npm/dw/eslint-plugin-svelte.svg)](http://www.npmtrends.com/eslint-plugin-svelte)\n[![NPM downloads](https://img.shields.io/npm/dm/eslint-plugin-svelte.svg)](http://www.npmtrends.com/eslint-plugin-svelte)\n[![NPM downloads](https://img.shields.io/npm/dy/eslint-plugin-svelte.svg)](http://www.npmtrends.com/eslint-plugin-svelte)\n[![NPM downloads](https://img.shields.io/npm/dt/eslint-plugin-svelte.svg)](http://www.npmtrends.com/eslint-plugin-svelte)\n[![Build Status](https://github.com/sveltejs/eslint-plugin-svelte/workflows/CI/badge.svg?branch=main)](https://github.com/sveltejs/eslint-plugin-svelte/actions?query=workflow%3ACI)\n\n[![type-coverage](https://img.shields.io/badge/dynamic/json.svg?label=type-coverage&prefix=%E2%89%A5&suffix=%&query=$.typeCoverage.atLeast&uri=https%3A%2F%2Fraw.githubusercontent.com%2Fsveltejs%2Feslint-plugin-svelte%2Fmain%2Fpackage.json)](https://github.com/plantain-00/type-coverage)\n[![Conventional Commits](https://img.shields.io/badge/conventional%20commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n[![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![changesets](https://img.shields.io/badge/maintained%20with-changesets-176de3.svg)](https://github.com/atlassian/changesets)\n\n<div align=\"center\">\n\n# eslint-plugin-svelte\n\n## ESLint plugin for Svelte using AST\n\n[Live Demo](https://eslint-online-playground.netlify.app/#eslint-plugin-svelte%20with%20typescript) •\n[Documentation](https://sveltejs.github.io/eslint-plugin-svelte/) •\n[Discord](https://svelte.dev/chat)\n\n</div>\n\n<!--DOCS_IGNORE_END-->\n\n## Introduction\n\n`eslint-plugin-svelte` is the official [ESLint](https://eslint.org/) plugin for [Svelte](https://svelte.dev/).\\\nIt leverages the AST generated by [svelte-eslint-parser](https://github.com/sveltejs/svelte-eslint-parser) to provide custom linting for Svelte.\\\n\n> [!NOTE]\n>\n> `eslint-plugin-svelte` and `svelte-eslint-parser` cannot be used alongside [eslint-plugin-svelte3](https://github.com/sveltejs/eslint-plugin-svelte3).\n\n<!--USAGE_SECTION_START-->\n<!--USAGE_GUIDE_START-->\n\n## Installation\n\n### CLI\n\nThe recommended way to get started is to use the CLI.\n\n```sh\n# new project\nnpx sv create\n\n# existing project\nnpx sv add eslint\n```\n\nSee the [CLI docs](https://svelte.dev/docs/cli/eslint) for more details.\n\n### Manual Setup\n\n```sh\nnpm install --save-dev svelte eslint eslint-plugin-svelte globals\n```\n\n> [!NOTE]\n>\n> **Requirements:**\n>\n> - ESLint v8.57.1, v9.0.0, and above\n> - Node.js v18.18.0, v20.9.0, v21.1.0 and above\n\n## Usage\n\nUse `eslint.config.js` to configure rules. See [ESLint documentation](https://eslint.org/docs/latest/use/configure/configuration-files-new) for more details.\n\n### Configuration\n\n#### JavaScript project\n\n```js\n// eslint.config.js\nimport svelteConfig from './svelte.config.js';\nimport { defineConfig } from 'eslint/config';\nimport globals from 'globals';\nimport js from '@eslint/js';\nimport svelte from 'eslint-plugin-svelte';\n\nexport default defineConfig([\n  // ...\n  js.configs.recommended,\n  svelte.configs.recommended,\n  {\n    languageOptions: {\n      globals: {\n        ...globals.browser,\n        // for Sveltekit in non-SPA mode\n        ...globals.node\n      }\n    }\n  },\n  {\n    files: ['**/*.svelte', '**/*.svelte.js'],\n    languageOptions: {\n      parserOptions: {\n        // explicitly importing allows for better compatibilty and functionality with rules and other tooling that depend on the config file.\n        //\n        // Note: `eslint --cache` will fail with non-serializable properties.\n        // In those cases, please remove the non-serializable properties.\n        // svelteConfig: {\n        //   ...svelteConfig,\n        //   kit: {\n        //     ...svelteConfig.kit,\n        //     typescript: undefined\n        //   }\n        // }\n        svelteConfig\n      }\n    }\n  },\n  {\n    rules: {\n      // Override or add rule settings here, such as:\n      // 'svelte/rule-name': 'error'\n    }\n  }\n]);\n```\n\n#### TypeScript project\n\n```shell\nnpm install --save-dev typescript-eslint\n```\n\n```js\n// eslint.config.js\nimport svelteConfig from './svelte.config.js';\nimport { defineConfig } from 'eslint/config';\nimport globals from 'globals';\nimport js from '@eslint/js';\nimport ts from 'typescript-eslint';\nimport svelte from 'eslint-plugin-svelte';\n\nexport default defineConfig(\n  js.configs.recommended,\n  ts.configs.recommended,\n  svelte.configs.recommended,\n  {\n    languageOptions: {\n      globals: {\n        ...globals.browser,\n        // for Sveltekit in non-SPA mode\n        ...globals.node\n      }\n    }\n    // ...\n  },\n  {\n    files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],\n    // See more details at: https://typescript-eslint.io/packages/parser/\n    languageOptions: {\n      parserOptions: {\n        projectService: true,\n        // Enable typescript parsing for `.svelte` files.\n        extraFileExtensions: ['.svelte'],\n\n        // Specify a parser for each language, if needed:\n        // parser: {\n        //   ts: ts.parser,\n        //   typescript: ts.parser\n        //   js: espree,            // add `import espree from 'espree'`\n        // },\n        parser: ts.parser,\n\n        // explicitly importing allows for better compatibilty and functionality with rules and other tooling that depend on the config file.\n        //\n        // Note: `eslint --cache` will fail with non-serializable properties.\n        // In those cases, please remove the non-serializable properties.\n        // svelteConfig: {\n        //   ...svelteConfig,\n        //   kit: {\n        //     ...svelteConfig.kit,\n        //     typescript: undefined\n        //   }\n        // }\n        svelteConfig\n      }\n    }\n  },\n  {\n    rules: {\n      // Override or add rule settings here, such as:\n      // 'svelte/rule-name': 'error'\n    }\n  }\n);\n```\n\n> [!WARNING]\n> The TypeScript parser uses a singleton internally, meaning it only respects the options provided during its initial initialization.\n> If you try to change the options for a different file or override them later, the parser will ignore the new options, which may lead to errors.\n> For more context, see [typescript-eslint/typescript-eslint#6778](https://github.com/typescript-eslint/typescript-eslint/issues/6778).\n\n### Available Configurations\n\nThis plugin provides the following configurations:\n\n- **`svelte.configs.base`** - **Required** for Svelte parsing. Does not include any rules. Ideal for building a custom configurations.\n- **`svelte.configs.recommended`** - Extends `base` and includes rules for best practices.\n- **`svelte.configs.prettier`** - Extends `base` and disables rules that may conflict with [Prettier](https://prettier.io/). Prettier still needs to be configured to work with Svelte, for example, by using [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte).\n- **`svelte.configs.all`** - **Not Recommended** - Extends `base` and includes all rules. Subject to change with every major and minor release. Use at your own risk.\n\nFor more details, see [the rule list](https://sveltejs.github.io/eslint-plugin-svelte/rules/) to explore the rules provided by this plugin.\n\n### settings.svelte\n\nYou can customize the behavior of this plugin using specific settings.\n\n```js\n// eslint.config.js\nexport default defineConfig([\n  // ...\n  {\n    settings: {\n      svelte: {\n        // Specifies an array of rules to ignore reports within the template.\n        // For example, use this to disable rules in the template that may produce unavoidable false positives.\n        ignoreWarnings: [\n          '@typescript-eslint/no-unsafe-assignment',\n          '@typescript-eslint/no-unsafe-member-access'\n        ],\n\n        // Specifies options for Svelte compilation.\n        // This affects rules that rely on Svelte compilation,\n        // such as `svelte/valid-compile` and `svelte/no-unused-svelte-ignore`.\n        // Note that this setting does not impact ESLint’s custom parser.\n        compileOptions: {\n          // Specifies options related to PostCSS. You can disable the PostCSS processing by setting it to false.\n          postcss: {\n            // Specifies the path to the directory that contains the PostCSS configuration.\n            configFilePath: './path/to/my/postcss.config.js'\n          }\n        },\n\n        // Even if settings.svelte.kit is not specified, the rules will attempt to load information from svelte.config.js.\n        // However, if the default behavior does not work as expected, you should specify settings.svelte.kit explicitly.\n        // If you are using SvelteKit with a non-default configuration, you need to set the following options.\n        // The schema is a subset of SvelteKit’s configuration, so refer to the SvelteKit documentation for more details.\n        // https://svelte.dev/docs/kit/configuration\n        kit: {\n          files: {\n            routes: 'src/routes'\n          }\n        }\n      }\n    }\n  }\n  // ...\n]);\n```\n\n## Editor Integrations\n\n**Visual Studio Code**\\\nInstall [dbaeumer.vscode-eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint).\\\nConfigure `.svelte` files in `.vscode/settings.json`:\n\n<!--USAGE_GUIDE_END-->\n<!--USAGE_SECTION_END-->\n\n## Migration Guide\n\nIf you’re migrating from `eslint-plugin-svelte@1` or [`@ota-meshi/eslint-plugin-svelte`](https://www.npmjs.com/package/@ota-meshi/eslint-plugin-svelte), see the [migration guide](https://sveltejs.github.io/eslint-plugin-svelte/migration/).\n\n## Versioning Policy\n\nThis project follows [Semantic Versioning](https://semver.org/). Unlike [ESLint’s versioning policy](https://github.com/eslint/eslint#semantic-versioning-policy), new rules may be added to the recommended config in minor releases. If these rules cause unwanted warnings, you can disable them.\n\n<!--DOCS_IGNORE_END-->\n\n## Rules\n\n<!-- prettier-ignore-start -->\n<!--RULES_SECTION_START-->\n\n:wrench: Indicates that the rule is fixable, and using `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the reported problems.\\\n:bulb: Indicates that some problems reported by the rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\\\n:star: Indicates that the rule is included in the `plugin:svelte/recommended` config.\n\n<!--RULES_TABLE_START-->\n\n## Possible Errors\n\nThese rules relate to possible syntax or logic errors in Svelte code:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/infinite-reactive-loop](https://sveltejs.github.io/eslint-plugin-svelte/rules/infinite-reactive-loop/) | Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent. | :star: |\n| [svelte/no-dom-manipulating](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dom-manipulating/) | disallow DOM manipulating | :star: |\n| [svelte/no-dupe-else-if-blocks](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-else-if-blocks/) | disallow duplicate conditions in `{#if}` / `{:else if}` chains | :star: |\n| [svelte/no-dupe-on-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-on-directives/) | disallow duplicate `on:` directives | :star: |\n| [svelte/no-dupe-style-properties](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-style-properties/) | disallow duplicate style properties | :star: |\n| [svelte/no-dupe-use-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-use-directives/) | disallow duplicate `use:` directives | :star: |\n| [svelte/no-not-function-handler](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-not-function-handler/) | disallow use of not function in event handler | :star: |\n| [svelte/no-object-in-text-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-object-in-text-mustaches/) | disallow objects in text mustache interpolation | :star: |\n| [svelte/no-raw-special-elements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-raw-special-elements/) | Checks for invalid raw HTML elements | :star::wrench: |\n| [svelte/no-reactive-reassign](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-reassign/) | disallow reassigning reactive values | :star: |\n| [svelte/no-shorthand-style-property-overrides](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-shorthand-style-property-overrides/) | disallow shorthand style properties that override related longhand properties | :star: |\n| [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: |\n| [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 |  |\n| [svelte/no-unknown-style-directive-property](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/) | disallow unknown `style:property` | :star: |\n| [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: |\n| [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: |\n| [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: |\n| [svelte/valid-compile](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. |  |\n| [svelte/valid-style-parse](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-style-parse/) | require valid style element parsing |  |\n\n## Security Vulnerability\n\nThese rules relate to security vulnerabilities in Svelte code:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/no-at-html-tags](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-html-tags/) | disallow use of `{@html}` to prevent XSS attack | :star: |\n| [svelte/no-target-blank](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-target-blank/) | disallow `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"` |  |\n\n## Best Practices\n\nThese rules relate to better ways of doing things to help you avoid problems:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/block-lang](https://sveltejs.github.io/eslint-plugin-svelte/rules/block-lang/) | disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks. | :bulb: |\n| [svelte/button-has-type](https://sveltejs.github.io/eslint-plugin-svelte/rules/button-has-type/) | disallow usage of button without an explicit type attribute |  |\n| [svelte/no-add-event-listener](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-add-event-listener/) | Warns against the use of `addEventListener` | :bulb: |\n| [svelte/no-at-debug-tags](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-debug-tags/) | disallow the use of `{@debug}` | :star::bulb: |\n| [svelte/no-ignored-unsubscribe](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-ignored-unsubscribe/) | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores. |  |\n| [svelte/no-immutable-reactive-statements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-immutable-reactive-statements/) | disallow reactive statements that don't reference reactive values. | :star: |\n| [svelte/no-inline-styles](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inline-styles/) | disallow attributes and directives that produce inline styles |  |\n| [svelte/no-inspect](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inspect/) | Warns against the use of `$inspect` directive | :star: |\n| [svelte/no-reactive-functions](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-functions/) | it's not necessary to define functions in reactive statements | :star::bulb: |\n| [svelte/no-reactive-literals](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-literals/) | don't assign literal values in reactive statements | :star::bulb: |\n| [svelte/no-svelte-internal](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-svelte-internal/) | svelte/internal will be removed in Svelte 6. | :star: |\n| [svelte/no-unnecessary-state-wrap](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unnecessary-state-wrap/) | Disallow unnecessary $state wrapping of reactive classes | :star::bulb: |\n| [svelte/no-unused-class-name](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-class-name/) | disallow the use of a class in the template without a corresponding style |  |\n| [svelte/no-unused-props](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-props/) | Warns about defined Props properties that are unused | :star: |\n| [svelte/no-unused-svelte-ignore](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-svelte-ignore/) | disallow unused svelte-ignore comments | :star: |\n| [svelte/no-useless-children-snippet](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-children-snippet/) | disallow explicit children snippet where it's not needed | :star: |\n| [svelte/no-useless-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/) | disallow unnecessary mustache interpolations | :star::wrench: |\n| [svelte/prefer-const](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-const/) | Require `const` declarations for variables that are never reassigned after declared | :wrench: |\n| [svelte/prefer-destructured-store-props](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-destructured-store-props/) | destructure values from object stores for better change tracking & fewer redraws | :bulb: |\n| [svelte/prefer-writable-derived](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-writable-derived/) | Prefer using writable $derived instead of $state and $effect | :star::bulb: |\n| [svelte/require-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/) | require keyed `{#each}` block | :star: |\n| [svelte/require-event-dispatcher-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/) | require type parameters for `createEventDispatcher` | :star: |\n| [svelte/require-optimized-style-attribute](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-optimized-style-attribute/) | require style attributes that can be optimized |  |\n| [svelte/require-stores-init](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/) | require initial value in store |  |\n| [svelte/valid-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-each-key/) | enforce keys to use variables defined in the `{#each}` block | :star: |\n\n## Stylistic Issues\n\nThese rules relate to style guidelines, and are therefore quite subjective:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/consistent-selector-style](https://sveltejs.github.io/eslint-plugin-svelte/rules/consistent-selector-style/) | enforce a consistent style for CSS selectors |  |\n| [svelte/derived-has-same-inputs-outputs](https://sveltejs.github.io/eslint-plugin-svelte/rules/derived-has-same-inputs-outputs/) | derived store should use same variable names between values and callback | :bulb: |\n| [svelte/first-attribute-linebreak](https://sveltejs.github.io/eslint-plugin-svelte/rules/first-attribute-linebreak/) | enforce the location of first attribute | :wrench: |\n| [svelte/html-closing-bracket-new-line](https://sveltejs.github.io/eslint-plugin-svelte/rules/html-closing-bracket-new-line/) | Require or disallow a line break before tag's closing brackets | :wrench: |\n| [svelte/html-closing-bracket-spacing](https://sveltejs.github.io/eslint-plugin-svelte/rules/html-closing-bracket-spacing/) | require or disallow a space before tag's closing brackets | :wrench: |\n| [svelte/html-quotes](https://sveltejs.github.io/eslint-plugin-svelte/rules/html-quotes/) | enforce quotes style of HTML attributes | :wrench: |\n| [svelte/html-self-closing](https://sveltejs.github.io/eslint-plugin-svelte/rules/html-self-closing/) | enforce self-closing style | :wrench: |\n| [svelte/indent](https://sveltejs.github.io/eslint-plugin-svelte/rules/indent/) | enforce consistent indentation | :wrench: |\n| [svelte/max-attributes-per-line](https://sveltejs.github.io/eslint-plugin-svelte/rules/max-attributes-per-line/) | enforce the maximum number of attributes per line | :wrench: |\n| [svelte/max-lines-per-block](https://sveltejs.github.io/eslint-plugin-svelte/rules/max-lines-per-block/) | enforce maximum number of lines in svelte component blocks |  |\n| [svelte/mustache-spacing](https://sveltejs.github.io/eslint-plugin-svelte/rules/mustache-spacing/) | enforce unified spacing in mustache | :wrench: |\n| [svelte/no-extra-reactive-curlies](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-extra-reactive-curlies/) | disallow wrapping single reactive statements in curly braces | :bulb: |\n| [svelte/no-restricted-html-elements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-restricted-html-elements/) | disallow specific HTML elements |  |\n| [svelte/no-spaces-around-equal-signs-in-attribute](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-spaces-around-equal-signs-in-attribute/) | disallow spaces around equal signs in attribute | :wrench: |\n| [svelte/prefer-class-directive](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-class-directive/) | require class directives instead of ternary expressions | :wrench: |\n| [svelte/prefer-style-directive](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-style-directive/) | require style directives instead of style attribute | :wrench: |\n| [svelte/require-event-prefix](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-prefix/) | require component event names to start with \"on\" |  |\n| [svelte/shorthand-attribute](https://sveltejs.github.io/eslint-plugin-svelte/rules/shorthand-attribute/) | enforce use of shorthand syntax in attribute | :wrench: |\n| [svelte/shorthand-directive](https://sveltejs.github.io/eslint-plugin-svelte/rules/shorthand-directive/) | enforce use of shorthand syntax in directives | :wrench: |\n| [svelte/sort-attributes](https://sveltejs.github.io/eslint-plugin-svelte/rules/sort-attributes/) | enforce order of attributes | :wrench: |\n| [svelte/spaced-html-comment](https://sveltejs.github.io/eslint-plugin-svelte/rules/spaced-html-comment/) | enforce consistent spacing after the `<!--` and before the `-->` in a HTML comment | :wrench: |\n\n## Extension Rules\n\nThese rules extend the rules provided by ESLint itself, or other plugins to work well in Svelte:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/no-inner-declarations](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inner-declarations/) | disallow variable or `function` declarations in nested blocks | :star: |\n| [svelte/no-trailing-spaces](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-trailing-spaces/) | disallow trailing whitespace at the end of lines | :wrench: |\n\n## SvelteKit\n\nThese rules relate to SvelteKit and its best Practices.\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/no-export-load-in-svelte-module-in-kit-pages](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-export-load-in-svelte-module-in-kit-pages/) | disallow exporting load functions in `*.svelte` module in SvelteKit page components. | :star: |\n| [svelte/no-navigation-without-resolve](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-resolve/) | disallow internal navigation (links, `goto()`, `pushState()`, `replaceState()`) without a `resolve()` | :star: |\n| [svelte/valid-prop-names-in-kit-pages](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-prop-names-in-kit-pages/) | disallow props other than data or errors in SvelteKit page components. | :star: |\n\n## Experimental\n\n:warning: These rules are considered experimental and may change or be removed in the future:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/experimental-require-slot-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/experimental-require-slot-types/) | require slot type declaration using the `$$Slots` interface |  |\n| [svelte/experimental-require-strict-events](https://sveltejs.github.io/eslint-plugin-svelte/rules/experimental-require-strict-events/) | require the strictEvents attribute on `<script>` tags |  |\n\n## System\n\nThese rules relate to this plugin works:\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n| [svelte/comment-directive](https://sveltejs.github.io/eslint-plugin-svelte/rules/comment-directive/) | support comment-directives in HTML template | :star: |\n| [svelte/system](https://sveltejs.github.io/eslint-plugin-svelte/rules/system/) | system rule for working this plugin | :star: |\n\n## Deprecated\n\n- :warning: We're going to remove deprecated rules in the next major release. Please migrate to successor/new rules.\n- :innocent: We don't fix bugs which are in deprecated rules since we don't have enough resources.\n\n| Rule ID | Replaced by |\n|:--------|:------------|\n| [svelte/@typescript-eslint/no-unnecessary-condition](https://sveltejs.github.io/eslint-plugin-svelte/rules/@typescript-eslint/no-unnecessary-condition/) | This rule is no longer needed when using svelte-eslint-parser>=v0.19.0. |\n| [svelte/no-dynamic-slot-name](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dynamic-slot-name/) | Now Svelte compiler itself throws an compile error. |\n| [svelte/no-goto-without-base](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-goto-without-base/) | [svelte/no-navigation-without-resolve](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-resolve/) |\n| [svelte/no-navigation-without-base](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-base/) | [svelte/no-navigation-without-resolve](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-resolve/) |\n\n<!--RULES_TABLE_END-->\n<!--RULES_SECTION_END-->\n<!-- prettier-ignore-end -->\n\n<!--DOCS_IGNORE_START-->\n\n## Contributing\n\nContributions are welcome! Please open an issue or submit a PR. For more details, see [CONTRIBUTING.md](./CONTRIBUTING.md).\\\nRefer to [svelte-eslint-parser](https://github.com/sveltejs/svelte-eslint-parser) for AST details.\n\n<!--DOCS_IGNORE_END-->\n\n## License\n\nSee [LICENSE](LICENSE) (MIT).\n"
  },
  {
    "path": "docs/README.md",
    "content": "---\ntitle: 'eslint-plugin-svelte'\n---\n\n## Introduction\n\n`eslint-plugin-svelte` is the official [ESLint](https://eslint.org/) plugin for [Svelte](https://svelte.dev/).\\\nIt leverages the AST generated by [svelte-eslint-parser](https://github.com/sveltejs/svelte-eslint-parser) to provide custom linting for Svelte.\\\n\n> [!NOTE]\n>\n> `eslint-plugin-svelte` and `svelte-eslint-parser` cannot be used alongside [eslint-plugin-svelte3](https://github.com/sveltejs/eslint-plugin-svelte3).\n\nSee [User Guide](./user-guide.md).\n\n## Migration Guide\n\nIf you’re migrating from `eslint-plugin-svelte@1` or [`@ota-meshi/eslint-plugin-svelte`](https://www.npmjs.com/package/@ota-meshi/eslint-plugin-svelte), see the [migration guide](./migration.md).\n\n## Versioning Policy\n\nThis project follows [Semantic Versioning](https://semver.org/). Unlike [ESLint’s versioning policy](https://github.com/eslint/eslint#semantic-versioning-policy), new rules may be added to the recommended config in minor releases. If these rules cause unwanted warnings, you can disable them.\n\n<!--DOCS_IGNORE_END-->\n\n## Rules\n\n<!-- prettier-ignore-start -->\nSee [Available Rules](./rules.md).\n<!-- prettier-ignore-end -->\n\n## License\n\nSee [LICENSE](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/LICENSE) (MIT).\n"
  },
  {
    "path": "docs/migration.md",
    "content": "# Migration Guide\n\n## From `eslint-plugin-svelte3`\n\nYou can not use both `eslint-plugin-svelte3` and `eslint-plugin-svelte` at same time.\nSo before start to use this plugin, you need to remove `eslint-plugin-svelte3`'s stuff from both `package.json` and `.eslintrc.*`.\n\n> Note: If you want to know difference between `eslint-plugin-svelte` and `eslint-plugin-svelte3`, Please read the reason for deprecating `eslint-plugin-svelte3` in [eslint-plugin-svelte3 README](https://github.com/sveltejs/eslint-plugin-svelte3/blob/master/README.md).\n\n> Note: If you're using TypeScript, maybe you get `Parsing error: \"parserOptions.project\" has been set for @typescript-eslint/parser.` error at some configuration files.<br>In this case, please refer [this GitHub comment](https://github.com/typescript-eslint/typescript-eslint/issues/1723#issuecomment-626766041) to solve it.\n\n## From `eslint-plugin-svelte` v1 To v2\n\n`eslint-plugin-svelte` v1 was an alias for [eslint-plugin-svelte3], but `eslint-plugin-svelte` v2 is now an independent eslint-plugin.\n\nIf you want the previous behavior, replace it with [eslint-plugin-svelte3].\n\n[eslint-plugin-svelte3]: https://github.com/sveltejs/eslint-plugin-svelte3\n\n## From `@ota-meshi/eslint-plugin-svelte`\n\n`@ota-meshi/eslint-plugin-svelte` has been renamed to `eslint-plugin-svelte`.\\\nTherefore, you need to replace the package name, and the presets, rules, and settings specified in the configuration.\n\n- `package.json`\\\n  Replace the package name.\n\n  ```diff\n  -  \"@ota-meshi/eslint-plugin-svelte\": \"^0.X.X\"\n  +  \"eslint-plugin-svelte\": \"^X.X.X\"\n  ```\n\n- `.eslintrc.*`\\\n  Replace `@ota-meshi/svelte` with `svelte` as a string.\\\n  Examples:\n\n  - Presets\n\n    ```diff\n      \"extends\": [\n    -    \"plugin:@ota-meshi/svelte/recommended\"\n    +    \"plugin:svelte/recommended\"\n      ],\n    ```\n\n  - Rules\n\n    ```diff\n      \"rules\": {\n    -    \"@ota-meshi/svelte/no-dupe-else-if-blocks\": \"error\",\n    +    \"svelte/no-dupe-else-if-blocks\": \"error\",\n    -    \"@ota-meshi/svelte/button-has-type\": \"error\",\n    +    \"svelte/button-has-type\": \"error\",\n      },\n    ```\n\n  - `settings`\n\n    ```diff\n      \"settings\": {\n    -    \"@ota-meshi/svelte\": { ... }\n    +    \"svelte\": { ... }\n      },\n    ```\n\n## From `eslint-plugin-svelte` v2 To v3\n\nThis section explains the necessary changes when upgrading from `eslint-plugin-svelte` v2 to v3.\\\nv3 includes **support for ESLint Flat Config only**, **changes to the recommended rule set**, and other breaking changes.\n\n---\n\n## Breaking Changes\n\n### 1. **Minimum Node.js Version Requirement**\n\nv3 requires **one of the following Node.js versions**:\n\n- `^18.20.4`\n- `^20.18.0`\n- `>=22.10.0`\n\n### 2. **ESLint Flat Config Only**\n\n- `.eslintrc.js` and `.eslintrc.json` are **no longer supported**.\n- You must use **Flat Config (`eslint.config.js`)**.\n- See [README](README.md) for more details.\n\n### 3. **ESLint Version Requirement**\n\n- v3 requires **ESLint 8.57.1 or later** (including v9.x).\n\n### 4. **Changes to Recommended Rule Set**\n\n- The following rules are now included in `recommended`:\n  - `svelte/infinite-reactive-loop`\n  - `svelte/no-dom-manipulating`\n  - `svelte/no-dupe-on-directives`\n  - `svelte/no-reactive-reassign`\n  - `svelte/require-event-dispatcher-types`\n  - Many others (See [Changelog](https://github.com/sveltejs/eslint-plugin-svelte/releases/tag/eslint-plugin-svelte%403.0.0-next.16) for more details)\n- `svelte/valid-compile` has been **removed** from `recommended`.\n\n### 5. **Deprecated Rules**\n\n- `svelte/no-dynamic-slot-name` is **deprecated**.\n- `svelte/no-goto-without-base` is **deprecated** and replaced with `svelte/no-navigation-without-base`.\n\n---\n\n## New Features & Improvements\n\n### 1. **Support for Svelte 5**\n\n- Rules such as `no-not-function-handler` and `valid-prop-names-in-kit-pages` now support **Svelte 5**.\n\n### 2. **New Rules**\n\n- `consistent-selector-style`: Enforce consistent selector styles.\n- `no-useless-children-snippet`: Prevent unnecessary `{@children}` usage.\n- `prefer-const`: Prefer `const` over `let`.\n- `no-navigation-without-base`: Ensure proper usage of `goto()`.\n\n---\n\n## Migration Steps\n\n### 1. **Upgrade Package**\n\n```sh\nnpm install eslint-plugin-svelte@3\n```\n\n### 2. **Check Node.js Version**\n\n```sh\nnode -v\n```\n\n- Ensure it is `v18.20.4` or later.\n\n### 3. **Check ESLint Version**\n\n```sh\nnpx eslint -v\n```\n\n- Ensure it is `8.57.1` or later (or `9.x`).\n\n### 4. **Use Flat Config (`eslint.config.js`)**\n\n- Remove `.eslintrc.js` and migrate to `eslint.config.js`.\n\n### 5. **Apply the Updated Recommended Rules**\n\n- If using `recommended`, check the impact of newly added rules.\n\n### 6. **Replace Deprecated Rules**\n\n- Replace `no-goto-without-base` with `no-navigation-without-base`.\n"
  },
  {
    "path": "docs/rules/@typescript-eslint/no-unnecessary-condition.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/@typescript-eslint/no-unnecessary-condition'\ndescription: 'disallow conditionals where the type is always truthy or always falsy'\nsince: 'v2.9.0'\n---\n\n# svelte/@typescript-eslint/no-unnecessary-condition\n\n> disallow conditionals where the type is always truthy or always falsy\n\n- :warning: This rule was **deprecated**. This rule is no longer needed when using svelte-eslint-parser>=v0.19.0.\n- :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.\n\n## :book: Rule Details\n\n**This rule is no longer needed when using svelte-eslint-parser>=v0.19.0.**\n\nThis rule extends the base `@typescript-eslint`'s [@typescript-eslint/no-unnecessary-condition] rule.\nThe [@typescript-eslint/no-unnecessary-condition] rule does not understand reactive or rerendering of Svelte components and has false positives when used with Svelte components. This rule understands reactive and rerendering of Svelte components.\n\n<!--eslint-skip-->\n\n```svelte\n<script lang=\"ts\">\n  /* eslint svelte/@typescript-eslint/no-unnecessary-condition: \"error\" */\n  export let foo: number | null = null;\n  /* ✗ BAD */\n  let b = foo || 42;\n  /* ✓ GOOD */\n  $: a = foo || 42;\n</script>\n\n<!-- ✓ GOOD -->\n{foo || 42}\n```\n\n## :wrench: Options\n\n```json\n{\n  \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n  \"svelte/@typescript-eslint/no-unnecessary-condition\": [\n    \"error\",\n    {\n      \"allowConstantLoopConditions\": false,\n      \"allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing\": false\n    }\n  ]\n}\n```\n\nSame as [@typescript-eslint/no-unnecessary-condition] rule option. See [here](https://typescript-eslint.io/rules/no-unnecessary-condition/#options) for details.\n\n## :couple: Related rules\n\n- [@typescript-eslint/no-unnecessary-condition]\n\n[@typescript-eslint/no-unnecessary-condition]: https://typescript-eslint.io/rules/no-unnecessary-condition/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.9.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/no-unnecessary-condition.ts)\n\n<sup>Taken with ❤️ [from @typescript-eslint/eslint-plugin](https://typescript-eslint.io/rules/no-unnecessary-condition/)</sup>\n"
  },
  {
    "path": "docs/rules/block-lang.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/block-lang'\ndescription: 'disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks.'\nsince: 'v2.18.0'\n---\n\n# svelte/block-lang\n\n> disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks.\n\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule enforces all svelte components to use the same set of languages for their scripts and styles.\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\">\n  /* eslint svelte/block-lang: [\"error\", { \"script\": \"ts\" }] */\n</script>\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script>\n  /* eslint svelte/block-lang: [\"error\", { \"script\": [\"ts\", null], \"style\": \"scss\" }] */\n</script>\n\n<style lang=\"scss\">\n</style>\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✗ BAD -->\n<script>\n  /* eslint svelte/block-lang: [\"error\", { \"script\": [\"ts\"] }] */\n</script>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/block-lang\": [\n    \"error\",\n    {\n      \"enforceScriptPresent\": true,\n      \"enforceStylePresent\": false,\n      \"script\": [\"ts\", null], // a list of languages or null to signify no language specified\n      \"style\": \"scss\" // same as for script, a single value can be used instead of an array.\n    }\n  ]\n}\n```\n\n- `enforceScriptPresent` ... Whether to enforce the presence of a `<script>` block with one of the given languages. This may be useful as for example TypeScript checks some uses of a component if it is defined as being TypeScript. Default `false`.\n- `enforceStylePresent` ... Whether to enforce the presence of a `<style>` block with one of the given languages. Default `false`.\n- `script` ... A list of languages allowed for the `<script>` block. If `null` is included, no `lang` attribute is also allowed. A plain string or `null` can be used instead of one-item array. Default `null`.\n- `style` ... A list of languages allowed for the `<style>` block. If `null` is included, no `lang` attribute is also allowed. A plain string or `null` can be used instead of one-item array. Default `null`.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.18.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/block-lang.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/block-lang.ts)\n"
  },
  {
    "path": "docs/rules/button-has-type.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/button-has-type'\ndescription: 'disallow usage of button without an explicit type attribute'\nsince: 'v0.0.4'\n---\n\n# svelte/button-has-type\n\n> disallow usage of button without an explicit type attribute\n\n## :book: Rule Details\n\nThis rule aims to warn if no type or an invalid type is used on a button type attribute.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/button-has-type: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<button type=\"button\">Hello World</button>\n<button type=\"submit\">Hello World</button>\n<button type=\"reset\">Hello World</button>\n\n<!-- ✗ BAD -->\n<button>Hello World</button>\n<button type=\"\">Hello World</button>\n<button type=\"foo\">Hello World</button>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/button-has-type\": [\n    \"error\",\n    {\n      \"button\": true,\n      \"submit\": true,\n      \"reset\": true\n    }\n  ]\n}\n```\n\n- `button` ... `<button type=\"button\"></button>`\n  - `true` (default) ... allow value `button`.\n  - `false` ... disallow value `button`.\n- `submit` ... `<button type=\"submit\"></button>`\n  - `true` (default) ... allow value `submit`.\n  - `false` ... disallow value `submit`.\n- `reset` ... `<button type=\"reset\"></button>`\n  - `true` (default) ... allow value `reset`.\n  - `false` ... disallow value `reset`.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.4\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/button-has-type.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/button-has-type.ts)\n"
  },
  {
    "path": "docs/rules/comment-directive.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/comment-directive'\ndescription: 'support comment-directives in HTML template'\nsince: 'v0.0.13'\n---\n\n# svelte/comment-directive\n\n> support comment-directives in HTML template\n\n- :gear: This rule is included in `\"plugin:svelte/base\"` and `\"plugin:svelte/recommended\"`.\n\nSole purpose of this rule is to provide `eslint-disable` functionality in the template HTML.\nIt supports usage of the following comments:\n\n- `eslint-disable`\n- `eslint-enable`\n- `eslint-disable-line`\n- `eslint-disable-next-line`\n\n::: warning Note\nWe can't write HTML comments in tags.\n:::\n\n## :book: Rule Details\n\nESLint doesn't provide any API to enhance `eslint-disable` functionality and ESLint rules cannot affect other rules. But ESLint provides [processors API](https://eslint.org/docs/developer-guide/working-with-plugins#processors-in-plugins).\n\nThis rule sends all `eslint-disable`-like comments to the post-process of the `.svelte` file processor, then the post-process removes the reported errors in disabled areas.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/comment-directive: \"error\", no-undef: \"error\" */\n</script>\n\n<!-- eslint-disable-next-line no-undef -->\n<UndefComponent />\n```\n\nThe `eslint-disable`-like comments can include descriptions to explain why the comment is necessary. The description must occur after the directive and is separated from the directive by two or more consecutive `-` characters. For example:\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/comment-directive: \"error\", no-undef: \"error\" */\n</script>\n\n<!-- eslint-disable-next-line no-undef -- Here's a description about why this disabling is necessary. -->\n<UndefComponent />\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/comment-directive\": [\n    \"error\",\n    {\n      \"reportUnusedDisableDirectives\": false\n    }\n  ]\n}\n```\n\n- `reportUnusedDisableDirectives` ... If `true`, to report unused `eslint-disable` HTML comments. default `false`\n\n### `{ \"reportUnusedDisableDirectives\": true }`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/comment-directive: [\"error\", { \"reportUnusedDisableDirectives\": true }], no-undef: \"error\" */\n  import DefinedComponent from './DefinedComponent.svelte';\n</script>\n\n<!-- ✓ GOOD -->\n<!-- eslint-disable-next-line no-undef -->\n<UndefComponent />\n\n<!-- ✗ BAD -->\n<!-- eslint-disable-next-line no-undef -->\n<DefinedComponent />\n```\n\n## :books: Further Reading\n\n- [Disabling rules with inline comments]\n\n[disabling rules with inline comments]: https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.13\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/comment-directive.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts)\n"
  },
  {
    "path": "docs/rules/consistent-selector-style.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/consistent-selector-style'\ndescription: 'enforce a consistent style for CSS selectors'\nsince: 'v3.0.0-next.15'\n---\n\n# svelte/consistent-selector-style\n\n> enforce a consistent style for CSS selectors\n\n## :book: Rule Details\n\nThis rule allows you to set a preferred style for your CSS (& other style language) selectors. In CSS, there is a wide list of options for selecting elements, however, the three most basic types are:\n\n- Selecting by element type (i.e. tag name), such as `a {}`\n- Selecting by element ID, such as `#link {}`\n- Selecting by element class, such as `.link {}`\n  This rule allows you to set a preference for some of these three styles over others. Not all selectors can be used in all situations, however. While class selectors can be used in any situation, ID selectors can only be used to select a single element and type selectors are only applicable when the list of selected elements is the list of all elements of the particular type. To help with this, the rule accepts a list of selector style preferences and reports situations when the given selector can be rewritten using a more preferred style.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/consistent-selector-style: [\"error\", { style: [\"type\", \"id\", \"class\"] }] */\n</script>\n\n<a class=\"link\" id=\"firstLink\">Click me!</a>\n\n<a class=\"link cross\">Click me too!</a>\n\n<b class=\"bold cross\">Text one</b>\n\n<b>Text two</b>\n\n<i id=\"italic\">Text three</i>\n\n<style>\n  /* ✓ GOOD */\n\n  a {\n    color: green;\n  }\n\n  #firstLink {\n    color: green;\n  }\n\n  .cross {\n    color: green;\n  }\n\n  /* ✗ BAD */\n\n  /* Can use a type selector */\n  .link {\n    color: red;\n  }\n\n  /* Can use an ID selector (but not a type selector) */\n  .bold {\n    color: red;\n  }\n\n  /* Can use a type selector */\n  #italic {\n    color: red;\n  }\n</style>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/consistent-selector-style\": [\n    \"error\",\n    {\n      \"checkGlobal\": false,\n      \"style\": [\"type\", \"id\", \"class\"]\n    }\n  ]\n}\n```\n\n- `checkGlobal` ... Whether to check styles in `:global` blocks as well. Default `false`.\n- `style` ... A list of style preferences. Default `[\"type\", \"id\", \"class\"]`.\n\n## :books: Further Reading\n\n- [CSS selector documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.0.0-next.15\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/consistent-selector-style.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/consistent-selector-style.ts)\n"
  },
  {
    "path": "docs/rules/derived-has-same-inputs-outputs.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/derived-has-same-inputs-outputs'\ndescription: 'derived store should use same variable names between values and callback'\nsince: 'v2.8.0'\n---\n\n# svelte/derived-has-same-inputs-outputs\n\n> derived store should use same variable names between values and callback\n\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports where variable names and callback function's argument names are different.\nThis is mainly a recommended rule to avoid implementation confusion.\n\n<!--eslint-skip-->\n\n```js\n/* eslint svelte/derived-has-same-inputs-outputs: \"error\" */\n\nimport { derived } from 'svelte/store';\n\n/* ✓ GOOD */\nderived(a, ($a) => {});\nderived(a, ($a, set) => {});\nderived([a, b], ([$a, $b]) => {});\n\n/* ✗ BAD */\nderived(a, (b) => {});\nderived(a, (b, set) => {});\nderived([a, b], ([one, two]) => {});\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [Svelte - Docs > RUN TIME > svelte/store > derived](https://svelte.dev/docs#run-time-svelte-store-derived)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.8.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/derived-has-same-inputs-outputs.ts)\n"
  },
  {
    "path": "docs/rules/experimental-require-slot-types.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/experimental-require-slot-types'\ndescription: 'require slot type declaration using the `$$Slots` interface'\nsince: 'v2.18.0'\n---\n\n# svelte/experimental-require-slot-types\n\n> require slot type declaration using the `$$Slots` interface\n\n## :book: Rule Details\n\nThis rule enforces the presence of the `$$Slots` interface if any slots are present in the component. This interface declares all of the used slots and their props and enables typechecking both in the component itself as well as all components that include it.\nThe `$$Slots` interface is experimental and is documented in [svelte RFC #38](https://github.com/dummdidumm/rfcs/blob/ts-typedefs-within-svelte-components/text/ts-typing-props-slots-events.md#typing-slots).\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-slot-types: \"error\" */\n</script>\n\n<b>No slots here!</b>\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-slot-types: \"error\" */\n\n  interface $$Slots {\n    default: Record<string, never>;\n  }\n</script>\n\n<slot />\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-slot-types: \"error\" */\n\n  interface $$Slots {\n    default: { prop: boolean };\n  }\n</script>\n\n<slot prop={true} />\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-slot-types: \"error\" */\n\n  interface $$Slots {\n    named: Record<string, never>;\n  }\n</script>\n\n<slot name=\"named\" />\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✗ BAD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-slot-types: \"error\" */\n</script>\n\n<slot />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.18.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/experimental-require-slot-types.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-slot-types.ts)\n"
  },
  {
    "path": "docs/rules/experimental-require-strict-events.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/experimental-require-strict-events'\ndescription: 'require the strictEvents attribute on `<script>` tags'\nsince: 'v2.18.0'\n---\n\n# svelte/experimental-require-strict-events\n\n> require the strictEvents attribute on `<script>` tags\n\n## :book: Rule Details\n\nThis rule enforces the presence of the `strictEvents` attribute on the main `<script>` tag of all components. This attributes enforces typechecking of events dispatched by the component, e.g. making it a typescript error to listen to any non-existent events. Alternatively, the event types may be defined manually by declaring the `$$Events` interface. The `strictEvents` attribute and the `$$Events` interface are experimental and are documented in [svelte RFC #38](https://github.com/dummdidumm/rfcs/blob/ts-typedefs-within-svelte-components/text/ts-typing-props-slots-events.md#typing-events).\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\" strictEvents>\n  /* eslint svelte/experimental-require-strict-events: \"error\" */\n</script>\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-strict-events: \"error\" */\n  interface $$Events {}\n</script>\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✗ BAD -->\n<script lang=\"ts\">\n  /* eslint svelte/experimental-require-strict-events: \"error\" */\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.18.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/experimental-require-strict-events.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-strict-events.ts)\n"
  },
  {
    "path": "docs/rules/first-attribute-linebreak.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/first-attribute-linebreak'\ndescription: 'enforce the location of first attribute'\nsince: 'v0.6.0'\n---\n\n# svelte/first-attribute-linebreak\n\n> enforce the location of first attribute\n\n- :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.\n\n## :book: Rule Details\n\nThis rule aims to enforce a consistent location for the first attribute.\n\n<!-- prettier-ignore-start -->\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/first-attribute-linebreak: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"checkbox\" />\n<button\n  type=\"button\"\n  on:click={click} />\n<button type=\"button\" on:click={click} />\n\n<!-- ✗ BAD -->\n<input\n  type=\"checkbox\" />\n<button type=\"button\"\n  on:click={click} />\n<button\n  type=\"button\" on:click={click} />\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/first-attribute-linebreak\": [\n    \"error\",\n    {\n      \"multiline\": \"below\", // or \"beside\"\n      \"singleline\": \"beside\" // \"below\"\n    }\n  ]\n}\n```\n\n- `multiline` ... The location of the first attribute when the attributes span multiple lines. Default is `\"below\"`.\n  - `\"below\"` ... Requires a newline before the first attribute.\n  - `\"beside\"` ... Disallows a newline before the first attribute.\n- `singleline` ... The location of the first attribute when the attributes on single line. Default is `\"beside\"`.\n  - `\"below\"` ... Requires a newline before the first attribute.\n  - `\"beside\"` ... Disallows a newline before the first attribute.\n\n## :couple: Related Rules\n\n- [svelte/max-attributes-per-line]\n\n[svelte/max-attributes-per-line]: ./max-attributes-per-line.md\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.6.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/first-attribute-linebreak.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/first-attribute-linebreak.ts)\n"
  },
  {
    "path": "docs/rules/html-closing-bracket-new-line.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/html-closing-bracket-new-line'\ndescription: \"Require or disallow a line break before tag's closing brackets\"\nsince: 'v2.45.0'\n---\n\n# svelte/html-closing-bracket-new-line\n\n> Require or disallow a line break before tag's closing brackets\n\n- :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.\n\n## :book: Rule Details\n\nThis rule enforces a line break (or no line break) before tag's closing brackets, which can also be configured to be enforced on self-closing tags.\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/html-closing-bracket-new-line: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<div></div>\n<div\n  multiline\n>\n  Children\n</div>\n\n<SelfClosing />\n<SelfClosing\n  multiline\n/>\n\n<!-- ✗ BAD -->\n\n<div\n></div>\n<div\n  multiline>\n  Children\n</div>\n\n<SelfClosing\n/>\n<SelfClosing\n  multiline/>\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/html-closing-bracket-new-line\": [\n    \"error\",\n    {\n      \"singleline\": \"never\", // [\"never\", \"always\"]\n      \"multiline\": \"always\", // [\"never\", \"always\"]\n      \"selfClosingTag\": {\n        \"singleline\": \"never\", // [\"never\", \"always\"]\n        \"multiline\": \"always\" // [\"never\", \"always\"]\n      }\n    }\n  ]\n}\n```\n\n- `singleline`: (`\"never\"` by default) Configuration for single-line elements. It's a single-line element if the element does not have attributes or the last attribute is on the same line as the opening bracket.\n- `multiline`: (`\"always\"` by default) Configuration for multi-line elements. It's a multi-line element if the last attribute is not on the same line of the opening bracket.\n- `selfClosingTag.singleline`: Configuration for single-line self closing elements.\n- `selfClosingTag.multiline`: Configuration for multi-line self closing elements.\n\nThe `selfClosing` is optional, and by default it will use the same configuration as `singleline` and `multiline`, respectively.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.45.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-new-line.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-new-line.ts)\n"
  },
  {
    "path": "docs/rules/html-closing-bracket-spacing.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/html-closing-bracket-spacing'\ndescription: \"require or disallow a space before tag's closing brackets\"\nsince: 'v2.3.0'\n---\n\n# svelte/html-closing-bracket-spacing\n\n> require or disallow a space before tag's closing brackets\n\n- :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.\n\n## :book: Rule Details\n\nYou can choose either two styles for spacing before closing bracket\n\n- always: `<div />`\n- never: `<div/>`\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/html-closing-bracket-spacing: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<div />\n<p>Hello</p>\n<div\n >\n</div>\n\n<!-- ✗ BAD -->\n<div/>\n<p >Hello</p >\n<div  >\n</div >\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/html-closing-bracket-spacing\": [\n    \"error\",\n    {\n      \"startTag\": \"never\", // or \"always\" or \"ignore\"\n      \"endTag\": \"never\", // or \"always\" or \"ignore\"\n      \"selfClosingTag\": \"always\" // or \"never\" or \"ignore\"\n    }\n  ]\n}\n```\n\n- `startTag` (`\"never\"` by default)... Spacing in start tags\n- `endTag` (`\"never\"` by default)... Spacing in end tags\n- `selfClosingTag` (`\"always\"` by default)... Spacing in self closing tags\n\nEvery option can be set to\n\n- \"always\" (`<div />`)\n- \"never\" (`<div/>`)\n- \"ignore\" (either `<div />` or `<div/>`)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.3.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-spacing.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-spacing.ts)\n"
  },
  {
    "path": "docs/rules/html-quotes.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/html-quotes'\ndescription: 'enforce quotes style of HTML attributes'\nsince: 'v0.5.0'\n---\n\n# svelte/html-quotes\n\n> enforce quotes style of HTML attributes\n\n- :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.\n\n## :book: Rule Details\n\nYou can choose quotes of HTML attributes from:\n\n- Double quotes: `<div class=\"foo\">`\n- Single quotes: `<div class='foo'>`\n- No quotes: `<div class=foo>`\n\nThis rule enforces the quotes style of HTML attributes.\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/html-quotes: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"text\" bind:value={text} />\n<img {src} alt=\"{name} dances.\" />\n\n<!-- ✗ BAD -->\n<input type=text bind:value=\"{text}\" />\n<img src=\"{src}\" alt='{name} dances.' />\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/html-quotes\": [\n    \"error\",\n    {\n      \"prefer\": \"double\", // or \"single\"\n      \"dynamic\": {\n        \"quoted\": false,\n        \"avoidInvalidUnquotedInHTML\": false\n      }\n    }\n  ]\n}\n```\n\n- `prefer` ... If `\"double\"`, requires double quotes. If `\"single\"`, requires single quotes.\n- `dynamic` ... Settings for dynamic attribute values and directive values using curly braces.\n  - `quoted` ... If `true`, enforce the use of quotes. If `false`, do not allow the use of quotes. The default is `false`.\n  - `avoidInvalidUnquotedInHTML` ... If `true`, enforces the use of quotes if they are invalid as HTML attribute when not using quotes. The default is `false`.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/html-quotes.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/html-quotes.ts)\n"
  },
  {
    "path": "docs/rules/html-self-closing.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/html-self-closing'\ndescription: 'enforce self-closing style'\nsince: 'v2.5.0'\n---\n\n# svelte/html-self-closing\n\n> enforce self-closing style\n\n- :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.\n\n## :book: Rule Details\n\nYou can choose either two styles for elements without content.\n\n- always: `<SomeComponent />`\n- never: `<SomeComponent></SomeComponent>`\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/html-self-closing: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<p>Hello</p>\n<div></div>\n<img />\n<svelte:head />\n<svg><path /></svg>\n<math><msup></msup></math>\n<SomeComponent />\n\n<!-- ✗ BAD -->\n<div />\n<div><div /></div>\n<svelte:body></svelte:body>\n<svg><path></path></svg>\n<math><msup /></math>\n<SomeComponent></SomeComponent>\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\npresets:\n\n```jsonc\n{\n  \"svelte/html-self-closing\": [\n    \"error\",\n    \"default\" // or \"all\" or \"html\" or \"none\"\n  ]\n}\n```\n\nconfig object:\n\n```jsonc\n{\n  \"svelte/html-self-closing\": [\n    \"error\",\n    {\n      \"void\": \"always\", // or \"never\" or \"ignore\"\n      \"normal\": \"never\", // or \"always\" or \"ignore\"\n      \"svg\": \"always\", // or \"never\" or \"ignore\"\n      \"never\": \"never\", // or \"always\" or \"ignore\"\n      \"component\": \"always\", // or \"never\" or \"ignore\"\n      \"svelte\": \"always\" // or \"never\" or \"ignore\"\n    }\n  ]\n}\n```\n\npresets:\n\n- `default` - MathML and non-void HTML elements should have a closing tag; otherwise, they should be self-closing.\n- `all` - all elements should be self-closing (unless they have children)\n- `html` - html-compliant - only void elements and svelte special elements should be self-closing\n- `none` - no elements should be self-closing\n\n::: warning Note\nWe recommend selecting `default` as the preset. Choosing any other option may result in settings that are inconsistent with the compiler when using Svelte5.\n:::\n\nconfig object:\n\n- `void` (`\"always\"` in default preset)... Style of HTML void elements\n- `normal` (`\"never\"` in default preset)... Style of other elements\n- `svg` (`\"always\"` in default preset)... Style of SVG\n- `math` (`never` in default preset)... Style of MathML\n- `component` (`\"always\"` in default preset)... Style of svelte components\n- `svelte` (`\"always\"` in default preset)... Style of svelte special elements (`<svelte:head>`, `<svelte:self>`)\n\n::: warning\n`foreign` is removed in `eslint-plugin-svelte` v3.\n:::\n\nEvery config object option can be set to\n\n- \"always\" (`<SomeComponent />`)\n- \"never\" (`<SomeComponent></SomeComponent>`)\n- \"ignore\" (either `<SomeComponent />` or `<SomeComponent></SomeComponent>`)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/html-self-closing.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/html-self-closing.ts)\n"
  },
  {
    "path": "docs/rules/indent.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/indent'\ndescription: 'enforce consistent indentation'\nsince: 'v0.3.0'\n---\n\n# svelte/indent\n\n> enforce consistent indentation\n\n- :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.\n\n## :book: Rule Details\n\nThis rule enforces a consistent indentation style in `.svelte`. The default style is 2 spaces.\n\n- This rule checks all tags, also all expressions in directives and mustaches.\n- In the expressions, this rule supports ECMAScript 2021 syntaxes and some TypeScript syntaxes. It ignores unknown AST nodes, but it might be confused by non-standard syntaxes.\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/indent: \"error\" */\n  function click() {}\n</script>\n\n<!-- ✓ GOOD -->\n<button\n  type=\"button\"\n  on:click={click}\n  class=\"my-button primally\"\n>\n  CLICK ME!\n</button>\n\n<!-- ✗ BAD -->\n<button\ntype=\"button\"\n    on:click={click}\n     class=\"my-button primally\"\n  >\nCLICK ME!\n</button>\n```\n\n<!-- prettier-ignore-end -->\n\n::: warning Note\nThis rule only checks `.svelte` files and does not interfere with other `.js` files. Unfortunately the default `indent` rule when turned on will try to lint both, so in order to make them complementary you can use `overrides` setting and disable `indent` rule on `.svelte` files:\n:::\n\n```json\n{\n  \"overrides\": [\n    {\n      \"files\": [\"*.svelte\"],\n      \"rules\": {\n        \"svelte/indent\": \"error\",\n        \"indent\": \"off\"\n      }\n    }\n  ]\n}\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/indent\": [\n    \"error\",\n    {\n      \"indent\": 2,\n      \"ignoredNodes\": [],\n      \"switchCase\": 1,\n      \"alignAttributesVertically\": false\n    }\n  ]\n}\n```\n\n- `indent` (`number | \"tab\"`) ... The type of indentation. Default is `2`. If this is a number, it's the number of spaces for one indent. If this is `\"tab\"`, it uses one tab for one indent.\n- `indentScript` (`boolean`) ... If contents within a `<script>` block should be indented a level or not. Default is `true`.\n- `ignoredNodes` ... Can be used to disable indentation checking for any AST node. This accepts an array of [selectors](https://eslint.org/docs/developer-guide/selectors). If an AST node is matched by any of the selectors, the indentation of tokens which are direct children of that node will be ignored. This can be used as an escape hatch to relax the rule if you disagree with the indentation that it enforces for a particular syntactic pattern.\n- `switchCase` ... Enforces indentation level for case clauses in switch statements. Default is `1`.\n- `alignAttributesVertically` ... Condition for whether attributes should be vertically aligned to the first attribute in multiline case or not. Default is `false`\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.3.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/indent.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/indent.ts)\n"
  },
  {
    "path": "docs/rules/infinite-reactive-loop.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/infinite-reactive-loop'\ndescription: \"Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.\"\nsince: 'v2.16.0'\n---\n\n# svelte/infinite-reactive-loop\n\n> Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nSvelte runtime prevents calling the same reactive statement twice in a microtask.<br/>\nBut between different microtask, it doesn't prevent.<br/>\nThis rule reports those possible infinite loop.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/infinite-reactive-loop: \"error\" */\n  import { count } from './store.js';\n  import { tick } from 'svelte';\n  let a = 0;\n\n  // ✓ GOOD\n  $: if (a < 10) {\n    a += 1;\n    $count += 1;\n  }\n\n  $: (async () => {\n    // You can update a state in the same micro task.\n    a += 1;\n    $count += 1;\n    await new Promise((resolve) => setTimeout(resolve, 100));\n  })();\n\n  $: (async () => {\n    await doSomething_ok();\n  })();\n\n  const doSomething_ok = async () => {\n    await fetchFromServer();\n    // You can update a state even in different microtask\n    // if you don't refer the state in reactive statement.\n    a += 1;\n  };\n\n  // ✗ BAD\n  $: (async () => {\n    await doSomething();\n    // Do not update a state in different micro task.\n    a += 1;\n    $count += 1;\n  })();\n\n  $: tick(() => {\n    a = a + 1;\n    $count += 1;\n  });\n\n  $: (async () => {\n    console.log(a);\n    // This rule checks caller function recursively.\n    await doSomething_ng_1();\n  })();\n\n  const doSomething_ng_1 = async () => {\n    a += 1;\n    await fetchFromServer();\n    doSomething_ng_2();\n  };\n\n  const doSomething_ng_2 = () => {\n    a += 1;\n  };\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [Svelte - Docs > COMPONENT FORMAT > 3. $: marks a statement as reactive](https://svelte.dev/docs#component-format-script-3-$-marks-a-statement-as-reactive)\n- [Svelte - Docs > COMPONENT FORMAT > 4. Prefix stores with $ to access their values](https://svelte.dev/docs#component-format-script-4-prefix-stores-with-$-to-access-their-values)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.16.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/infinite-reactive-loop.ts)\n"
  },
  {
    "path": "docs/rules/max-attributes-per-line.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/max-attributes-per-line'\ndescription: 'enforce the maximum number of attributes per line'\nsince: 'v0.2.0'\n---\n\n# svelte/max-attributes-per-line\n\n> enforce the maximum number of attributes per line\n\n- :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.\n\n## :book: Rule Details\n\nLimits the maximum number of attributes/directives per line to improve readability.\n\nThis rule aims to enforce a number of attributes per line in templates.\nIt checks all the elements in a template and verifies that the number of attributes per line does not exceed the defined maximum.\nAn attribute is considered to be in a new line when there is a line break between two attributes.\n\nThere is a configurable number of attributes that are acceptable in one-line case (default 1), as well as how many attributes are acceptable per line in multi-line case (default 1).\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/max-attributes-per-line: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<input\n  type=\"text\"\n  bind:value={text}\n  {maxlength}\n  {...attrs}\n  readonly\n  size=\"20\"\n/>\n<button\n  type=\"button\"\n  on:click={click}\n  {maxlength}\n  {...attrs}\n  disabled\n  data-my-data=\"foo\"\n/>\n\n<!-- ✗ BAD -->\n<input type=\"text\" bind:value={text} {maxlength} {...attrs} readonly />\n<button type=\"button\" on:click={click} {maxlength} {...attrs}> CLICK ME! </button>\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/max-attributes-per-line\": [\n    \"error\",\n    {\n      \"multiline\": 1,\n      \"singleline\": 1\n    }\n  ]\n}\n```\n\n- `multiline` ... The number of maximum attributes per line when the opening tag is in multiple lines. Default is `1`.\n- `singleline` ... The number of maximum attributes per line when the opening tag is in a single line. Default is `1`.\n\n## :couple: Related Rules\n\n- [svelte/first-attribute-linebreak]\n\n[svelte/first-attribute-linebreak]: ./first-attribute-linebreak.md\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.2.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/max-attributes-per-line.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/max-attributes-per-line.ts)\n"
  },
  {
    "path": "docs/rules/max-lines-per-block.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/max-lines-per-block'\ndescription: 'enforce maximum number of lines in svelte component blocks'\nsince: 'v3.16.0'\n---\n\n# svelte/max-lines-per-block\n\n> enforce maximum number of lines in svelte component blocks\n\n## :book: Rule Details\n\nThis rule enforces a maximum number of lines per block (`<script>`, `<style>`, or template) in Svelte single-file components, in order to aid in maintainability and reduce complexity.\n\nESLint's core `max-lines` rule counts all lines in a `.svelte` file including CSS in `<style>` blocks, which penalizes components for styling rather than logic complexity. This rule allows limiting each block independently — for example, enforcing script and template limits while leaving style unchecked.\n\n## :bulb: Usage Example\n\nIf ESLint's `max-lines` rule triggers on your Svelte components because of large `<style>` blocks, you can replace it with this rule to check only the blocks that matter:\n\n```jsonc\n{\n  // Before: counts ALL lines including CSS\n  // \"max-lines\": [\"error\", { \"max\": 300 }]\n\n  // After: only checks script and template, ignores style\n  \"svelte/max-lines-per-block\": [\n    \"error\",\n    {\n      \"script\": 300,\n      \"template\": 200,\n      \"skipBlankLines\": true,\n      \"skipComments\": true\n    }\n  ]\n}\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/max-lines-per-block\": [\n    \"error\",\n    {\n      \"script\": 300,\n      \"template\": 400,\n      \"style\": 500,\n      \"skipBlankLines\": true,\n      \"skipComments\": true\n    }\n  ]\n}\n```\n\n- `script` ... Maximum number of inner lines in `<script>` blocks. Omit to skip checking.\n- `template` ... Maximum number of lines in the template (markup) region. Lines inside `<script>`, `<style>`, and `<svelte:options>` are excluded. Omit to skip checking.\n- `style` ... Maximum number of inner lines in `<style>` blocks. Omit to skip checking.\n- `skipBlankLines` ... Ignore blank (whitespace-only) lines when counting. Default: `false`.\n- `skipComments` ... Ignore comment lines when counting. Default: `false`.\n\nEach block option is **optional**. If a block option is not specified, that block is not checked.\n\n## :couple: Related Rules\n\n- [ESLint core `max-lines`](https://eslint.org/docs/rules/max-lines)\n- [vue/max-lines-per-block](https://eslint.vuejs.org/rules/max-lines-per-block)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.16.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/max-lines-per-block.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/max-lines-per-block.ts)\n"
  },
  {
    "path": "docs/rules/mustache-spacing.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/mustache-spacing'\ndescription: 'enforce unified spacing in mustache'\nsince: 'v0.15.0'\n---\n\n# svelte/mustache-spacing\n\n> enforce unified spacing in mustache\n\n- :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.\n\n## :book: Rule Details\n\nThis rule aims at enforcing unified spacing in mustaches.\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/mustache-spacing: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n{name}\n<input bind:value={text} class=\"foo {bar}\" />\n<input {id} {...attrs} />\n{@html page}\n{@debug o1, o2}\n\n{#if c1}...{:else if c2}...{:else}...{/if}\n\n{#each list as item}...{/each}\n\n{#await p}...{:then val}...{:catch err}...{/await}\n\n{#key id}...{/key}\n\n<!-- ✗ BAD -->\n{ name }\n<input bind:value={ text } class=\"foo { bar }\" />\n<input { id } { ...attrs } />\n{ @html page }\n{ @debug o1, o2 }\n\n{ #if c1 }...{ :else if c2 }...{ :else }...{ /if }\n\n{ #each list as item }...{ /each }\n\n{ #await p }...{ :then val }...{ :catch err }...{ /await }\n\n{ #key id }...{ /key }\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/mustache-spacing\": [\n    \"error\",\n    {\n      \"textExpressions\": \"never\", // or \"always\"\n      \"attributesAndProps\": \"never\", // or \"always\"\n      \"directiveExpressions\": \"never\", // or \"always\"\n      \"tags\": {\n        \"openingBrace\": \"never\", // or \"always\"\n        \"closingBrace\": \"never\" // or \"always\" or \"always-after-expression\"\n      }\n    }\n  ]\n}\n```\n\n- `\"never\"` ... Expect no spaces between token and curly brackets. This is default.\n- `\"always\"` ... Expect one space between token and curly brackets.\n- `\"always-after-expression\"` ... Expect one space between expression and closing curly brackets, if the expression before the closing curly bracket.\n- `textExpressions` ... Enforces the style of the mustache for the text expressions. e.g. `{text}`.\n- `attributesAndProps` ... Enforces the style of the mustache for the attributes and props. e.g. `<input value={text}`.\n- `directiveExpressions` ... Enforces the style of the mustache for the directive expressions. e.g. `<input bind:value={text}`.\n- `tags` ... Enforces the style of the mustache for the mustache tags. e.g. `{#if condition}`.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.15.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/mustache-spacing.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/mustache-spacing.ts)\n"
  },
  {
    "path": "docs/rules/no-add-event-listener.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-add-event-listener'\ndescription: 'Warns against the use of `addEventListener`'\nsince: 'v3.6.0'\n---\n\n# svelte/no-add-event-listener\n\n> Warns against the use of `addEventListener`\n\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nSvelte relies on event delegation for performance and predictable handler order. Calling `addEventListener` inside a component skips this mechanism. This rule reports any call to `addEventListener` suggests converting to the `on()` helper from `svelte/events`.\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script>\n  /* eslint svelte/no-add-event-listener: \"error\" */\n  on(window, 'resize', handler);\n</script>\n```\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✗ BAD -->\n<script>\n  /* eslint svelte/no-add-event-listener: \"error\" */\n  window.addEventListener('resize', handler);\n</script>\n```\n\n## :books: Further reading\n\n- [svelte - event delegation]\n- [svelte/events `on` documentation]\n\n[svelte - event delegation]: https://svelte.dev/docs/svelte/basic-markup#Events-Event-delegation\n[svelte/events `on` documentation]: https://svelte.dev/docs/svelte/svelte-events#on\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.6.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts)\n"
  },
  {
    "path": "docs/rules/no-at-debug-tags.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-at-debug-tags'\ndescription: 'disallow the use of `{@debug}`'\nsince: 'v0.0.1'\n---\n\n# svelte/no-at-debug-tags\n\n> disallow the use of `{@debug}`\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports all uses of `{@debug}`.\n\nThe `{@debug}` should be removed when you no longer need it after you use it for debugging.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-at-debug-tags: \"error\" */\n</script>\n\n<!-- ✗ BAD -->\n{@debug user}\n{@debug user1, user2, user3}\n{@debug}\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [Svelte - Tutorial > 18. Debugging / The @debug tags](https://svelte.dev/tutorial/debug)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.1\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-at-debug-tags.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-at-debug-tags.ts)\n"
  },
  {
    "path": "docs/rules/no-at-html-tags.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-at-html-tags'\ndescription: 'disallow use of `{@html}` to prevent XSS attack'\nsince: 'v0.0.1'\n---\n\n# svelte/no-at-html-tags\n\n> disallow use of `{@html}` to prevent XSS attack\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports all uses of `{@html}` in order to reduce the risk of injecting potentially unsafe / unescaped html into the browser leading to Cross-Site Scripting (XSS) attacks.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-at-html-tags: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n{foo}\n\n<!-- ✗ BAD -->\n{@html foo}\n```\n\n## :wrench: Options\n\nNothing.\n\n## :mute: When Not To Use It\n\nIf you are certain the content passed to `{@html}` is sanitized HTML you can disable this rule.\n\n## :books: Further Reading\n\n- [Svelte - Tutorial > Basic Svelte / Introduction / HTML tags](https://svelte.dev/tutorial/svelte/html-tags)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.1\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-at-html-tags.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-at-html-tags.ts)\n"
  },
  {
    "path": "docs/rules/no-dom-manipulating.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-dom-manipulating'\ndescription: 'disallow DOM manipulating'\nsince: 'v2.13.0'\n---\n\n# svelte/no-dom-manipulating\n\n> disallow DOM manipulating\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nIn general, DOM manipulating should delegate to Svelte runtime. If you manipulate the DOM directly, the Svelte runtime may confuse because there is a difference between the actual DOM and the Svelte runtime's expected DOM.\nTherefore this rule reports where you use DOM manipulating function.\nWe don't recommend but If you intentionally manipulate the DOM, simply you can ignore this ESLint report.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dom-manipulating: \"error\" */\n  let foo, bar, show;\n\n  /* ✓ GOOD */\n  const toggle = () => (show = !show);\n\n  /* ✗ BAD */\n  const remove = () => foo.remove();\n  const update = () => (bar.textContent = 'Update!');\n</script>\n\n{#if show}\n  <div bind:this={foo}>Foo</div>\n{/if}\n<div bind:this={bar}>\n  {#if show}\n    Bar\n  {/if}\n</div>\n\n<button on:click={() => toggle()}>Click Me (Good)</button>\n<button on:click={() => remove()}>Click Me (Bad)</button>\n<button on:click={() => update()}>Click Me (Bad)</button>\n```\n\nThis rule only tracks and checks variables given with `bind:this={}`. In other words, it doesn't track things like function arguments given to `transition:` directives. These functions have been well tested and are often used more carefully.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dom-manipulating: \"error\" */\n  let visible = false;\n\n  function typewriter(node, { speed = 1 }) {\n    const valid = node.childNodes.length === 1 && node.childNodes[0].nodeType === Node.TEXT_NODE;\n\n    if (!valid) {\n      throw new Error(`This transition only works on elements with a single text node child`);\n    }\n\n    const text = node.textContent;\n    const duration = text.length / (speed * 0.01);\n\n    return {\n      duration,\n      tick: (t) => {\n        const i = Math.trunc(text.length * t);\n        node.textContent = text.slice(0, i); // It does not report.\n      }\n    };\n  }\n</script>\n\n<label>\n  <input type=\"checkbox\" bind:checked={visible} />\n  visible\n</label>\n\n{#if visible}\n  <p transition:typewriter>The quick brown fox jumps over the lazy dog</p>\n{/if}\n```\n\nSee also <https://svelte.dev/examples/custom-js-transitions>.\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.13.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-dom-manipulating.ts)\n"
  },
  {
    "path": "docs/rules/no-dupe-else-if-blocks.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-dupe-else-if-blocks'\ndescription: 'disallow duplicate conditions in `{#if}` / `{:else if}` chains'\nsince: 'v0.0.1'\n---\n\n# svelte/no-dupe-else-if-blocks\n\n> disallow duplicate conditions in `{#if}` / `{:else if}` chains\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule disallows duplicate conditions in the same `{#if}` / `{:else if}` chain.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dupe-else-if-blocks: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n{#if a}\n  <div>foo</div>\n{:else if b}\n  <div>bar</div>\n{:else if c}\n  <div>baz</div>\n{/if}\n\n<!-- ✗ BAD -->\n{#if a}\n  <div>foo</div>\n{:else if b}\n  <div>bar</div>\n{:else if b}\n  <div>baz</div>\n{/if}\n\n{#if a}\n  <div>foo</div>\n{:else if b}\n  <div>bar</div>\n{:else}\n  baz\n  {#if b}\n    <div>qux</div>\n  {/if}\n{/if}\n```\n\nThis rule can also detect some cases where the conditions are not identical, but the branch can never execute due to the logic of `||` and `&&` operators.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dupe-else-if-blocks: \"error\" */\n</script>\n\n<!-- ✗ BAD -->\n{#if a || b}\n  1\n{:else if a}\n  2\n{/if}\n\n{#if a}\n  1\n{:else if b}\n  2\n{:else if a || b}\n  3\n{/if}\n\n{#if a}\n  1\n{:else if a && b}\n  2\n{/if}\n\n{#if a && b}\n  1\n{:else if a && b && c}\n  2\n{/if}\n\n{#if a || b}\n  1\n{:else if b && c}\n  2\n{/if}\n\n{#if a}\n  1\n{:else if b && c}\n  2\n{:else if d && ((c && e && b) || a)}\n  3\n{/if}\n```\n\n## :wrench: Options\n\nNothing.\n\n## :couple: Related Rules\n\n- [no-dupe-else-if]\n\n[no-dupe-else-if]: https://eslint.org/docs/rules/no-dupe-else-if\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.1\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-dupe-else-if-blocks.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-else-if-blocks.ts)\n"
  },
  {
    "path": "docs/rules/no-dupe-on-directives.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-dupe-on-directives'\ndescription: 'disallow duplicate `on:` directives'\nsince: 'v2.14.0'\n---\n\n# svelte/no-dupe-on-directives\n\n> disallow duplicate `on:` directives\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nWe can define any number of `on:` directive with the same event name, but duplicate directives with the exact same event name and expression are probably a mistake.\nThis rule reports reports `on:` directives with exactly the same event name and expression.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dupe-on-directives: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<button on:click on:click={myHandler} />\n<button on:click={foo} on:click={bar} />\n\n<!-- ✗ BAD -->\n<button on:click on:click />\n<button on:click={myHandler} on:click={myHandler} />\n\n<input\n  on:focus|once\n  on:focus\n  on:keydown={() => console.log('foo')}\n  on:keydown={() => console.log('foo')}\n/>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.14.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-on-directives.ts)\n"
  },
  {
    "path": "docs/rules/no-dupe-style-properties.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-dupe-style-properties'\ndescription: 'disallow duplicate style properties'\nsince: 'v0.31.0'\n---\n\n# svelte/no-dupe-style-properties\n\n> disallow duplicate style properties\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports duplicate style properties.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dupe-style-properties: \"error\" */\n  let red = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<div style=\"background: green; background-color: {red};\">...</div>\n<div style:background=\"green\" style=\"background-color: {red}\">...</div>\n\n<!-- ✗ BAD -->\n<div style=\"background: green; background: {red};\">...</div>\n<div style:background=\"green\" style=\"background: {red}\">...</div>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.31.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-dupe-style-properties.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-style-properties.ts)\n"
  },
  {
    "path": "docs/rules/no-dupe-use-directives.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-dupe-use-directives'\ndescription: 'disallow duplicate `use:` directives'\nsince: 'v2.14.0'\n---\n\n# svelte/no-dupe-use-directives\n\n> disallow duplicate `use:` directives\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nWe can define any number of `use:` directive with the same action, but duplicate directives with the exact same action and expression are probably a mistake.\nThis rule reports reports `use:` directives with exactly the same action and expression.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dupe-use-directives: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<div use:clickOutside use:clickOutside={param} />\n<div use:clickOutside={foo} use:clickOutside={bar} />\n\n<!-- ✗ BAD -->\n<div use:clickOutside use:clickOutside />\n<div use:clickOutside={param} use:clickOutside={param} />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.14.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-use-directives.ts)\n"
  },
  {
    "path": "docs/rules/no-dynamic-slot-name.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-dynamic-slot-name'\ndescription: 'disallow dynamic slot name'\nsince: 'v0.14.0'\n---\n\n# svelte/no-dynamic-slot-name\n\n> disallow dynamic slot name\n\n- :warning: This rule was **deprecated**. Now Svelte compiler itself throws an compile error.\n- :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.\n\n## :book: Rule Details\n\nThis rule reports the dynamically specified `<slot>` name.\\\nDynamic `<slot>` names are not allowed in Svelte, so you must use static names.\n\nThe auto-fix of this rule can be replaced with a static `<slot>` name if the expression given to the `<slot>` name is static and resolvable.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-dynamic-slot-name: \"error\" */\n  const SLOT_NAME = 'bad';\n</script>\n\n<!-- ✓ GOOD -->\n<slot name=\"good\" />\n\n<!-- ✗ BAD -->\n<slot name={SLOT_NAME} />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.14.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-dynamic-slot-name.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-dynamic-slot-name.ts)\n"
  },
  {
    "path": "docs/rules/no-export-load-in-svelte-module-in-kit-pages.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-export-load-in-svelte-module-in-kit-pages'\ndescription: 'disallow exporting load functions in `*.svelte` module in SvelteKit page components.'\nsince: 'v2.12.0'\n---\n\n# svelte/no-export-load-in-svelte-module-in-kit-pages\n\n> disallow exporting load functions in `*.svelte` module in SvelteKit page components.\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports unexpected exported `load` function at `<script context=\"module\">`.\nAt SvelteKit v1.0.0-next.405, `load` function has been moved into a separate file — `+page.js` for pages, `+layout.js` for layouts.\nAnd the API has changed.\n\n<!--eslint-skip-->\n\n```svelte\n<script context=\"module\">\n  /* eslint svelte/no-export-load-in-svelte-module-in-kit-pages: \"error\" */\n  /* ✓ GOOD  */\n  export function foo() {}\n  export function bar() {}\n  /* ✗ BAD  */\n  export function load() {}\n  // export const load = () => {}\n</script>\n```\n\n## :wrench: Options\n\nNothing. But if you are not using the default routes folder, please set configuration according to the [user guide](../user-guide.md#settings-svelte).\n\n## :books: Further Reading\n\n- [SvelteKit Migration Guide (v1.0.0-next.405)](https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.12.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts)\n"
  },
  {
    "path": "docs/rules/no-extra-reactive-curlies.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-extra-reactive-curlies'\ndescription: 'disallow wrapping single reactive statements in curly braces'\nsince: 'v2.4.0'\n---\n\n# svelte/no-extra-reactive-curlies\n\n> disallow wrapping single reactive statements in curly braces\n\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports if curly brackets (`{` and `}`) are used unnecessarily around a reactive statement body containing only a single expression.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-extra-reactive-curlies: \"error\" */\n\n  /* ✓ GOOD */\n  $: foo = 'red';\n\n  /* ✗ BAD */\n  $: {\n    foo = 'red';\n  }\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :heart: Compatibility\n\nThis rule was taken from [@tivac/eslint-plugin-svelte].\\\nThis rule is compatible with `@tivac/svelte/reactive-curlies` rule.\n\n[@tivac/eslint-plugin-svelte]: https://github.com/tivac/eslint-plugin-svelte/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.4.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-extra-reactive-curlies.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-extra-reactive-curlies.ts)\n"
  },
  {
    "path": "docs/rules/no-goto-without-base.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-goto-without-base'\ndescription: 'disallow using goto() without the base path'\nsince: 'v2.36.0-next.9'\n---\n\n# svelte/no-goto-without-base\n\n> disallow using goto() without the base path\n\n- :warning: This rule was **deprecated** and replaced by [svelte/no-navigation-without-resolve](no-navigation-without-resolve.md) rule.\n\n## :book: Rule Details\n\nThis rule reports navigation using SvelteKit's `goto()` function without prefixing a relative URL with the base path. If a non-prefixed relative URL is used for navigation, the `goto` function navigates away from the base path, which is usually not what you wanted to do (for external URLs, `window.location = url` should be used instead).\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-goto-without-base: \"error\" */\n\n  import { goto } from '$app/navigation';\n  import { base } from '$app/paths';\n  import { base as baseAlias } from '$app/paths';\n\n  // ✓ GOOD\n  goto(base + '/foo/');\n  goto(`${base}/foo/`);\n\n  goto(baseAlias + '/foo/');\n  goto(`${baseAlias}/foo/`);\n\n  goto('https://localhost/foo/');\n\n  // ✗ BAD\n  goto('/foo');\n\n  goto('/foo/' + base);\n  goto(`/foo/${base}`);\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [`goto()` documentation](https://kit.svelte.dev/docs/modules#$app-navigation-goto)\n- [`base` documentation](https://kit.svelte.dev/docs/modules#$app-paths-base)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.36.0-next.9\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-goto-without-base.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-goto-without-base.ts)\n"
  },
  {
    "path": "docs/rules/no-ignored-unsubscribe.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-ignored-unsubscribe'\ndescription: 'disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.'\nsince: 'v2.34.0'\n---\n\n# svelte/no-ignored-unsubscribe\n\n> disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.\n\n## :book: Rule Details\n\nThis rule fails if an \"unsubscriber\" returned by call to `subscribe()` is neither assigned to a variable or property or passed to a function.\n\nOne should always unsubscribe from a store when it is no longer needed. Otherwise, the subscription will remain active and constitute a **memory leak**.\nThis rule helps to find such cases by ensuring that the unsubscriber (the return value from the store's `subscribe` method) is not ignored.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-ignored-unsubscribe: \"error\" */\n\n  import myStore from './my-stores';\n\n  /* ✓ GOOD */\n  const unsubscribe = myStore.subscribe(() => {});\n\n  /* ✗ BAD */\n  myStore.subscribe(() => {});\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.34.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-ignored-unsubscribe.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-ignored-unsubscribe.ts)\n"
  },
  {
    "path": "docs/rules/no-immutable-reactive-statements.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-immutable-reactive-statements'\ndescription: \"disallow reactive statements that don't reference reactive values.\"\nsince: 'v2.27.0'\n---\n\n# svelte/no-immutable-reactive-statements\n\n> disallow reactive statements that don't reference reactive values.\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports if all variables referenced in reactive statements are immutable. That reactive statement is immutable and not reactive.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-immutable-reactive-statements: \"error\" */\n  import myStore from './my-stores';\n  import myVar from './my-variables';\n  let mutableVar = 'hello';\n  export let prop;\n  /* ✓ GOOD */\n  $: computed1 = mutableVar + ' ' + mutableVar;\n  $: computed2 = fn1(mutableVar);\n  $: console.log(mutableVar);\n  $: console.log(computed1);\n  $: console.log($myStore);\n  $: console.log(prop);\n\n  const immutableVar = 'hello';\n  /* ✗ BAD */\n  $: computed3 = fn1(immutableVar);\n  $: computed4 = fn2();\n  $: console.log(immutableVar);\n  $: console.log(myVar);\n\n  /* ignore */\n  $: console.log(unknown);\n\n  function fn1(v) {\n    return v + ' ' + v;\n  }\n  function fn2() {\n    return mutableVar + ' ' + mutableVar;\n  }\n</script>\n\n<input bind:value={mutableVar} />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.27.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-immutable-reactive-statements.ts)\n"
  },
  {
    "path": "docs/rules/no-inline-styles.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-inline-styles'\ndescription: 'disallow attributes and directives that produce inline styles'\nsince: 'v2.35.0'\n---\n\n# svelte/no-inline-styles\n\n> disallow attributes and directives that produce inline styles\n\n## :book: Rule Details\n\nThis rule reports all attributes and directives that would compile to inline styles. This is mainly useful when adding Content Security Policy to your app, as having inline styles requires the `style-src: 'unsafe-inline'` directive, which is generally discouraged and unsafe.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-inline-styles: \"error\" */\n\n  import { fade } from 'svelte/transition';\n\n  export let classTwo;\n  export let blockDisplay;\n</script>\n\n<!-- ✓ GOOD -->\n<span class=\"one\">Hello World!</span>\n\n<span class:two={classTwo}>Hello World!</span>\n\n<!-- ✗ BAD -->\n<span style=\"display: block;\">Hello World!</span>\n\n<span style:display={blockDisplay ? 'block' : 'inline'}>Hello World!</span>\n\n<span transition:fade>Hello World!</span>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-inline-styles\": [\n    \"error\",\n    {\n      \"allowTransitions\": true\n    }\n  ]\n}\n```\n\n- `allowTransitions` ... Some svelte transitions (including the built-in ones in Svelte 4 and older) use inline styles. This option allows transitions to be used. Default `true`.\n\n## :books: Further Reading\n\n- [CSP documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.35.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-inline-styles.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-inline-styles.ts)\n"
  },
  {
    "path": "docs/rules/no-inner-declarations.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-inner-declarations'\ndescription: 'disallow variable or `function` declarations in nested blocks'\nsince: 'v0.0.8'\n---\n\n# svelte/no-inner-declarations\n\n> disallow variable or `function` declarations in nested blocks\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule requires that function declarations and, optionally, variable declarations be in the root of a program or the body of a function.\n\nThis rule extends the base ESLint's [no-inner-declarations] rule. The AST generated by [svelte-eslint-parser] will false positives in [no-inner-declarations] rule because the root node of the script is not the `Program`.\\\nThis rule supports [svelte-eslint-parser]'s AST.\n\n[svelte-eslint-parser]: https://github.com/sveltejs/svelte-eslint-parser\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-inner-declarations: [\"error\", \"functions\", { blockScopedFunctions: \"disallow\" }] */\n\n  /* ✓ GOOD */\n  function doSomething() {}\n\n  function doSomethingElse() {\n    function doAnotherThing() {}\n  }\n\n  /* ✗ BAD */\n  if (test) {\n    function doSomethingBad() {}\n  }\n</script>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-inner-declarations\": [\n    \"error\",\n    \"functions\", // or \"both\"\n    {\n      \"blockScopedFunctions\": \"allow\" // or \"disallow\"\n    }\n  ]\n}\n```\n\nSame as [no-inner-declarations] rule option. See [here](https://eslint.org/docs/rules/no-inner-declarations#options) for details.\n\n## :couple: Related rules\n\n- [no-inner-declarations]\n\n[no-inner-declarations]: https://eslint.org/docs/rules/no-inner-declarations\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.8\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-inner-declarations.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-inner-declarations.ts)\n\n<sup>Taken with ❤️ [from ESLint core](https://eslint.org/docs/rules/no-inner-declarations)</sup>\n"
  },
  {
    "path": "docs/rules/no-inspect.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-inspect'\ndescription: 'Warns against the use of `$inspect` directive'\nsince: 'v2.45.0'\n---\n\n# svelte/no-inspect\n\n> Warns against the use of `$inspect` directive\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports usages of `$inspect`.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-inspect: \"error\" */\n  // ✗ BAD\n  $inspect(1);\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.45.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-inspect.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-inspect.ts)\n"
  },
  {
    "path": "docs/rules/no-navigation-without-base.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-navigation-without-base'\ndescription: 'disallow using navigation (links, goto, pushState, replaceState) without the base path'\nsince: 'v2.36.0-next.9'\n---\n\n# svelte/no-navigation-without-base\n\n> disallow using navigation (links, goto, pushState, replaceState) without the base path\n\n- :warning: This rule was **deprecated** and replaced by [svelte/no-navigation-without-resolve](no-navigation-without-resolve.md) rule.\n\n## :book: Rule Details\n\nThis rule reports navigation using HTML `<a>` tags, SvelteKit's `goto()`, `pushState()` and `replaceState()` functions without prefixing a relative URL with the base path. All four of these may be used for navigation, with `goto()`, `pushState()` and `replaceState()` being intended solely for internal navigation (i.e. not leaving the site), while `<a>` tags may be used for both internal and external navigation. When using any way of internal navigation, the base path must be prepended, otherwise the site may break. For programmatic navigation to external URLs, using `window.location` is advised.\n\nThis rule checks all 4 navigation options for the presence of the base path, with an exception for `<a>` links to absolute URLs, which are assumed to be used for external navigation and so do not require the base path, and for shallow routing functions with an empty string as the path, which keeps the current URL.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-navigation-without-base: \"error\" */\n\n  import { goto, pushState, replaceState } from '$app/navigation';\n  import { base } from '$app/paths';\n\n  // ✓ GOOD\n  goto(base + '/foo/');\n  goto(`${base}/foo/`);\n\n  pushState(base + '/foo/', {});\n  pushState(`${base}/foo/`, {});\n  pushState('', {});\n\n  replaceState(base + '/foo/', {});\n  replaceState(`${base}/foo/`, {});\n  replaceState('', {});\n\n  // ✗ BAD\n  goto('/foo');\n  goto('/foo/' + base);\n\n  pushState('/foo', {});\n  replaceState('/foo', {});\n</script>\n\n<!-- ✓ GOOD -->\n<a href={base + '/foo/'}>Click me!</a>\n<a href={`${base}/foo/`}>Click me!</a>\n<a href=\"https://svelte.dev\">Click me!</a>\n\n<!-- ✗ BAD -->\n<a href=\"/foo\">Click me!</a>\n<a href={'/foo'}>Click me!</a>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-navigation-without-base\": [\n    \"error\",\n    {\n      \"ignoreGoto\": false,\n      \"ignoreLinks\": false,\n      \"ignorePushState\": false,\n      \"ignoreReplaceState\": false\n    }\n  ]\n}\n```\n\n- `ignoreGoto` ... Whether to ignore all `goto()` calls. Default `false`.\n- `ignoreLinks` ... Whether to ignore all `<a>` tags. Default `false`.\n- `ignorePushState` ... Whether to ignore all `pushState()` calls. Default `false`.\n- `ignoreReplaceState` ... Whether to ignore all `replaceState()` calls. Default `false`.\n\n## :books: Further Reading\n\n- [`base` documentation](https://svelte.dev/docs/kit/$app-paths#base)\n- [Shallow routing](https://svelte.dev/docs/kit/shallow-routing)\n- [`goto()` documentation](https://svelte.dev/docs/kit/$app-navigation#goto)\n- [`pushState()` documentation](https://svelte.dev/docs/kit/$app-navigation#pushState)\n- [`replaceState()` documentation](https://svelte.dev/docs/kit/$app-navigation#replaceState)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.36.0-next.9\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-navigation-without-base.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-navigation-without-base.ts)\n"
  },
  {
    "path": "docs/rules/no-navigation-without-resolve.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-navigation-without-resolve'\ndescription: 'disallow internal navigation (links, `goto()`, `pushState()`, `replaceState()`) without a `resolve()`'\nsince: 'v3.12.0'\n---\n\n# svelte/no-navigation-without-resolve\n\n> disallow internal navigation (links, `goto()`, `pushState()`, `replaceState()`) without a `resolve()`\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule ensures internal navigation via HTML `<a>` tags, SvelteKit's `goto()`, `pushState()` and `replaceState()` uses `resolve()`. `<a>` tags will skip this check when it has an absolute URL or `rel=\"external\"`. For programmatic external navigation, use `window.location`. Enforcing this rule ensures the base path is prefixed and internal links are type-checked.\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n<script>\n  /* eslint svelte/no-navigation-without-resolve: \"error\" */\n\n  import { goto, pushState, replaceState } from '$app/navigation';\n  import { resolve } from '$app/paths';\n\n  goto(resolve('/foo/'));\n  pushState(resolve('/foo/'), {});\n  replaceState(resolve('/foo/'), {});\n\n  // shallow routing\n  pushState('', {});\n  replaceState('', {});\n</script>\n\n<a href={resolve('/foo/')}>Click me!</a>\n<a href=\"https://svelte.dev\">Click me!</a>\n<a href={someURL} rel=\"external\">Click me!</a>\n<a href=\"#top\">Click me!</a>\n```\n\n```svelte\n<!-- ✗ BAD -->\n<script>\n  /* eslint svelte/no-navigation-without-resolve: \"error\" */\n\n  import { goto, pushState, replaceState } from '$app/navigation';\n  import { resolve } from '$app/paths';\n\n  goto('/foo');\n  goto('/foo' + resolve('/bar'));\n  goto(resolve('/foo') + '/bar');\n\n  pushState('/foo', {});\n  replaceState('/foo', {});\n</script>\n\n<a href=\"/foo\">Click me!</a>\n<a href={'/foo'}>Click me!</a>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-navigation-without-resolve\": [\n    \"error\",\n    {\n      \"ignoreGoto\": false,\n      \"ignoreLinks\": false,\n      \"ignorePushState\": false,\n      \"ignoreReplaceState\": false\n    }\n  ]\n}\n```\n\n- `ignoreGoto` ... Whether to ignore all `goto()` calls. Default `false`.\n- `ignoreLinks` ... Whether to ignore all `<a>` tags. Default `false`.\n- `ignorePushState` ... Whether to ignore all `pushState()` calls. Default `false`.\n- `ignoreReplaceState` ... Whether to ignore all `replaceState()` calls. Default `false`.\n\n## :books: Further Reading\n\n- [`resolve()` documentation](https://svelte.dev/docs/kit/$app-paths#resolve)\n- [Shallow routing](https://svelte.dev/docs/kit/shallow-routing)\n- [`goto()` documentation](https://svelte.dev/docs/kit/$app-navigation#goto)\n- [`pushState()` documentation](https://svelte.dev/docs/kit/$app-navigation#pushState)\n- [`replaceState()` documentation](https://svelte.dev/docs/kit/$app-navigation#replaceState)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.12.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-navigation-without-resolve.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-navigation-without-resolve.ts)\n"
  },
  {
    "path": "docs/rules/no-not-function-handler.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-not-function-handler'\ndescription: 'disallow use of not function in event handler'\nsince: 'v0.5.0'\n---\n\n# svelte/no-not-function-handler\n\n> disallow use of not function in event handler\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports where you used not function value in event handlers.\\\nIf you use a non-function value for the event handler, it event handler will not be called. It's almost always a mistake. You may have written a lot of unnecessary curly braces.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-not-function-handler: \"error\" */\n  function foo() {\n    /*  */\n  }\n  const bar = 42;\n</script>\n\n<!-- ✓ GOOD -->\n<button onclick={foo} />\n<button\n  onclick={() => {\n    /*  */\n  }}\n/>\n\n<!-- ✗ BAD -->\n<button onclick={{ foo }} />\n<button onclick={bar} />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :couple: Related Rules\n\n- [svelte/no-object-in-text-mustaches]\n\n[svelte/no-object-in-text-mustaches]: ./no-object-in-text-mustaches.md\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-not-function-handler.ts)\n"
  },
  {
    "path": "docs/rules/no-object-in-text-mustaches.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-object-in-text-mustaches'\ndescription: 'disallow objects in text mustache interpolation'\nsince: 'v0.5.0'\n---\n\n# svelte/no-object-in-text-mustaches\n\n> disallow objects in text mustache interpolation\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule disallows the use of objects in text mustache interpolation.\\\nWhen you use an object for text interpolation, it is drawn as `[object Object]`. It's almost always a mistake. You may have written a lot of unnecessary curly braces.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-object-in-text-mustaches: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n{foo}\n<input class=\"{foo} bar\" />\n<MyComponent prop={{ foo }} />\n\n<!-- ✗ BAD -->\n{{ foo }}\n<input class=\"{{ foo }} bar\" />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :couple: Related Rules\n\n- [svelte/no-not-function-handler]\n\n[svelte/no-not-function-handler]: ./no-not-function-handler.md\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-object-in-text-mustaches.ts)\n"
  },
  {
    "path": "docs/rules/no-raw-special-elements.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-raw-special-elements'\ndescription: 'Checks for invalid raw HTML elements'\nsince: 'v3.0.0-next.1'\n---\n\n# svelte/no-raw-special-elements\n\n> Checks for invalid raw HTML elements\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :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.\n\n## :book: Rule Details\n\nThis rule reports the usage of `head`, `body`, `window`, `document`, `element` and `options` HTML elements. These elements are not valid in Svelte, despite them working in versions previous to v5. Such elements must be prefixed with `svelte:`.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-raw-special-elements: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<svelte:head>\n  <title>Valid</title>\n</svelte:head>\n\n<!-- ✗ BAD -->\n<head>\n  <title>Invalid</title>\n</head>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- See special elements section in [Svelte docs](https://svelte.dev/docs/svelte/svelte-window)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.0.0-next.1\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-raw-special-elements.ts)\n"
  },
  {
    "path": "docs/rules/no-reactive-functions.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-reactive-functions'\ndescription: \"it's not necessary to define functions in reactive statements\"\nsince: 'v2.5.0'\n---\n\n# svelte/no-reactive-functions\n\n> it's not necessary to define functions in reactive statements\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports whenever a function is defined in a reactive statement. This isn't necessary, as each time the function is executed it'll already have access to the latest values necessary. Redefining the function in the reactive statement is just a waste of CPU cycles.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-reactive-functions: \"error\" */\n\n  /* ✓ GOOD */\n  const arrowFn = () => {\n    /* ... */\n  };\n  const func = function () {\n    /* ... */\n  };\n\n  /* ✗ BAD */\n  $: arrowFn = () => {\n    /* ... */\n  };\n  $: func = function () {\n    /* ... */\n  };\n</script>\n```\n\n## :wrench: Options\n\nNothing\n\n## :heart: Compatibility\n\nThis rule was taken from [@tivac/eslint-plugin-svelte].\\\nThis rule is compatible with `@tivac/svelte/reactive-functions` rule.\n\n[@tivac/eslint-plugin-svelte]: https://github.com/tivac/eslint-plugin-svelte/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-functions.ts)\n"
  },
  {
    "path": "docs/rules/no-reactive-literals.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-reactive-literals'\ndescription: \"don't assign literal values in reactive statements\"\nsince: 'v2.4.0'\n---\n\n# svelte/no-reactive-literals\n\n> don't assign literal values in reactive statements\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports on any assignment of a static, unchanging value within a reactive statement because it's not necessary.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-reactive-literals: \"error\" */\n  /* ✓ GOOD */\n  let foo = 'bar';\n\n  /* ✗ BAD */\n  $: foo = 'bar';\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :heart: Compatibility\n\nThis rule was taken from [@tivac/eslint-plugin-svelte].\\\nThis rule is compatible with `@tivac/svelte/reactive-literals` rule.\n\n[@tivac/eslint-plugin-svelte]: https://github.com/tivac/eslint-plugin-svelte/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.4.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-literals.ts)\n"
  },
  {
    "path": "docs/rules/no-reactive-reassign.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-reactive-reassign'\ndescription: 'disallow reassigning reactive values'\nsince: 'v2.27.0'\n---\n\n# svelte/no-reactive-reassign\n\n> disallow reassigning reactive values\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule aims to prevent unintended behavior caused by modification or reassignment of reactive values.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-reactive-reassign: \"error\" */\n  let value = 0;\n  $: reactiveValue = value * 2;\n\n  function handleClick() {\n    /* ✓ GOOD */\n    value++;\n    /* ✗ BAD */\n    reactiveValue = value * 3;\n    reactiveValue++;\n  }\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- ✗ BAD -->\n<input type=\"number\" bind:value={reactiveValue} />\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-reactive-reassign\": [\n    \"error\",\n    {\n      \"props\": true\n    }\n  ]\n}\n```\n\n- `props` ... If set to `true`, this rule warns against the modification of reactive value properties. Default is `true`.\n\n### `{ \"props\": true }`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-reactive-reassign: [\"error\", { \"props\": true }] */\n  let value = 0;\n  $: reactiveValue = { value: value * 2 };\n\n  function handleClick() {\n    /* ✓ GOOD */\n    value++;\n    /* ✗ BAD */\n    reactiveValue.value++;\n    reactiveValue = { value: reactiveValue.value + 1 };\n  }\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- ✗ BAD -->\n<input type=\"number\" bind:value={reactiveValue.value} />\n<MyComponent bind:objectValue={reactiveValue} />\n```\n\n### `{ \"props\": false }`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-reactive-reassign: [\"error\", { \"props\": false }] */\n  let value = 0;\n  $: reactiveValue = { value: value * 2 };\n\n  function handleClick() {\n    /* ✓ GOOD */\n    value++;\n    /* OK */\n    reactiveValue.value++;\n    /* ✗ BAD */\n    reactiveValue = { value: reactiveValue.value + 1 };\n  }\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- OK -->\n<input type=\"number\" bind:value={reactiveValue.value} />\n<!-- ✗ BAD -->\n<MyComponent bind:objectValue={reactiveValue} />\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.27.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-reassign.ts)\n"
  },
  {
    "path": "docs/rules/no-restricted-html-elements.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-restricted-html-elements'\ndescription: 'disallow specific HTML elements'\nsince: 'v2.31.0'\n---\n\n# svelte/no-restricted-html-elements\n\n> disallow specific HTML elements\n\n## :book: Rule Details\n\nThis rule reports to usage of resticted HTML elements.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-restricted-html-elements: [\"error\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] */\n</script>\n\n<!-- ✓ GOOD -->\n<div>\n  <p>Hi!</p>\n</div>\n\n<!-- ✗ BAD -->\n<h1>foo</h1>\n\n<div>\n  <h2>bar</h2>\n</div>\n```\n\n---\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-restricted-html-elements: [\"error\", { \"elements\": [\"marquee\"], \"message\": \"Do not use deprecated HTML tags\" }] */\n</script>\n\n<!-- ✓ GOOD -->\n<div>\n  <p>Hi!</p>\n</div>\n\n<!-- ✗ BAD -->\n<marquee>foo</marquee>\n\n<div>\n  <marquee>bar</marquee>\n</div>\n```\n\n## :wrench: Options\n\nThis rule takes a list of strings, where each string is an HTML element name to be restricted:\n\n```json\n{\n  \"svelte/no-restricted-html-elements\": [\"error\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]\n}\n```\n\nAlternatively, the rule also accepts objects.\n\n```json\n{\n  \"svelte/no-restricted-html-elements\": [\n    \"error\",\n    {\n      \"elements\": [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n      \"message\": \"Prefer use of our custom <Heading /> component\"\n    },\n    {\n      \"elements\": [\"marquee\"],\n      \"message\": \"Do not use deprecated HTML tags\"\n    }\n  ]\n}\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.31.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-restricted-html-elements.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-restricted-html-elements.ts)\n"
  },
  {
    "path": "docs/rules/no-shorthand-style-property-overrides.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-shorthand-style-property-overrides'\ndescription: 'disallow shorthand style properties that override related longhand properties'\nsince: 'v0.31.0'\n---\n\n# svelte/no-shorthand-style-property-overrides\n\n> disallow shorthand style properties that override related longhand properties\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports when a shorthand style property overrides a previously defined longhand property.\n\nThis rule was inspired by [Stylelint's declaration-block-no-shorthand-property-overrides rule](https://stylelint.io/user-guide/rules/list/declaration-block-no-shorthand-property-overrides/).\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-shorthand-style-property-overrides: \"error\" */\n  let red = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<div style:background-repeat=\"repeat\" style:background-color=\"green\">...</div>\n<div style=\"background-repeat: repeat; background-color: {red};\">...</div>\n<div style:background-repeat=\"repeat\" style=\"background-color: {red}\">...</div>\n\n<!-- ✗ BAD -->\n<div style:background-repeat=\"repeat\" style:background=\"green\">...</div>\n<div style=\"background-repeat: repeat; background: {red};\">...</div>\n<div style:background-repeat=\"repeat\" style=\"background: {red}\">...</div>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further reading\n\n- [Stylelint - declaration-block-no-shorthand-property-overrides]\n\n[stylelint - declaration-block-no-shorthand-property-overrides]: https://stylelint.io/user-guide/rules/list/declaration-block-no-shorthand-property-overrides/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.31.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-shorthand-style-property-overrides.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-shorthand-style-property-overrides.ts)\n"
  },
  {
    "path": "docs/rules/no-spaces-around-equal-signs-in-attribute.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-spaces-around-equal-signs-in-attribute'\ndescription: 'disallow spaces around equal signs in attribute'\nsince: 'v2.3.0'\n---\n\n# svelte/no-spaces-around-equal-signs-in-attribute\n\n> disallow spaces around equal signs in attribute\n\n- :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.\n\n## :book: Rule Details\n\nThis rule disallows spaces around equal signs in attributes\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-spaces-around-equal-signs-in-attribute: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<div class=\"\"/>\n<p style=\"color: red;\">hi</p>\n<img src=\"img.png\" alt=\"A photo of a very cute {animal}\">\n\n<!-- ✗ BAD -->\n<div class = \"\"/>\n<p style =\"color: red;\">hi</p>\n<img src\n    =\n    \"img.png\" alt   = \"A photo of a very cute {animal}\">\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.3.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-spaces-around-equal-signs-in-attribute.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-spaces-around-equal-signs-in-attribute.ts)\n"
  },
  {
    "path": "docs/rules/no-store-async.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-store-async'\ndescription: 'disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features'\nsince: 'v2.7.0'\n---\n\n# svelte/no-store-async\n\n> disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports all uses of async/await inside svelte stores.\nBecause it causes issues with the auto-unsubscribing features.\n\n<!--eslint-skip-->\n\n```js\n/* eslint svelte/no-store-async: \"error\" */\n\nimport { writable, readable, derived } from 'svelte/store';\n\n/* ✓ GOOD */\nconst w1 = writable(false, () => {});\nconst r1 = readable(false, () => {});\nconst d1 = derived(a1, ($a1) => {});\n\n/* ✗ BAD */\nconst w2 = writable(false, async () => {});\nconst r2 = readable(false, async () => {});\nconst d2 = derived(a1, async ($a1) => {});\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [Svelte - Docs > 4. Prefix stores with $ to access their values / Store contract](https://svelte.dev/docs#component-format-script-4-prefix-stores-with-$-to-access-their-values-store-contract)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.7.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-store-async.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-store-async.ts)\n"
  },
  {
    "path": "docs/rules/no-svelte-internal.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-svelte-internal'\ndescription: 'svelte/internal will be removed in Svelte 6.'\nsince: 'v2.39.0'\n---\n\n# svelte/no-svelte-internal\n\n> svelte/internal will be removed in Svelte 6.\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports the use of the deprecated API `svelte/internal` and `svelte/internal/xxx`. `svelte/internal` is deprecated in Svelte 5. And it will be deleted in Svelte 6. These APIs can change in breaking ways at any time without notice.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-svelte-internal: \"error\" */\n  // ✓ GOOD\n  import { mount } from 'svelte';\n\n  // ✗ BAD\n  import { get_current_component } from 'svelte/internal';\n  import { inspect } from 'svelte/internal/client';\n  import('svelte/internal');\n  import('svelte/internal/disclose-version');\n\n  export * from 'svelte/internal';\n  export { listen } from 'svelte/internal';\n  export * from 'svelte/internal/server';\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n<!--TODO: update here when relevant statements are added in Svelte 5 documentation -->\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.39.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-svelte-internal.ts)\n"
  },
  {
    "path": "docs/rules/no-target-blank.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-target-blank'\ndescription: 'disallow `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"`'\nsince: 'v0.0.4'\n---\n\n# svelte/no-target-blank\n\n> disallow `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"`\n\n## :book: Rule Details\n\nThis rule disallows using `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"` to avoid a security vulnerability in legacy browsers where a page can trigger a navigation in the opener regardless of origin ([see here for more details](https://mathiasbynens.github.io/rel-noopener/)).\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-target-blank: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<a href=\"http://example.com\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n\n<!-- ✗ BAD -->\n<a href=\"http://example.com\" target=\"_blank\">link</a>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-target-blank\": [\n    \"error\",\n    {\n      \"allowReferrer\": true,\n      \"enforceDynamicLinks\": \"always\"\n    }\n  ]\n}\n```\n\n- `allowReferrer` ... If `true`, allows the `Referrer` header to be sent by not requiring `noreferrer` to be present. default `false`\n- `enforceDynamicLinks (\"always\" | \"never\")` ... If `always`, enforces the rule if the href is a dynamic link. default `always`\n\n### `{ allowReferrer: false }` (default)\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-target-blank: ['error', { allowReferrer: false }] */\n</script>\n\n<!-- ✓ GOOD -->\n<a href=\"http://example.com\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n\n<!-- ✗ BAD -->\n<a href=\"http://example.com\" target=\"_blank\" rel=\"noopener\">link</a>\n```\n\n### `{ allowReferrer: true }`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-target-blank: ['error', { allowReferrer: true }] */\n</script>\n\n<!-- ✓ GOOD -->\n<a href=\"http://example.com\" target=\"_blank\" rel=\"noopener\">link</a>\n\n<!-- ✗ BAD -->\n<a href=\"http://example.com\" target=\"_blank\">link</a>\n```\n\n### `{ \"enforceDynamicLinks\": \"always\" }` (default)\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-target-blank: ['error', { enforceDynamicLinks: 'always' }] */\n</script>\n\n<!-- ✓ GOOD -->\n<a href={link} target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n\n<!-- ✗ BAD -->\n<a href={link} target=\"_blank\">link</a>\n```\n\n### `{ \"enforceDynamicLinks\": \"never\" }`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-target-blank: ['error', { enforceDynamicLinks: 'never' }] */\n</script>\n\n<!-- ✓ GOOD -->\n<a href={link} target=\"_blank\">link</a>\n\n<!-- ✗ BAD -->\n<a href=\"http://example.com\" target=\"_blank\">link</a>\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.4\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-target-blank.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-target-blank.ts)\n"
  },
  {
    "path": "docs/rules/no-top-level-browser-globals.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-top-level-browser-globals'\ndescription: 'disallow using top-level browser global variables'\nsince: 'v3.8.0'\n---\n\n# svelte/no-top-level-browser-globals\n\n> disallow using top-level browser global variables\n\n## :book: Rule Details\n\nThis rule reports top-level browser global variables in Svelte components.\nThis rule helps prevent the use of browser global variables that can cause errors in SSR (Server Side Rendering).\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-top-level-browser-globals: \"error\" */\n  import { onMount } from 'svelte';\n  import { browser } from '$app/environment';\n\n  /* ✓ GOOD */\n  onMount(() => {\n    const a = localStorage.getItem('myCat');\n    console.log(a);\n  });\n\n  /* ✓ GOOD */\n  if (browser) {\n    const a = localStorage.getItem('myCat');\n    console.log(a);\n  }\n\n  /* ✓ GOOD */\n  if (typeof localStorage !== 'undefined') {\n    const a = localStorage.getItem('myCat');\n    console.log(a);\n  }\n\n  /* ✗ BAD */\n  const a = localStorage.getItem('myCat');\n  console.log(a);\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [`$app/environment` documentation > browser](https://svelte.dev/docs/kit/$app-environment#browser)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.8.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-top-level-browser-globals.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-top-level-browser-globals.ts)\n"
  },
  {
    "path": "docs/rules/no-trailing-spaces.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-trailing-spaces'\ndescription: 'disallow trailing whitespace at the end of lines'\nsince: 'v2.7.0'\n---\n\n# svelte/no-trailing-spaces\n\n> disallow trailing whitespace at the end of lines\n\n- :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.\n\n## :book: Rule Details\n\nThis rule extends the base ESLint's [no-trailing-spaces] rule. The [no-trailing-spaces] rule does not understand HTML comments and will report trailing whitespace in HTML comments when using `ignoreComments` option.\nThis rule supports HTML comments generated by [svelte-eslint-parser].\n\n[svelte-eslint-parser]: https://github.com/sveltejs/svelte-eslint-parser\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-trailing-spaces: \"error\" */\n\n  /* ✓ GOOD */\n  var foo = 0;\n  /* ✗ BAD */\n  var foo = 0;  \n</script>\n\n<!-- ✓ GOOD -->\n<div>\n  Text\n</div>\n\n<!-- ✗ BAD -->\n<div>  \n  Text  \n</div>\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```jsonc\n{\n  \"no-trailing-spaces\": \"off\", // Don't need ESLint's no-trailing-spaces rule, so turn it off.\n  \"svelte/no-trailing-spaces\": [\n    \"error\",\n    {\n      \"skipBlankLines\": false,\n      \"ignoreComments\": false\n    }\n  ]\n}\n```\n\n- `skipBlankLines` ... If `true`, allows trailing whitespace on empty lines.\n- `ignoreComments` ... If `true`, allows trailing whitespace in comments.\n\nSame as [no-trailing-spaces] rule option. See [here](https://eslint.org/docs/rules/no-trailing-spaces#options) for details.\n\n## :couple: Related rules\n\n- [no-trailing-spaces]\n\n[no-trailing-spaces]: https://eslint.org/docs/rules/no-trailing-spaces\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.7.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-trailing-spaces.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-trailing-spaces.ts)\n\n<sup>Taken with ❤️ [from ESLint core](https://eslint.org/docs/rules/no-trailing-spaces)</sup>\n"
  },
  {
    "path": "docs/rules/no-unknown-style-directive-property.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-unknown-style-directive-property'\ndescription: 'disallow unknown `style:property`'\nsince: 'v0.31.0'\n---\n\n# svelte/no-unknown-style-directive-property\n\n> disallow unknown `style:property`\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports an unknown CSS property in style directive.\n\nThis rule was inspired by [Stylelint's property-no-unknown rule](https://stylelint.io/user-guide/rules/list/property-no-unknown/).\n\nNote that this rule only checks the `style:property` directive. If you want to check inside the `style` attribute and `style` element, consider introducing [Stylelint](https://stylelint.io/).\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-unknown-style-directive-property: \"error\" */\n  let red = 'red';\n  let color = red;\n</script>\n\n<!-- ✓ GOOD -->\n<div style:color={red}>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<div style:unknown-color={red}>...</div>\n<div style:red>...</div>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-unknown-style-directive-property\": [\n    \"error\",\n    {\n      \"ignoreProperties\": [],\n      \"ignorePrefixed\": true\n    }\n  ]\n}\n```\n\n- `ignoreProperties` ... You can specify property names or patterns that you want to ignore from checking. When specifying a pattern, specify a string like a regex literal. e.g. `\"/pattern/i\"`\n- `ignorePrefixed` ... If `true`, ignores properties with vendor prefix from checking. Default is `true`.\n\n## :books: Further reading\n\n- [Stylelint - property-no-unknown]\n\n[stylelint - property-no-unknown]: https://stylelint.io/user-guide/rules/list/property-no-unknown/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.31.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-unknown-style-directive-property.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-unknown-style-directive-property.ts)\n"
  },
  {
    "path": "docs/rules/no-unnecessary-state-wrap.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-unnecessary-state-wrap'\ndescription: 'Disallow unnecessary $state wrapping of reactive classes'\nsince: 'v3.2.0'\n---\n\n# svelte/no-unnecessary-state-wrap\n\n> Disallow unnecessary $state wrapping of reactive classes\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nIn Svelte 5, several built-in classes from `svelte/reactivity` are already reactive by default:\n\n- `SvelteSet`\n- `SvelteMap`\n- `SvelteURL`\n- `SvelteURLSearchParams`\n- `SvelteDate`\n- `MediaQuery`\n\nTherefore, wrapping them with `$state` is unnecessary and can lead to confusion.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-unnecessary-state-wrap: \"error\" */\n  import {\n    SvelteSet,\n    SvelteMap,\n    SvelteURL,\n    SvelteURLSearchParams,\n    SvelteDate,\n    MediaQuery\n  } from 'svelte/reactivity';\n\n  // ✓ GOOD\n  const set1 = new SvelteSet();\n  const map1 = new SvelteMap();\n  const url1 = new SvelteURL('https://example.com');\n  const params1 = new SvelteURLSearchParams('key=value');\n  const date1 = new SvelteDate();\n  const mediaQuery1 = new MediaQuery('(min-width: 800px)');\n\n  // ✗ BAD\n  const set2 = $state(new SvelteSet());\n  const map2 = $state(new SvelteMap());\n  const url2 = $state(new SvelteURL('https://example.com'));\n  const params2 = $state(new SvelteURLSearchParams('key=value'));\n  const date2 = $state(new SvelteDate());\n  const mediaQuery2 = $state(new MediaQuery('(min-width: 800px)'));\n</script>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-unnecessary-state-wrap\": [\n    \"error\",\n    {\n      \"additionalReactiveClasses\": [],\n      \"allowReassign\": false\n    }\n  ]\n}\n```\n\n- `additionalReactiveClasses` ... An array of class names that should also be considered reactive. This is useful when you have custom classes that are inherently reactive. Default is `[]`.\n- `allowReassign` ... If `true`, allows `$state` wrapping of reactive classes when the variable is reassigned. Default is `false`.\n\n### Examples with Options\n\n#### `additionalReactiveClasses`\n\n```svelte\n<script>\n  /* eslint svelte/no-unnecessary-state-wrap: [\"error\", { \"additionalReactiveClasses\": [\"MyReactiveClass\"] }] */\n  import { MyReactiveClass } from './foo';\n\n  // ✓ GOOD\n  const myState1 = new MyReactiveClass();\n\n  // ✗ BAD\n  const myState2 = $state(new MyReactiveClass());\n</script>\n```\n\n#### `allowReassign`\n\n```svelte\n<script>\n  /* eslint svelte/no-unnecessary-state-wrap: [\"error\", { \"allowReassign\": true }] */\n  import { SvelteSet } from 'svelte/reactivity';\n\n  // ✓ GOOD\n  let set1 = $state(new SvelteSet());\n  set1 = new SvelteSet([1, 2, 3]); // Variable is reassigned\n\n  // ✗ BAD\n  const set2 = $state(new SvelteSet()); // const cannot be reassigned\n  let set3 = $state(new SvelteSet()); // Variable is never reassigned\n</script>\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.2.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-unnecessary-state-wrap.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-unnecessary-state-wrap.ts)\n"
  },
  {
    "path": "docs/rules/no-unused-class-name.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-unused-class-name'\ndescription: 'disallow the use of a class in the template without a corresponding style'\nsince: 'v2.31.0'\n---\n\n# svelte/no-unused-class-name\n\n> disallow the use of a class in the template without a corresponding style\n\n## :book: Rule Details\n\nThis rule is aimed at reducing unused classes in the HTML template. While `svelte-check` will produce the `css-unused-selector` if your `<style>` block includes any classes that aren't used in the template, this rule works the other way around - it reports cases wehre the template contains classes that aren't referred to in the `<style>` block.\n\n<!--eslint-skip-->\n\n```svelte\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-class-name: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<div class=\"first-class\">Hello</div>\n<div class=\"second-class\">Hello</div>\n<div class=\"third-class fourth-class\">Hello</div>\n\n<!-- ✗ BAD -->\n<div class=\"fifth-class\">Hello</div>\n<div class=\"sixth-class first-class\">Hello</div>\n\n<style>\n  .first-class {\n    color: red;\n  }\n\n  .second-class,\n  .third-class {\n    color: blue;\n  }\n\n  .fourth-class {\n    color: green;\n  }\n</style>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-unused-class-name\": [\n    \"error\",\n    {\n      \"allowedClassNames\": [\"class-name-one\", \"class-name-two\", \"/^regex-.*$/\"] // You can also use regex to match class names\n    }\n  ]\n}\n```\n\n- `allowedClassNames` ... A list of class names that shouldn't be reported by this rule. Default `[]`.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.31.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-unused-class-name.ts)\n"
  },
  {
    "path": "docs/rules/no-unused-props.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-unused-props'\ndescription: 'Warns about defined Props properties that are unused'\nsince: 'v3.2.0'\n---\n\n# svelte/no-unused-props\n\n> Warns about defined Props properties that are unused\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports properties that are defined in Props but never used in the component code.\\\nIt helps to detect dead code and improve component clarity by ensuring that every declared prop is utilized.\n\nThis rule checks various usage patterns of props:\n\n- Direct property access\n- Destructuring assignment\n- Method calls\n- Computed property access\n- Object spread\n- Constructor calls (new expressions)\n- Assignment to other variables\n- Index signatures (e.g. `[key: string]: unknown`)\n\nAdditionally, this rule checks if index signatures are properly used. When an index signature is defined but not captured using the rest operator (`...`), the rule will suggest using it.\n\nNote: Properties of class types are not checked for usage, as they might be used in other parts of the application.\n\n:warning: This rule requires `@typescript-eslint/parser` to work. Make sure you have installed `@typescript-eslint/parser` and configured it in your ESLint configuration. Therefore, the rule violations cannot be seen in the examples on this page because this documentation does not use `@typescript-eslint/parser`.\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Direct property access\n  const props: { value: string } = $props();\n  console.log(props.value);\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Destructuring assignment\n  const { width, height }: { width: number; height: number } = $props();\n  console.log(width, height);\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Class properties are not checked\n  class User {\n    constructor(\n      public name: string,\n      public age: number\n    ) {}\n  }\n  type Props = {\n    user: User;\n  };\n  const props: Props = $props();\n  console.log(props.user.name); // age is not reported as unused\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Method calls\n  const props2: { callback: () => void } = $props();\n  props2.callback();\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Computed property access\n  const props3: { 'data-value': string } = $props();\n  const value = props3['data-value'];\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Constructor calls\n  const props4: { config: { new (): any } } = $props();\n  new props4.config();\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Using index signature with rest operator\n  interface Props {\n    a: number;\n    [key: string]: unknown;\n  }\n  let { a, ...rest }: Props = $props();\n  console.log(rest);\n</script>\n```\n\n```svelte\n<!-- ✗ Bad Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Unused property 'b'\n  const props: { a: string; b: number } = $props();\n  console.log(props.a);\n</script>\n```\n\n```svelte\n<!-- ✗ Bad Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Unused property in destructuring\n  const { x }: { x: number; y: number } = $props();\n  console.log(x);\n</script>\n```\n\n```svelte\n<!-- ✗ Bad Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: \"error\" */\n  // Unused index signature\n  interface Props {\n    a: number;\n    [key: string]: unknown; // This will be reported\n  }\n  let { a }: Props = $props();\n</script>\n```\n\n## :wrench: Options\n\n```js\n{\n  \"svelte/no-unused-props\": [\"error\", {\n    // Whether to check properties from imported types\n    \"checkImportedTypes\": false,\n    // Patterns to ignore when checking property types\n    \"ignoreTypePatterns\": [],\n    // Patterns to ignore when checking for unused props\n    \"ignorePropertyPatterns\": [],\n    // Whether to allow unused nested properties\n    \"allowUnusedNestedProperties\": false\n  }]\n}\n```\n\n- `checkImportedTypes` ... Controls whether to check properties from types defined in external files. Default is `false`, meaning the rule only checks types defined within the component file itself. When set to `true`, the rule will also check properties from imported and extended types.\n- `ignoreTypePatterns` ... Regular expression patterns for type names to exclude from checks. Default is `[]` (no exclusions). Most useful when `checkImportedTypes` is `true`, allowing you to exclude specific imported types (like utility types or third-party types) from being checked.\n- `ignorePropertyPatterns` ... Regular expression patterns for property names to exclude from unused checks. Default is `[]` (no exclusions). Most useful when `checkImportedTypes` is `true`, allowing you to ignore specific properties from external types that shouldn't trigger warnings.\n- `allowUnusedNestedProperties` ... Controls whether to allow unused nested properties. Default is `false`, meaning the rule will report unused properties from nested objects.\n\nExamples:\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: [\"error\", { \"checkImportedTypes\": true }] */\n  // Check properties from imported types\n  import type { BaseProps } from './types';\n  interface Props extends BaseProps {\n    age: number;\n  }\n  let { name, age }: Props = $props();\n  console.log(name, age);\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: [\"error\", { \"ignoreTypePatterns\": [\"/^Internal/\"] }] */\n  // Ignore properties from types matching the pattern\n  interface InternalConfig {\n    secretKey: string;\n    debugMode: boolean;\n  }\n  interface Props {\n    config: InternalConfig;\n    value: number;\n  }\n  let { config, value }: Props = $props();\n  console.log(value, config.secretKey);\n</script>\n```\n\n```svelte\n<!-- ✓ Good Examples -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: [\"error\", { \"ignorePropertyPatterns\": [\"/^_/\"] }] */\n  // Ignore properties with names matching the pattern\n  interface Props {\n    _internal: string;\n    value: number;\n  }\n  let { value }: Props = $props();\n  console.log(value);\n</script>\n```\n\n```svelte\n<!-- ✓ Good Example with allowUnusedNestedProperties: true -->\n<script lang=\"ts\">\n  /* eslint svelte/no-unused-props: [\"error\", { \"allowUnusedNestedProperties\": true }] */\n  interface Props {\n    user: {\n      name: string;\n      age: number; // Won't be reported as unused\n    };\n  }\n  let { user }: Props = $props();\n  console.log(user.name);\n</script>\n```\n\n## :gear: Required Configuration\n\nThis rule requires `@typescript-eslint/parser` to work. Please refer to the [User Guide](../user-guide.md) for more information.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.2.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-unused-props.ts)\n"
  },
  {
    "path": "docs/rules/no-unused-svelte-ignore.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-unused-svelte-ignore'\ndescription: 'disallow unused svelte-ignore comments'\nsince: 'v0.19.0'\n---\n\n# svelte/no-unused-svelte-ignore\n\n> disallow unused svelte-ignore comments\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule warns unnecessary `svelte-ignore` comments.\n\n`svelte-ignore` comments can include an explanatory note in parentheses after the warning names.\nThis rule checks only the warning names and ignores the explanatory note.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-unused-svelte-ignore: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"https://example.com/img.png\" autofocus />\n\n<!-- svelte-ignore a11y-autofocus, a11y-missing-attribute (intentional for this example) -->\n<img src=\"https://example.com/img.png\" autofocus />\n\n<!-- ✗ BAD -->\n<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"https://example.com/img.png\" alt=\"Foo\" />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [Svelte - Docs > Comments](https://svelte.dev/docs#template-syntax-comments)\n- [Svelte - Compiler warnings](https://svelte.dev/docs/svelte/compiler-warnings)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.19.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-unused-svelte-ignore.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-unused-svelte-ignore.ts)\n"
  },
  {
    "path": "docs/rules/no-useless-children-snippet.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-useless-children-snippet'\ndescription: \"disallow explicit children snippet where it's not needed\"\nsince: 'v3.0.0-next.9'\n---\n\n# svelte/no-useless-children-snippet\n\n> disallow explicit children snippet where it's not needed\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nAny content inside component tags that is not a snippet declaration implicitly becomes part of the children snippet. Thus, declaring the children snippet explicitly is only necessary when the snippet has parameters.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-useless-children-snippet: \"error\" */\n\n  import { Foo } from './Foo.svelte';\n</script>\n\n<!-- ✓ GOOD -->\n<Foo>\n  {#snippet bar()}\n    Hello\n  {/snippet}\n</Foo>\n\n<Foo>\n  {#snippet children(val)}\n    Hello {val}\n  {/snippet}\n</Foo>\n\n<Foo>Hello</Foo>\n\n<!-- ✗ BAD -->\n<Foo>\n  {#snippet children()}\n    Hello\n  {/snippet}\n</Foo>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.0.0-next.9\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-useless-children-snippet.ts)\n"
  },
  {
    "path": "docs/rules/no-useless-mustaches.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/no-useless-mustaches'\ndescription: 'disallow unnecessary mustache interpolations'\nsince: 'v0.0.4'\n---\n\n# svelte/no-useless-mustaches\n\n> disallow unnecessary mustache interpolations\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :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.\n\n## :book: Rule Details\n\nThis rule reports mustache interpolation with a string literal value.\\\nThe mustache interpolation with a string literal value can be changed to a static contents.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-useless-mustaches: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\nLorem ipsum {foo}\n<div data-text=\"Lorem ipsum\" />\n<div data-text={bar} />\n\n<!-- ✗ BAD -->\n{'Lorem ipsum'}\n{'Lorem ipsum'}\n{`Lorem ipsum`}\n<div data-text={'Lorem ipsum'} />\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/no-useless-mustaches\": [\n    \"error\",\n    {\n      \"ignoreIncludesComment\": false,\n      \"ignoreStringEscape\": false\n    }\n  ]\n}\n```\n\n- `ignoreIncludesComment` ... If `true`, do not report expressions containing comments. default `false`.\n- `ignoreStringEscape` ... If `true`, do not report string literals with useful escapes. default `false`.\n\n### `\"ignoreIncludesComment\": true`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/no-useless-mustaches: [\"error\", { \"ignoreIncludesComment\": true }] */\n</script>\n\n<!-- ✓ GOOD -->\n<div data-text={/* comment */ 'Lorem ipsum'} />\n\n<!-- ✗ BAD -->\n<div data-text={'Lorem ipsum'} />\n```\n\n### `\"ignoreStringEscape\": true`\n\n<!--eslint-skip-->\n\n```svelte\n<!-- ✓ GOOD -->\n{'Lorem \\n ipsum'}\n<div data-text={'Lorem \\n ipsum'} />\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.4\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-useless-mustaches.ts)\n"
  },
  {
    "path": "docs/rules/prefer-class-directive.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/prefer-class-directive'\ndescription: 'require class directives instead of ternary expressions'\nsince: 'v0.0.1'\n---\n\n# svelte/prefer-class-directive\n\n> require class directives instead of ternary expressions\n\n- :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.\n\n## :book: Rule Details\n\nThis rule aims to replace a class with ternary operator with the class directive.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/prefer-class-directive: [\"error\", {\"prefer\": \"empty\"}] */\n  const selected = true;\n</script>\n\n<!-- ✓ GOOD -->\n<button class:selected>foo</button>\n<button class:selected={current === 'foo'}>foo</button>\n\n<!-- ✗ BAD -->\n<button class={selected ? 'selected' : ''}>foo</button>\n<button class={current === 'foo' ? 'selected' : ''}>foo</button>\n```\n\nYou cannot enforce this style by using [prettier-plugin-svelte]. That is, this rule does not conflict with [prettier-plugin-svelte] and can be used with [prettier-plugin-svelte].\n\n[prettier-plugin-svelte]: https://github.com/sveltejs/prettier-plugin-svelte\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/prefer-class-directive\": [\n    \"error\",\n    {\n      \"prefer\": \"empty\" // or \"always\"\n    }\n  ]\n}\n```\n\n- `prefer` ... Whether to apply this rule always or just when there's an empty string. Default is `\"empty\"`.\n  - `\"empty\"` ... Requires class directives only if one of the strings is empty.\n  - `\"always\"` ... Requires class directives always rather than interpolation.\n\n## :couple: Related Rules\n\n- [svelte/prefer-style-directive]\n\n[svelte/prefer-style-directive]: ./prefer-style-directive.md\n\n## :books: Further Reading\n\n- [Svelte - Tutorial > Basic Svelte / Classes and styles / The class atribute](https://svelte.dev/tutorial/svelte/classes)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.1\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-class-directive.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-class-directive.ts)\n"
  },
  {
    "path": "docs/rules/prefer-const.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/prefer-const'\ndescription: 'Require `const` declarations for variables that are never reassigned after declared'\nsince: 'v3.0.0-next.6'\n---\n\n# svelte/prefer-const\n\n> Require `const` declarations for variables that are never reassigned after declared\n\n- :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.\n\n## :book: Rule Details\n\nThis rule reports the same as the base ESLint `prefer-const` rule, except that ignores Svelte reactive values such as `$derived` and `$props` as default. If this rule is active, make sure to disable the base `prefer-const` rule, as it will conflict with this rule.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/prefer-const: \"error\" */\n\n  // ✓ GOOD\n  const { a, b } = $props();\n  let c = $state('');\n  let d = $derived(a * 2);\n  let e = $derived.by(() => b * 2);\n\n  // ✗ BAD\n  let obj = { a, b };\n  let g = $state(0);\n  let h = $state({ count: 1 });\n</script>\n\n<input bind:value={c} />\n<input bind:value={h.count} />\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/prefer-const\": [\n    \"error\",\n    {\n      \"destructuring\": \"any\",\n      \"additionalProperties\": false,\n      \"excludedRunes\": [\"$props\", \"$derived\"]\n    }\n  ]\n}\n```\n\n- `destructuring`: The kind of the way to address variables in destructuring. There are 2 values:\n  - `any` (default) - If any variables in destructuring should be const, this rule warns for those variables.\n  - `all`: If all variables in destructuring should be const, this rule warns the variables. Otherwise, ignores them.\n- `ignoreReadBeforeAssign`: This is an option to avoid conflicting with `no-use-before-define` rule (without \"nofunc\" option). If `true` is specified, this rule will ignore variables that are read between the declaration and the first assignment. Default is `false`.\n- `excludedRunes`: An array of rune names that should be ignored. Even if a rune is declared with `let`, it will still be ignored.\n\n## :books: Further Reading\n\n- See [ESLint prefer-const rule](https://eslint.org/docs/latest/rules/prefer-const) for more information about the base rule.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.0.0-next.6\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-const.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-const.ts)\n\n<sup>Taken with ❤️ [from ESLint core](https://eslint.org/docs/rules/prefer-const)</sup>\n"
  },
  {
    "path": "docs/rules/prefer-destructured-store-props.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/prefer-destructured-store-props'\ndescription: 'destructure values from object stores for better change tracking & fewer redraws'\nsince: 'v2.10.0'\n---\n\n# svelte/prefer-destructured-store-props\n\n> destructure values from object stores for better change tracking & fewer redraws\n\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports on directly accessing properties of a store containing an object in templates. These usages can instead be written as a reactive statement using destructuring to allow for more granular change-tracking and reduced redraws in the component.\n\nAn example of the improvements can be see in this [REPL](https://svelte.dev/repl/7de86fea94ff40c48abb82da534dfb89)\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/prefer-destructured-store-props: \"error\" */\n  import store from './store.js';\n  // Svelte3/4\n  $: ({ foo } = $store);\n  // Svelte5 with Runes\n  let foo = $derived($store.foo);\n</script>\n\n<!-- ✓ GOOD -->\n{foo}\n\n<!-- ✗ BAD -->\n{$store.foo}\n```\n\n## :wrench: Options\n\nNothing\n\n## :heart: Compatibility\n\nThis rule was taken from [@tivac/eslint-plugin-svelte].\\\nThis rule is compatible with `@tivac/svelte/store-prop-destructuring` rule.\n\n[@tivac/eslint-plugin-svelte]: https://github.com/tivac/eslint-plugin-svelte/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.10.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-destructured-store-props.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-destructured-store-props.ts)\n"
  },
  {
    "path": "docs/rules/prefer-style-directive.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/prefer-style-directive'\ndescription: 'require style directives instead of style attribute'\nsince: 'v0.22.0'\n---\n\n# svelte/prefer-style-directive\n\n> require style directives instead of style attribute\n\n- :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.\n\n## :book: Rule Details\n\nThis rule aims to replace a style attribute with the style directive.\n\nStyle directive were added in Svelte v3.46.\n\n<!-- prettier-ignore-start -->\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/prefer-style-directive: \"error\" */\n  let color = \"red\"\n</script>\n\n<!-- ✓ GOOD -->\n<div style:color={color}>...</div>\n<div\n  style:position=\"absolute\"\n  style:top={position === \"absolute\" ? \"20px\" : null}\n  style:pointer-events={pointerEvents ? null : \"none\"}\n/>\n\n<!-- ✗ BAD -->\n<div style=\"color: {color};\">...</div>\n<div\n  style=\"\n    position: {position};\n    {position === 'absolute' ? 'top: 20px;' : ''}\n    {pointerEvents === false ? 'pointer-events:none;' : ''}\n  \"\n/>\n```\n\n<!-- prettier-ignore-end -->\n\nYou cannot enforce this style by using [prettier-plugin-svelte]. That is, this rule does not conflict with [prettier-plugin-svelte] and can be used with [prettier-plugin-svelte].\n\n[prettier-plugin-svelte]: https://github.com/sveltejs/prettier-plugin-svelte\n\n## :wrench: Options\n\nNothing.\n\n## :couple: Related Rules\n\n- [svelte/prefer-class-directive]\n\n[svelte/prefer-class-directive]: ./prefer-class-directive.md\n\n## :books: Further Reading\n\n- [Svelte - Docs > style:property](https://svelte.dev/docs#template-syntax-element-directives-style-property)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.22.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-style-directive.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-style-directive.ts)\n"
  },
  {
    "path": "docs/rules/prefer-svelte-reactivity.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/prefer-svelte-reactivity'\ndescription: 'disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity'\nsince: 'v3.11.0'\n---\n\n# svelte/prefer-svelte-reactivity\n\n> disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThe 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.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/prefer-svelte-reactivity: \"error\" */\n\n  import {\n    SvelteDate,\n    SvelteMap,\n    SvelteSet,\n    SvelteURL,\n    SvelteURLSearchParams\n  } from 'svelte/reactivity';\n\n  /* ✓ GOOD */\n\n  const a = new Date(8.64e15);\n  const b = new Map([\n    [1, 'one'],\n    [2, 'two']\n  ]);\n  const c = new Set([1, 2, 1, 3, 3]);\n  const d = new URL('https://svelte.dev/');\n  const e = new URLSearchParams('foo=1&bar=2');\n\n  // These don't modify the instances\n  a.getTime();\n  b.keys();\n  c.has(1);\n  d.port;\n  e.entries();\n\n  const f = new SvelteDate(8.64e15);\n  const g = new SvelteMap([\n    [1, 'one'],\n    [2, 'two']\n  ]);\n  const h = new SvelteSet([1, 2, 1, 3, 3]);\n  const i = new SvelteURL('https://svelte.dev/');\n  const j = new SvelteURLSearchParams('foo=1&bar=2');\n\n  // These modify the instances\n  f.getTime();\n  g.keys();\n  h.has(1);\n  i.port;\n  j.entries();\n\n  /* ✗ BAD */\n\n  const k = new Date(8.64e15);\n  const l = new Map([\n    [1, 'one'],\n    [2, 'two']\n  ]);\n  const m = new Set([1, 2, 1, 3, 3]);\n  const n = new URL('https://svelte.dev/');\n  const o = new URLSearchParams('foo=1&bar=2');\n\n  // These modify the instances\n  k.setMonth(3);\n  l.clear();\n  m.delete(2);\n  n.port = 80;\n  o.sort();\n</script>\n```\n\n```js\n// In svelte.js files, exported variables are also reported\n/* eslint svelte/prefer-svelte-reactivity: \"error\" */\n\n/* ✗ BAD */\n\nconst a = new Date(8.64e15);\nconst b = new Map([\n  [1, 'one'],\n  [2, 'two']\n]);\nconst c = new Set([1, 2, 1, 3, 3]);\nconst d = new URL('https://svelte.dev/');\nconst e = new URLSearchParams('foo=1&bar=2');\n\nexport { a, b, c, d as dd };\nexport default e;\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [svelte/reactivity documentation](https://svelte.dev/docs/svelte/svelte-reactivity)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.11.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-svelte-reactivity.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-svelte-reactivity.ts)\n"
  },
  {
    "path": "docs/rules/prefer-writable-derived.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/prefer-writable-derived'\ndescription: 'Prefer using writable $derived instead of $state and $effect'\nsince: 'v3.6.0'\n---\n\n# svelte/prefer-writable-derived\n\n> Prefer using writable $derived instead of $state and $effect\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule reports when you use a combination of `$state` and `$effect` to create a derived value that can be written to. It encourages using the more concise and clearer `$derived` syntax instead.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/prefer-writable-derived: \"error\" */\n  const { initialValue } = $props();\n\n  // ✓ GOOD\n  let value1 = $derived(initialValue);\n\n  // ✗ BAD\n  let value2 = $state(initialValue);\n  $effect(() => {\n    value2 = initialValue;\n  });\n</script>\n```\n\nThe rule specifically looks for patterns where:\n\n1. You initialize a variable with `$state()`\n2. You then use `$effect()` or `$effect.pre()` to assign a new value to that same variable\n3. The effect function contains only a single assignment statement\n\nWhen this pattern is detected, the rule suggests refactoring to use `$derived()` instead, which provides the same functionality in a more concise way.\n\n## :wrench: Options\n\nNothing.\n\n- This rule has no options.\n\n## :books: Further Reading\n\n- [Svelte Documentation on Reactivity Primitives](https://svelte.dev/docs/svelte-components#script-2-assignments-are-reactive)\n- [Svelte RFC for Reactivity Primitives](https://github.com/sveltejs/rfcs/blob/rfc-better-primitives/text/0000-better-primitives.md)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.6.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/prefer-writable-derived.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/prefer-writable-derived.ts)\n"
  },
  {
    "path": "docs/rules/require-each-key.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-each-key'\ndescription: 'require keyed `{#each}` block'\nsince: 'v2.28.0'\n---\n\n# svelte/require-each-key\n\n> require keyed `{#each}` block\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports `{#each}` block without key\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/require-each-key: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n{#each things as thing (thing.id)}\n  <Thing name={thing.name} />\n{/each}\n\n<!-- ✗ BAD -->\n{#each things as thing}\n  <Thing name={thing.name} />\n{/each}\n```\n\n## :wrench: Options\n\nNothing.\n\n## :couple: Related Rules\n\n- [svelte/valid-each-key](./valid-each-key.md)\n\n## :books: Further Reading\n\n- [Svelte - Tutorial > Basic Svelte / Logic / Keyed each blocks](https://svelte.dev/tutorial/svelte/keyed-each-blocks)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.28.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-each-key.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-each-key.ts)\n"
  },
  {
    "path": "docs/rules/require-event-dispatcher-types.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-event-dispatcher-types'\ndescription: 'require type parameters for `createEventDispatcher`'\nsince: 'v2.16.0'\n---\n\n# svelte/require-event-dispatcher-types\n\n> require type parameters for `createEventDispatcher`\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule is aimed to enforce type parameters when calling `createEventDispatcher`. Adding types makes all `dispatch` calls as well as all event listeners typechecked. For more information, see the [svelte docs](https://github.com/sveltejs/language-tools/blob/master/docs/preprocessors/typescript.md#typing-component-events).\n\n<!--eslint-skip-->\n\n```svelte\n<script lang=\"ts\">\n  /* eslint svelte/require-event-dispatcher-types: \"error\" */\n\n  import { createEventDispatcher } from 'svelte';\n\n  /* ✓ GOOD */\n  const dispatch1 = createEventDispatcher<{ one: never; two: number }>();\n  const dispatch2 = createEventDispatcher<Record<string, never>>();\n  const dispatch3 = createEventDispatcher<any>();\n  const dispatch4 = createEventDispatcher<unknown>();\n\n  /* ✗ BAD */\n  const dispatch5 = createEventDispatcher();\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.16.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-event-dispatcher-types.ts)\n"
  },
  {
    "path": "docs/rules/require-event-prefix.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-event-prefix'\ndescription: 'require component event names to start with \"on\"'\nsince: 'v3.6.0'\n---\n\n# svelte/require-event-prefix\n\n> require component event names to start with \"on\"\n\n## :book: Rule Details\n\nStarting with Svelte 5, component events are just component props that are functions and so can be called like any function. Events for HTML elements all have their name begin with \"on\" (e.g. `onclick`). This rule enforces that all component events (i.e. function props) also begin with \"on\".\n\n<!--eslint-skip-->\n\n```svelte\n<script lang=\"ts\">\n  /* eslint svelte/require-event-prefix: \"error\" */\n\n  /* ✓ GOOD */\n\n  interface Props {\n    regularProp: string;\n    onclick(): void;\n  }\n\n  let { regularProp, onclick }: Props = $props();\n</script>\n```\n\n```svelte\n<script lang=\"ts\">\n  /* eslint svelte/require-event-prefix: \"error\" */\n\n  /* ✗ BAD */\n\n  interface Props {\n    click(): void;\n  }\n\n  let { click }: Props = $props();\n</script>\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/require-event-prefix\": [\n    \"error\",\n    {\n      \"checkAsyncFunctions\": false\n    }\n  ]\n}\n```\n\n- `checkAsyncFunctions` ... Whether to also report asychronous function properties. Default `false`.\n\n## :books: Further Reading\n\n- [Svelte docs on events in version 5](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.6.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-event-prefix.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-event-prefix.ts)\n"
  },
  {
    "path": "docs/rules/require-optimized-style-attribute.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-optimized-style-attribute'\ndescription: 'require style attributes that can be optimized'\nsince: 'v0.32.0'\n---\n\n# svelte/require-optimized-style-attribute\n\n> require style attributes that can be optimized\n\n## :book: Rule Details\n\nThis rule reports `style` attributes written in a format that cannot be optimized.\n\nSvelte parses the content written in the style attribute and tries to optimize it. (See [https://github.com/sveltejs/svelte/pull/810](https://github.com/sveltejs/svelte/pull/810))\\\nIf Svelte can be successfully optimized, Svelte can minimize the number of re-renders.\n\ne.g.\n\ntemplate:\n\n```html\n<div\n  style=\"\n    font-size: 12px;\n    color: {color};\n    transform: translate({x}px, {y}px);\n  \"\n/>\n```\n\ncompiled:\n\n```js\ndiv.style.setProperty('font-size', '12px'); // font-size style is not updated once it is initially set.\ndiv.style.setProperty('color', color); // color style is updated only when color variable is updated.\ndiv.style.setProperty('transform', `translate(${x}px, ${y}px)`); // transform style is updated only when x, or y variables are updated.\n```\n\nHowever, if the optimization fails, it will be re-rendered triggered by the update of all variables described in the style attribute.\n\ne.g.\n\ntemplate:\n\n```html\n<script>\n  $: transformStyle = `transform: translate(${x}px, ${y}px)`;\n</script>\n\n<div\n  style=\"\n    font-size: 12px;\n    color: {color};\n    {transformStyle}\n  \"\n/>\n```\n\ncompiled:\n\n```js\n// If any of variables color, x, or y are updated, all styles will be updated.\ndiv.setAttribute('style', `font-size: 12px; color: ${color}; ${/* transformStyle */ ctx[0]}`);\n```\n\nExamples:\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/require-optimized-style-attribute: \"error\" */\n  let color = 'blue';\n  let x = 12,\n    y = 12;\n</script>\n\n<!-- ✓ GOOD -->\n<div style=\"font-size: 12px; color: {color}; transform: translate({x}px, {y}px);\" />\n<div style:pointer-events={pointerEvents ? null : 'none'} />\n\n<!-- ✗ BAD -->\n<div style=\"font-size: 12px; color: {color}; {transformStyle}\" />\n<div style={pointerEvents === false ? 'pointer-events:none;' : ''} />\n\n<div style=\"font-size: 12px; /* comment */ color: {color};\" />\n<div style=\"font-size: 12px; {key}: red;\" />\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.32.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-optimized-style-attribute.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-optimized-style-attribute.ts)\n"
  },
  {
    "path": "docs/rules/require-store-callbacks-use-set-param.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-store-callbacks-use-set-param'\ndescription: 'store callbacks must use `set` param'\nsince: 'v2.12.0'\n---\n\n# svelte/require-store-callbacks-use-set-param\n\n> store callbacks must use `set` param\n\n- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\n\n## :book: Rule Details\n\nThis rule disallows if `readable` / `writable` store's setter function doesn't use `set` parameter.<br>\nThis rule doesn't check `derived` store. Therefore if you set a updated value asynchronously, please don't forget to use `set` function.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/require-store-callbacks-use-set-param: \"error\" */\n  import { readable, writable, derived } from 'svelte/store';\n\n  /** ✓ GOOD  */\n  readable(null, (set) => {\n    set(new Date());\n    const interval = setInterval(() => set(new Date()), 1000);\n    return () => clearInterval(interval);\n  });\n\n  // `set` is unused but this rule doesn't report.\n  // For that, please use `no-unused-vars` rule.\n  // refer: https://eslint.org/docs/latest/rules/no-unused-vars\n  readable(false, (set) => true);\n\n  writable(null, (set) => {\n    set(1);\n    return () => {\n      /* no more subscribers */\n    };\n  });\n\n  writable(false, (set) => true);\n\n  derived(a, ($a) => $a * 2);\n  derived(\n    a,\n    ($a, set) => {\n      setTimeout(() => set($a), 1000);\n    },\n    'one moment...'\n  );\n\n  /** ✗ BAD  */\n  readable(false, () => true);\n  readable(false, (foo) => true);\n\n  writable(false, () => true);\n  writable(false, (foo) => true);\n</script>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :books: Further Reading\n\n- [Svelte - Docs > RUN TIME > svelte/store](https://svelte.dev/docs#run-time-svelte-store)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.12.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-store-callbacks-use-set-param.ts)\n"
  },
  {
    "path": "docs/rules/require-store-reactive-access.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-store-reactive-access'\ndescription: 'disallow to use of the store itself as an operand. Need to use $ prefix or get function.'\nsince: 'v2.12.0'\n---\n\n# svelte/require-store-reactive-access\n\n> disallow to use of the store itself as an operand. Need to use $ prefix or get function.\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n- :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.\n\n## :book: Rule Details\n\nThis rule disallow to use of the store itself as an operand.\\\nYou should access the store value using the `$` prefix or the `get` function.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/require-store-reactive-access: \"error\" */\n  import { writable, get } from 'svelte/store';\n  const storeValue = writable('world');\n  const color = writable('red');\n\n  /* ✓ GOOD */\n  $: message = `Hello ${$storeValue}`;\n\n  /* ✗ BAD */\n  $: message = `Hello ${storeValue}`;\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$storeValue}</p>\n<p>{get(storeValue)}</p>\n\n<p class={$storeValue} />\n<p style:color={$color} />\n\n<MyComponent prop=\"Hello {$storeValue}\" />\n<MyComponent bind:this={$storeValue} />\n<MyComponent --style-props={$storeValue} />\n<MyComponent {...$storeValue} />\n\n<!-- ✗ BAD -->\n<p>{storeValue}</p>\n\n<p class={storeValue} />\n<p style:color />\n\n<MyComponent prop=\"Hello {storeValue}\" />\n<MyComponent bind:this={storeValue} />\n<MyComponent --style-props={storeValue} />\n<MyComponent {...storeValue} />\n```\n\nThis rule checks the usage of store variables only if the store can be determined within a single file.\nHowever, when using `@typescript-eslint/parser` and full type information, this rule uses the type information to determine if the expression is a store.\n\n<!--eslint-skip-->\n\n```ts\n// fileName: my-stores.ts\nimport { writable } from 'svelte/store';\nexport const storeValue = writable('hello');\n```\n\n<!--eslint-skip-->\n\n```svelte\n<script lang=\"ts\">\n  /* eslint svelte/require-store-reactive-access: \"error\" */\n  import { storeValue } from './my-stores';\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$storeValue}</p>\n\n<!-- ✗ BAD -->\n<p>{storeValue}</p>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.12.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-store-reactive-access.ts)\n"
  },
  {
    "path": "docs/rules/require-stores-init.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/require-stores-init'\ndescription: 'require initial value in store'\nsince: 'v2.5.0'\n---\n\n# svelte/require-stores-init\n\n> require initial value in store\n\n## :book: Rule Details\n\nThis rule is aimed to enforce initial values when initializing the Svelte stores.\n\n<!--eslint-skip-->\n\n```js\n/* eslint svelte/require-stores-init: \"error\" */\n\nimport { writable, readable, derived } from 'svelte/store';\n\n/* ✓ GOOD */\nexport const w1 = writable(false);\nexport const r1 = readable({});\nexport const d1 = derived([a, b], () => {}, false);\n\n/* ✗ BAD */\nexport const w2 = writable();\nexport const r2 = readable();\nexport const d2 = derived([a, b], () => {});\n```\n\n## :wrench: Options\n\nNothing.\n\n## :heart: Compatibility\n\nThis rule was taken from [@tivac/eslint-plugin-svelte].\\\nThis rule is compatible with `@tivac/svelte/stores-initial-value` rule.\n\n[@tivac/eslint-plugin-svelte]: https://github.com/tivac/eslint-plugin-svelte/\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/require-stores-init.ts)\n"
  },
  {
    "path": "docs/rules/shorthand-attribute.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/shorthand-attribute'\ndescription: 'enforce use of shorthand syntax in attribute'\nsince: 'v0.5.0'\n---\n\n# svelte/shorthand-attribute\n\n> enforce use of shorthand syntax in attribute\n\n- :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.\n\n## :book: Rule Details\n\nThis rule enforces the use of the shorthand syntax in attribute.\n\n<!-- prettier-ignore-start -->\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/shorthand-attribute: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<button {disabled}>...</button>\n\n<!-- ✗ BAD -->\n<button disabled={disabled}>...</button>\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/shorthand-attribute\": [\n    \"error\",\n    {\n      \"prefer\": \"always\" // \"never\"\n    }\n  ]\n}\n```\n\n- `prefer`\n  - `\"always\"` ... Expects that the shorthand will be used whenever possible. This is default.\n  - `\"never\"` ... Ensures that no shorthand is used in any attribute.\n\n## :couple: Related Rules\n\n- [svelte/shorthand-directive]\n\n[svelte/shorthand-directive]: ./shorthand-directive.md\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.5.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/shorthand-attribute.ts)\n"
  },
  {
    "path": "docs/rules/shorthand-directive.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/shorthand-directive'\ndescription: 'enforce use of shorthand syntax in directives'\nsince: 'v0.24.0'\n---\n\n# svelte/shorthand-directive\n\n> enforce use of shorthand syntax in directives\n\n- :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.\n\n## :book: Rule Details\n\nThis rule enforces the use of the shorthand syntax in directives.\n\n<!-- prettier-ignore-start -->\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/shorthand-directive: \"error\" */\n  let value = 'hello!'\n  let active = true\n  let color = 'red'\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value>\n<div class:active>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<input bind:value={value}>\n<div class:active={active}>...</div>\n<div style:color={color}>...</div>\n```\n\n<!-- prettier-ignore-end -->\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/shorthand-directive\": [\n    \"error\",\n    {\n      \"prefer\": \"always\" // \"never\"\n    }\n  ]\n}\n```\n\n- `prefer`\n  - `\"always\"` ... Expects that the shorthand will be used whenever possible. This is default.\n  - `\"never\"` ... Ensures that no shorthand is used in any directive.\n\n## :couple: Related Rules\n\n- [svelte/shorthand-attribute]\n\n[svelte/shorthand-attribute]: ./shorthand-directive.md\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.24.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/shorthand-directive.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/shorthand-directive.ts)\n"
  },
  {
    "path": "docs/rules/sort-attributes.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/sort-attributes'\ndescription: 'enforce order of attributes'\nsince: 'v2.4.0'\n---\n\n# svelte/sort-attributes\n\n> enforce order of attributes\n\n- :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.\n\n## :book: Rule Details\n\nThis rule aims to enforce ordering of attributes.\\\nThe default order is:\n\n- `this` property.\n- `bind:this` directive.\n- `id` attribute.\n- `name` attribute.\n- `slot` attribute.\n- `--style-props` (Alphabetical order within the same group.)\n- `style` attribute, and `style:` directives.\n- `class` attribute.\n- `class:` directives. (Alphabetical order within the same group.)\n- other attributes. (Alphabetical order within the same group.)\n- `bind:` directives (other then `bind:this`), and `on:` directives.\n- `use:` directives. (Alphabetical order within the same group.)\n- `transition:` directive.\n- `in:` directive.\n- `out:` directive.\n- `animate:` directive.\n- `let:` directives. (Alphabetical order within the same group.)\n\n<!-- prettier-ignore-start -->\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/sort-attributes: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<svelte:component\n  this={component}\n  --style-props={color}\n  bind:value={componentValue}\n  on:changeValue={handleChange}\n  bind:metaData\n/>\n<input\n  bind:this={foo}\n  id=\"foo\"\n  style=\"width: 150px;\"\n  style:color\n  class=\"my-input\"\n  class:disable\n  class:enable={!disable}\n  bind:value={inputValue}\n  use:action={parameters}\n  transition:fn\n  in:fn\n  out:fn\n  animate:name\n/>\n<slot name=\"content\" {abc} {def} />\n\n<!-- ✗ BAD -->\n<svelte:component\n  bind:value={componentValue}\n  this={component}\n  on:changeValue={handleChange}\n  {def}\n  data-foo\n  {abc}\n  bind:metaData\n  --style-props={color}\n/>\n<input\n  id=\"foo\"\n  bind:this={foo}\n  style:color\n  style=\"width: 150px;\"\n  class=\"my-input\"\n  class:enable={!disable}\n  class:disable\n  animate:name\n  use:action\n  transition:fn\n  bind:value={inputValue}\n  in:fn\n  out:fn\n/>\n<slot name=\"content\" {def} {abc} data-foo />\n```\n\n<!-- prettier-ignore-end -->\n\nIf there is a spread attribute between the attributes, it will not be reported as changing the order can change the behavior.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/sort-attributes: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n<div c d {...attrs} a b />\n\n<!-- ✗ BAD -->\n<div d c {...attrs} b a />\n```\n\n## :wrench: Options\n\n```jsonc\n{\n  \"svelte/sort-attributes\": [\n    \"error\",\n    {\n      \"order\": [\n        // `this` property.\n        \"this\",\n        // `bind:this` directive.\n        \"bind:this\",\n        // `id` attribute.\n        \"id\",\n        // `name` attribute.\n        \"name\",\n        // `slot` attribute.\n        \"slot\",\n        // `--style-props` (Alphabetical order within the same group.)\n        { \"match\": \"/^--/u\", \"sort\": \"alphabetical\" },\n        // `style` attribute, and `style:` directives.\n        [\"style\", \"/^style:/u\"],\n        // `class` attribute.\n        \"class\",\n        // `class:` directives. (Alphabetical order within the same group.)\n        { \"match\": \"/^class:/u\", \"sort\": \"alphabetical\" },\n        // other attributes. (Alphabetical order within the same group.)\n        {\n          \"match\": [\"!/:/u\", \"!/^(?:this|id|name|style|class)$/u\", \"!/^--/u\"],\n          \"sort\": \"alphabetical\"\n        },\n        // `bind:` directives (other then `bind:this`), and `on:` directives.\n        [\"/^bind:/u\", \"!bind:this\", \"/^on:/u\"],\n        // `use:` directives. (Alphabetical order within the same group.)\n        { \"match\": \"/^use:/u\", \"sort\": \"alphabetical\" },\n        // `transition:` directive.\n        { \"match\": \"/^transition:/u\", \"sort\": \"alphabetical\" },\n        // `in:` directive.\n        { \"match\": \"/^in:/u\", \"sort\": \"alphabetical\" },\n        // `out:` directive.\n        { \"match\": \"/^out:/u\", \"sort\": \"alphabetical\" },\n        // `animate:` directive.\n        { \"match\": \"/^animate:/u\", \"sort\": \"alphabetical\" },\n        // `let:` directives. (Alphabetical order within the same group.)\n        { \"match\": \"/^let:/u\", \"sort\": \"alphabetical\" }\n      ]\n    }\n  ]\n}\n```\n\n- `order` ... Specify an array of your preferred attribute order. Array elements accept strings, string arrays, and objects.\n  - String ... Specify the name or pattern of the attribute.\n  - String array ... Specifies an array of the names or patterns of the attributes to be grouped. It will not be sorted within this same group.\n  - Object ... Specifies an object with a definition for sorting within the same group.\n    - `match` ... Specifies an array or string of the name or pattern of the attributes to be grouped.\n    - `sort` ... Specify the sorting method. Currently, only `\"alphabetical\"` is supported.\n      - `\"alphabetical\"` ... Sorts the attributes of the same group in alphabetical order.\n      - `\"ignore\"` ... Attributes in the same group are not sorted.\n\nNote that the behavior may change depending on how you specify the `order` setting.\\\nFor example, `bind:value` and `on:input={() => console.log(value)}` behave differently depending on the order. See <https://svelte.dev/docs#template-syntax-element-directives-bind-property> for details.\\\nBy default it is designed to be sorted safely.\n\nYou can use the following formats for names or patterns:\n\n- `\"foo\"` ... Matches only the `foo` attribute name.\n- `\"/foo/\"` ... Matches attribute names that match the `/foo/` regex. That is, it matches the attribute name including `foo`.\n- `\"!foo\"` ... Exclude `foo` attribute from the matched attribute names. When used first in the array or alone, matches other than the `foo` attribute name.\n- `\"!/foo/\"` ... Excludes attributes that match the `/foo/` regex from the matched attribute names. When used first in the array or alone, matches an attribute name that does not match the `/foo/` regex.\n- `[\"style\", \"/^style:/u\"]` ... Matches the `style` attribute or the attribute name that matches the `/^style:/u` regex.\n- `[\"/^bind:/u\", \"!bind:this\", \"/^on:/u\"]` ... Matches an attribute name that matches `/^bind:/u` and other than `bind:this`, or an attribute name that matches `/^on:/u`.\n\n### `{ order: [ /*See below*/ ] }`\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/sort-attributes: [\"error\", {\n    \"order\": [\n      \"id\",\n      \"class\",\n      \"/^class:/u\",\n      \"value\",\n      \"src\",\n      \"/^data-/u\",\n      \"style\",\n      \"/^style:/u\",\n      \"/^on:/u\",\n      \"/^use:/u\",\n      \"/^animate:/u\",\n      \"/^transition:/u\",\n      \"/^in:/u\",\n      \"/^out:/u\",\n      \"bind:this\",\n      [\"/^bind:/u\", \"!bind:this\"],\n      {\n        \"match\": [\"!/:/u\", \"!/^(?:id|class|value|src|style)$/u\", \"!/^data-/u\"],\n        \"sort\": \"alphabetical\"\n      },\n    ]\n  }] */\n</script>\n\n<!-- ✓ GOOD -->\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n  id=\"foo\"\n  class=\"my-block\"\n  class:bar\n  value=\"abc\"\n  data-value=\"x\"\n  style=\"width: 30px;\"\n  style:color\n  animate:name\n  transition:fn\n  in:fn\n  out:fn\n  bind:this={foo}\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n\n<!-- ✗ BAD -->\n<MyComponent bind:data bind:this={comp} {abc} {def} data-foo />\n<input\n  class:bar\n  class=\"my-block\"\n  id=\"foo\"\n  bind:this={foo}\n  value=\"abc\"\n  style:color\n  style=\"width: 30px;\"\n  data-value=\"x\"\n  animate:name\n  in:fn\n  out:fn\n  transition:fn\n/>\n<img alt=\"bar\" {src} id=\"bar\" />\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.4.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/sort-attributes.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/sort-attributes.ts)\n"
  },
  {
    "path": "docs/rules/spaced-html-comment.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/spaced-html-comment'\ndescription: 'enforce consistent spacing after the `<!--` and before the `-->` in a HTML comment'\nsince: 'v0.0.1'\n---\n\n# svelte/spaced-html-comment\n\n> enforce consistent spacing after the `<!--` and before the `-->` in a HTML comment\n\n- :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.\n\n## :book: Rule Details\n\nThis rule will enforce consistency of spacing after the start of a comment `<!--` and before the end of a comment `-->`.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/spaced-html-comment: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n\n<!--✗ BAD-->\n```\n\nYou cannot enforce this style by using [prettier-plugin-svelte]. That is, this rule does not conflict with [prettier-plugin-svelte] and can be used with [prettier-plugin-svelte].\n\n[prettier-plugin-svelte]: https://github.com/sveltejs/prettier-plugin-svelte\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/spaced-html-comment\": [\n    \"error\",\n    \"always\" // or \"never\"\n  ]\n}\n```\n\n- `\"always\"` ... There must be at least one whitespace after `<!--` and before `-->`.\n- `\"never\"` ... There should be no leading or trailing whitespace. There should be no whitespace following.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.1\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/spaced-html-comment.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/spaced-html-comment.ts)\n"
  },
  {
    "path": "docs/rules/system.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/system'\ndescription: 'system rule for working this plugin'\nsince: 'v0.0.13'\n---\n\n# svelte/system\n\n> system rule for working this plugin\n\n- :gear: This rule is included in `\"plugin:svelte/base\"` and `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule is a system rule to make the plugin work. This rule does not report any errors, but make sure the rule is enabled for this plugin to work properly.\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.0.13\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/system.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/system.ts)\n"
  },
  {
    "path": "docs/rules/valid-compile.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/valid-compile'\ndescription: 'disallow warnings when compiling.'\nsince: 'v0.7.0'\n---\n\n# svelte/valid-compile\n\n> disallow warnings when compiling.\n\n## :book: Rule Details\n\nThis rule uses Svelte compiler to check the source code.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/valid-compile: \"error\" */\n  let src = 'tutorial/image.gif';\n</script>\n\n<!-- ✓ GOOD -->\n<img {src} alt=\"Rick Astley dances.\" />\n\n<!-- ✗ BAD -->\n<img {src} />\n```\n\nNote that we exclude reports for some checks, such as `missing-declaration`, and `dynamic-slot-name`, which you can check with different ESLint rules.\n\n### Using `svelte.config.js`\n\nIf you want to suppress messages using [`warningFilter`](https://svelte.dev/docs/svelte/svelte-compiler#ModuleCompileOptions) or `onwarn` like [`vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn), Use `eslint.config.js` and specify the information in `svelte.config.js` in your parser configuration.\n\n```js\nimport svelteConfig from './svelte.config.js';\nexport default [\n  // ...\n  {\n    files: ['**/*.svelte', '*.svelte'],\n    languageOptions: {\n      parserOptions: {\n        svelteConfig: svelteConfig\n      }\n    }\n  }\n];\n```\n\nSee also [User Guide > Configuration](../user-guide.md#configuration)\n\n#### warningFilter\n\nThis rule can use [`warningFilter`](https://svelte.dev/docs/svelte/svelte-compiler#ModuleCompileOptions).\n\nExample:\n\n```js\n// svelte.config.js\nexport default {\n  warningFilter: (warning) => {\n    if (warning.code === 'a11y-distracting-elements') return false;\n    if (warning.code === 'a11y_distracting_elements') return false; // for Svelte v5\n    return true;\n  }\n};\n```\n\n#### onwarn\n\nThis rule can use `onwarn` like [`vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn).\n\nExample:\n\n```js\n// svelte.config.js\nexport default {\n  onwarn: (warning, handler) => {\n    if (warning.code === 'a11y-distracting-elements') return;\n    if (warning.code === 'a11y_distracting_elements') return; // for Svelte v5\n\n    handler(warning);\n  }\n};\n```\n\n## :wrench: Options\n\n```json\n{\n  \"svelte/valid-compile\": [\n    \"error\",\n    {\n      \"ignoreWarnings\": false\n    }\n  ]\n}\n```\n\n- `ignoreWarnings` ... If set to `true`, ignores any warnings other than fatal errors reported by the svelte compiler.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/valid-compile: [\"error\", { ignoreWarnings: true }] */\n  let src = 'tutorial/image.gif';\n</script>\n\n<!-- Ignore -->\n<img {src} />\n```\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v0.7.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/valid-compile.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/valid-compile.ts)\n"
  },
  {
    "path": "docs/rules/valid-each-key.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/valid-each-key'\ndescription: 'enforce keys to use variables defined in the `{#each}` block'\nsince: 'v2.28.0'\n---\n\n# svelte/valid-each-key\n\n> enforce keys to use variables defined in the `{#each}` block\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports that `{#each}` block keys does not use the variables which are defined by the `{#each}` block.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/valid-each-key: \"error\" */\n\n  let things = [\n    { id: 1, name: 'apple' },\n    { id: 2, name: 'banana' },\n    { id: 3, name: 'carrot' },\n    { id: 4, name: 'doughnut' },\n    { id: 5, name: 'egg' }\n  ];\n  let foo = 42;\n</script>\n\n<!-- ✓ GOOD -->\n{#each things as thing (thing.id)}\n  <Thing name={thing.name} />\n{/each}\n\n<!-- ✗ BAD -->\n{#each things as thing (foo)}\n  <Thing name={thing.name} />\n{/each}\n```\n\n## :wrench: Options\n\nNothing.\n\n## :couple: Related Rules\n\n- [svelte/require-each-key](./require-each-key.md)\n\n## :books: Further Reading\n\n- [Svelte - Tutorial > Basic Svelte / Logic / Keyed each blocks](https://svelte.dev/tutorial/svelte/keyed-each-blocks)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.28.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/valid-each-key.ts)\n"
  },
  {
    "path": "docs/rules/valid-prop-names-in-kit-pages.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/valid-prop-names-in-kit-pages'\ndescription: 'disallow props other than data or errors in SvelteKit page components.'\nsince: 'v2.12.0'\n---\n\n# svelte/valid-prop-names-in-kit-pages\n\n> disallow props other than data or errors in SvelteKit page components.\n\n- :gear: This rule is included in `\"plugin:svelte/recommended\"`.\n\n## :book: Rule Details\n\nThis rule reports unexpected exported variables at `<script>`.<br>\nAt SvelteKit v1.0.0-next.405, instead of having multiple props corresponding to the props returned from a load function, page components now have a single data prop.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/valid-prop-names-in-kit-pages: \"error\" */\n  /** ✓ GOOD */\n  export let data;\n  export let errors;\n  export let form;\n  export let params;\n  export let snapshot;\n  // export let { data, errors } = { data: {}, errors: {} }\n\n  /** ✗ BAD */\n  export let foo;\n  export let bar;\n  export let { baz, qux } = data;\n  export let { data: data2, errors: errors2 } = { data: {}, errors: {} };\n</script>\n\n{foo}, {bar}\n```\n\n## :wrench: Options\n\nNothing. But if use are using not default routes folder, please set configuration according to the [user guide](../user-guide.md#settings-svelte).\n\n## :books: Further Reading\n\n- [SvelteKit Migration Guide (v1.0.0-next.405)](https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292707)\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v2.12.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/valid-prop-names-in-kit-pages.ts)\n"
  },
  {
    "path": "docs/rules/valid-style-parse.md",
    "content": "---\npageClass: 'rule-details'\nsidebarDepth: 0\ntitle: 'svelte/valid-style-parse'\ndescription: 'require valid style element parsing'\nsince: 'v3.0.0'\n---\n\n# svelte/valid-style-parse\n\n> require valid style element parsing\n\n## :book: Rule Details\n\nThis rule reports issues with parsing of the `<style>` element by the svelte-eslint-parser.\n\n<!--eslint-skip-->\n\n```svelte\n<script>\n  /* eslint svelte/valid-style-parse: [\"error\"] */\n</script>\n\n<!-- ✓ GOOD -->\n<style>\n  .class {\n    font-weight: bold;\n  }\n</style>\n```\n\n```svelte\n<script>\n  /* eslint svelte/valid-style-parse: [\"error\"] */\n</script>\n\n<!-- ✓ GOOD -->\n<style lang=\"scss\">\n  .class {\n    font-weight: bold;\n  }\n</style>\n```\n\n```svelte\n<script>\n  /* eslint svelte/valid-style-parse: [\"error\"] */\n</script>\n\n<!-- ✗ BAD -->\n<style>\n  .class\n    font-weight: bold;\n</style>\n```\n\n```svelte\n<script>\n  /* eslint svelte/valid-style-parse: [\"error\"] */\n</script>\n\n<!-- ✗ BAD -->\n<style lang=\"unknown\">\n  .class {\n    font-weight: bold;\n  }\n</style>\n```\n\n## :wrench: Options\n\nNothing.\n\n## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte v3.0.0\n\n## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/valid-style-parse.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/valid-style-parse.ts)\n"
  },
  {
    "path": "docs/rules.md",
    "content": "---\nsidebarDepth: 0\n---\n\n# Available Rules\n\n:wrench: Indicates that the rule is fixable, and using `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the reported problems.\\\n:bulb: Indicates that some problems reported by the rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\\\n:star: Indicates that the rule is included in the `plugin:svelte/recommended` config.\n\n<!-- This file is automatically generated in tools/update-docs-rules-index.js, do not change! -->\n\n## Possible Errors\n\nThese rules relate to possible syntax or logic errors in Svelte code:\n\n| Rule ID                                                                                          | Description                                                                                                                            |                |\n| :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------- |\n| [svelte/infinite-reactive-loop](./rules/infinite-reactive-loop.md)                               | Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent. | :star:         |\n| [svelte/no-dom-manipulating](./rules/no-dom-manipulating.md)                                     | disallow DOM manipulating                                                                                                              | :star:         |\n| [svelte/no-dupe-else-if-blocks](./rules/no-dupe-else-if-blocks.md)                               | disallow duplicate conditions in `{#if}` / `{:else if}` chains                                                                         | :star:         |\n| [svelte/no-dupe-on-directives](./rules/no-dupe-on-directives.md)                                 | disallow duplicate `on:` directives                                                                                                    | :star:         |\n| [svelte/no-dupe-style-properties](./rules/no-dupe-style-properties.md)                           | disallow duplicate style properties                                                                                                    | :star:         |\n| [svelte/no-dupe-use-directives](./rules/no-dupe-use-directives.md)                               | disallow duplicate `use:` directives                                                                                                   | :star:         |\n| [svelte/no-not-function-handler](./rules/no-not-function-handler.md)                             | disallow use of not function in event handler                                                                                          | :star:         |\n| [svelte/no-object-in-text-mustaches](./rules/no-object-in-text-mustaches.md)                     | disallow objects in text mustache interpolation                                                                                        | :star:         |\n| [svelte/no-raw-special-elements](./rules/no-raw-special-elements.md)                             | Checks for invalid raw HTML elements                                                                                                   | :star::wrench: |\n| [svelte/no-reactive-reassign](./rules/no-reactive-reassign.md)                                   | disallow reassigning reactive values                                                                                                   | :star:         |\n| [svelte/no-shorthand-style-property-overrides](./rules/no-shorthand-style-property-overrides.md) | disallow shorthand style properties that override related longhand properties                                                          | :star:         |\n| [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:         |\n| [svelte/no-top-level-browser-globals](./rules/no-top-level-browser-globals.md)                   | disallow using top-level browser global variables                                                                                      |                |\n| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md)     | disallow unknown `style:property`                                                                                                      | :star:         |\n| [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:         |\n| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param                                                                                                   | :bulb:         |\n| [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: |\n| [svelte/valid-compile](./rules/valid-compile.md)                                                 | disallow warnings when compiling.                                                                                                      |                |\n| [svelte/valid-style-parse](./rules/valid-style-parse.md)                                         | require valid style element parsing                                                                                                    |                |\n\n## Security Vulnerability\n\nThese rules relate to security vulnerabilities in Svelte code:\n\n| Rule ID                                              | Description                                                              |        |\n| :--------------------------------------------------- | :----------------------------------------------------------------------- | :----- |\n| [svelte/no-at-html-tags](./rules/no-at-html-tags.md) | disallow use of `{@html}` to prevent XSS attack                          | :star: |\n| [svelte/no-target-blank](./rules/no-target-blank.md) | disallow `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"` |        |\n\n## Best Practices\n\nThese rules relate to better ways of doing things to help you avoid problems:\n\n| Rule ID                                                                                  | Description                                                                                                                               |                |\n| :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :------------- |\n| [svelte/block-lang](./rules/block-lang.md)                                               | disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks. | :bulb:         |\n| [svelte/button-has-type](./rules/button-has-type.md)                                     | disallow usage of button without an explicit type attribute                                                                               |                |\n| [svelte/no-add-event-listener](./rules/no-add-event-listener.md)                         | Warns against the use of `addEventListener`                                                                                               | :bulb:         |\n| [svelte/no-at-debug-tags](./rules/no-at-debug-tags.md)                                   | disallow the use of `{@debug}`                                                                                                            | :star::bulb:   |\n| [svelte/no-ignored-unsubscribe](./rules/no-ignored-unsubscribe.md)                       | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.                                                  |                |\n| [svelte/no-immutable-reactive-statements](./rules/no-immutable-reactive-statements.md)   | disallow reactive statements that don't reference reactive values.                                                                        | :star:         |\n| [svelte/no-inline-styles](./rules/no-inline-styles.md)                                   | disallow attributes and directives that produce inline styles                                                                             |                |\n| [svelte/no-inspect](./rules/no-inspect.md)                                               | Warns against the use of `$inspect` directive                                                                                             | :star:         |\n| [svelte/no-reactive-functions](./rules/no-reactive-functions.md)                         | it's not necessary to define functions in reactive statements                                                                             | :star::bulb:   |\n| [svelte/no-reactive-literals](./rules/no-reactive-literals.md)                           | don't assign literal values in reactive statements                                                                                        | :star::bulb:   |\n| [svelte/no-svelte-internal](./rules/no-svelte-internal.md)                               | svelte/internal will be removed in Svelte 6.                                                                                              | :star:         |\n| [svelte/no-unnecessary-state-wrap](./rules/no-unnecessary-state-wrap.md)                 | Disallow unnecessary $state wrapping of reactive classes                                                                                  | :star::bulb:   |\n| [svelte/no-unused-class-name](./rules/no-unused-class-name.md)                           | disallow the use of a class in the template without a corresponding style                                                                 |                |\n| [svelte/no-unused-props](./rules/no-unused-props.md)                                     | Warns about defined Props properties that are unused                                                                                      | :star:         |\n| [svelte/no-unused-svelte-ignore](./rules/no-unused-svelte-ignore.md)                     | disallow unused svelte-ignore comments                                                                                                    | :star:         |\n| [svelte/no-useless-children-snippet](./rules/no-useless-children-snippet.md)             | disallow explicit children snippet where it's not needed                                                                                  | :star:         |\n| [svelte/no-useless-mustaches](./rules/no-useless-mustaches.md)                           | disallow unnecessary mustache interpolations                                                                                              | :star::wrench: |\n| [svelte/prefer-const](./rules/prefer-const.md)                                           | Require `const` declarations for variables that are never reassigned after declared                                                       | :wrench:       |\n| [svelte/prefer-destructured-store-props](./rules/prefer-destructured-store-props.md)     | destructure values from object stores for better change tracking & fewer redraws                                                          | :bulb:         |\n| [svelte/prefer-writable-derived](./rules/prefer-writable-derived.md)                     | Prefer using writable $derived instead of $state and $effect                                                                              | :star::bulb:   |\n| [svelte/require-each-key](./rules/require-each-key.md)                                   | require keyed `{#each}` block                                                                                                             | :star:         |\n| [svelte/require-event-dispatcher-types](./rules/require-event-dispatcher-types.md)       | require type parameters for `createEventDispatcher`                                                                                       | :star:         |\n| [svelte/require-optimized-style-attribute](./rules/require-optimized-style-attribute.md) | require style attributes that can be optimized                                                                                            |                |\n| [svelte/require-stores-init](./rules/require-stores-init.md)                             | require initial value in store                                                                                                            |                |\n| [svelte/valid-each-key](./rules/valid-each-key.md)                                       | enforce keys to use variables defined in the `{#each}` block                                                                              | :star:         |\n\n## Stylistic Issues\n\nThese rules relate to style guidelines, and are therefore quite subjective:\n\n| Rule ID                                                                                                  | Description                                                                        |          |\n| :------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- | :------- |\n| [svelte/consistent-selector-style](./rules/consistent-selector-style.md)                                 | enforce a consistent style for CSS selectors                                       |          |\n| [svelte/derived-has-same-inputs-outputs](./rules/derived-has-same-inputs-outputs.md)                     | derived store should use same variable names between values and callback           | :bulb:   |\n| [svelte/first-attribute-linebreak](./rules/first-attribute-linebreak.md)                                 | enforce the location of first attribute                                            | :wrench: |\n| [svelte/html-closing-bracket-new-line](./rules/html-closing-bracket-new-line.md)                         | Require or disallow a line break before tag's closing brackets                     | :wrench: |\n| [svelte/html-closing-bracket-spacing](./rules/html-closing-bracket-spacing.md)                           | require or disallow a space before tag's closing brackets                          | :wrench: |\n| [svelte/html-quotes](./rules/html-quotes.md)                                                             | enforce quotes style of HTML attributes                                            | :wrench: |\n| [svelte/html-self-closing](./rules/html-self-closing.md)                                                 | enforce self-closing style                                                         | :wrench: |\n| [svelte/indent](./rules/indent.md)                                                                       | enforce consistent indentation                                                     | :wrench: |\n| [svelte/max-attributes-per-line](./rules/max-attributes-per-line.md)                                     | enforce the maximum number of attributes per line                                  | :wrench: |\n| [svelte/max-lines-per-block](./rules/max-lines-per-block.md)                                             | enforce maximum number of lines in svelte component blocks                         |          |\n| [svelte/mustache-spacing](./rules/mustache-spacing.md)                                                   | enforce unified spacing in mustache                                                | :wrench: |\n| [svelte/no-extra-reactive-curlies](./rules/no-extra-reactive-curlies.md)                                 | disallow wrapping single reactive statements in curly braces                       | :bulb:   |\n| [svelte/no-restricted-html-elements](./rules/no-restricted-html-elements.md)                             | disallow specific HTML elements                                                    |          |\n| [svelte/no-spaces-around-equal-signs-in-attribute](./rules/no-spaces-around-equal-signs-in-attribute.md) | disallow spaces around equal signs in attribute                                    | :wrench: |\n| [svelte/prefer-class-directive](./rules/prefer-class-directive.md)                                       | require class directives instead of ternary expressions                            | :wrench: |\n| [svelte/prefer-style-directive](./rules/prefer-style-directive.md)                                       | require style directives instead of style attribute                                | :wrench: |\n| [svelte/require-event-prefix](./rules/require-event-prefix.md)                                           | require component event names to start with \"on\"                                   |          |\n| [svelte/shorthand-attribute](./rules/shorthand-attribute.md)                                             | enforce use of shorthand syntax in attribute                                       | :wrench: |\n| [svelte/shorthand-directive](./rules/shorthand-directive.md)                                             | enforce use of shorthand syntax in directives                                      | :wrench: |\n| [svelte/sort-attributes](./rules/sort-attributes.md)                                                     | enforce order of attributes                                                        | :wrench: |\n| [svelte/spaced-html-comment](./rules/spaced-html-comment.md)                                             | enforce consistent spacing after the `<!--` and before the `-->` in a HTML comment | :wrench: |\n\n## Extension Rules\n\nThese rules extend the rules provided by ESLint itself, or other plugins to work well in Svelte:\n\n| Rule ID                                                          | Description                                                   |          |\n| :--------------------------------------------------------------- | :------------------------------------------------------------ | :------- |\n| [svelte/no-inner-declarations](./rules/no-inner-declarations.md) | disallow variable or `function` declarations in nested blocks | :star:   |\n| [svelte/no-trailing-spaces](./rules/no-trailing-spaces.md)       | disallow trailing whitespace at the end of lines              | :wrench: |\n\n## SvelteKit\n\nThese rules relate to SvelteKit and its best Practices.\n\n| Rule ID                                                                                                        | Description                                                                                           |        |\n| :------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------- | :----- |\n| [svelte/no-export-load-in-svelte-module-in-kit-pages](./rules/no-export-load-in-svelte-module-in-kit-pages.md) | disallow exporting load functions in `*.svelte` module in SvelteKit page components.                  | :star: |\n| [svelte/no-navigation-without-resolve](./rules/no-navigation-without-resolve.md)                               | disallow internal navigation (links, `goto()`, `pushState()`, `replaceState()`) without a `resolve()` | :star: |\n| [svelte/valid-prop-names-in-kit-pages](./rules/valid-prop-names-in-kit-pages.md)                               | disallow props other than data or errors in SvelteKit page components.                                | :star: |\n\n## Experimental\n\n:warning: These rules are considered experimental and may change or be removed in the future:\n\n| Rule ID                                                                                    | Description                                                 |     |\n| :----------------------------------------------------------------------------------------- | :---------------------------------------------------------- | :-- |\n| [svelte/experimental-require-slot-types](./rules/experimental-require-slot-types.md)       | require slot type declaration using the `$$Slots` interface |     |\n| [svelte/experimental-require-strict-events](./rules/experimental-require-strict-events.md) | require the strictEvents attribute on `<script>` tags       |     |\n\n## System\n\nThese rules relate to this plugin works:\n\n| Rule ID                                                  | Description                                 |        |\n| :------------------------------------------------------- | :------------------------------------------ | :----- |\n| [svelte/comment-directive](./rules/comment-directive.md) | support comment-directives in HTML template | :star: |\n| [svelte/system](./rules/system.md)                       | system rule for working this plugin         | :star: |\n\n## Deprecated\n\n- :warning: We're going to remove deprecated rules in the next major release. Please migrate to successor/new rules.\n- :innocent: We don't fix bugs which are in deprecated rules since we don't have enough resources.\n\n| Rule ID                                                                                                      | Replaced by                                                                      |\n| :----------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------- |\n| [svelte/@typescript-eslint/no-unnecessary-condition](./rules/@typescript-eslint/no-unnecessary-condition.md) | This rule is no longer needed when using svelte-eslint-parser>=v0.19.0.          |\n| [svelte/no-dynamic-slot-name](./rules/no-dynamic-slot-name.md)                                               | Now Svelte compiler itself throws an compile error.                              |\n| [svelte/no-goto-without-base](./rules/no-goto-without-base.md)                                               | [svelte/no-navigation-without-resolve](./rules/no-navigation-without-resolve.md) |\n| [svelte/no-navigation-without-base](./rules/no-navigation-without-base.md)                                   | [svelte/no-navigation-without-resolve](./rules/no-navigation-without-resolve.md) |\n"
  },
  {
    "path": "docs/user-guide.md",
    "content": "# User Guide\n\n<!--USAGE_GUIDE_START-->\n\n## Installation\n\n### CLI\n\nThe recommended way to get started is to use the CLI.\n\n```sh\n# new project\nnpx sv create\n\n# existing project\nnpx sv add eslint\n```\n\nSee the [CLI docs](https://svelte.dev/docs/cli/eslint) for more details.\n\n### Manual Setup\n\n```sh\nnpm install --save-dev svelte eslint eslint-plugin-svelte globals\n```\n\n> [!NOTE]\n>\n> **Requirements:**\n>\n> - ESLint v8.57.1, v9.0.0, and above\n> - Node.js v18.18.0, v20.9.0, v21.1.0 and above\n\n## Usage\n\nUse `eslint.config.js` to configure rules. See [ESLint documentation](https://eslint.org/docs/latest/use/configure/configuration-files-new) for more details.\n\n### Configuration\n\n#### JavaScript project\n\n```js\n// eslint.config.js\nimport svelteConfig from './svelte.config.js';\nimport { defineConfig } from 'eslint/config';\nimport globals from 'globals';\nimport js from '@eslint/js';\nimport svelte from 'eslint-plugin-svelte';\n\nexport default defineConfig([\n  // ...\n  js.configs.recommended,\n  svelte.configs.recommended,\n  {\n    languageOptions: {\n      globals: {\n        ...globals.browser,\n        // for Sveltekit in non-SPA mode\n        ...globals.node\n      }\n    }\n  },\n  {\n    files: ['**/*.svelte', '**/*.svelte.js'],\n    languageOptions: {\n      parserOptions: {\n        // explicitly importing allows for better compatibilty and functionality with rules and other tooling that depend on the config file.\n        //\n        // Note: `eslint --cache` will fail with non-serializable properties.\n        // In those cases, please remove the non-serializable properties.\n        // svelteConfig: {\n        //   ...svelteConfig,\n        //   kit: {\n        //     ...svelteConfig.kit,\n        //     typescript: undefined\n        //   }\n        // }\n        svelteConfig\n      }\n    }\n  },\n  {\n    rules: {\n      // Override or add rule settings here, such as:\n      // 'svelte/rule-name': 'error'\n    }\n  }\n]);\n```\n\n#### TypeScript project\n\n```shell\nnpm install --save-dev typescript-eslint\n```\n\n```js\n// eslint.config.js\nimport svelteConfig from './svelte.config.js';\nimport { defineConfig } from 'eslint/config';\nimport globals from 'globals';\nimport js from '@eslint/js';\nimport ts from 'typescript-eslint';\nimport svelte from 'eslint-plugin-svelte';\n\nexport default defineConfig(\n  js.configs.recommended,\n  ts.configs.recommended,\n  svelte.configs.recommended,\n  {\n    languageOptions: {\n      globals: {\n        ...globals.browser,\n        // for Sveltekit in non-SPA mode\n        ...globals.node\n      }\n    }\n    // ...\n  },\n  {\n    files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],\n    // See more details at: https://typescript-eslint.io/packages/parser/\n    languageOptions: {\n      parserOptions: {\n        projectService: true,\n        // Enable typescript parsing for `.svelte` files.\n        extraFileExtensions: ['.svelte'],\n\n        // Specify a parser for each language, if needed:\n        // parser: {\n        //   ts: ts.parser,\n        //   typescript: ts.parser\n        //   js: espree,            // add `import espree from 'espree'`\n        // },\n        parser: ts.parser,\n\n        // explicitly importing allows for better compatibilty and functionality with rules and other tooling that depend on the config file.\n        //\n        // Note: `eslint --cache` will fail with non-serializable properties.\n        // In those cases, please remove the non-serializable properties.\n        // svelteConfig: {\n        //   ...svelteConfig,\n        //   kit: {\n        //     ...svelteConfig.kit,\n        //     typescript: undefined\n        //   }\n        // }\n        svelteConfig\n      }\n    }\n  },\n  {\n    rules: {\n      // Override or add rule settings here, such as:\n      // 'svelte/rule-name': 'error'\n    }\n  }\n);\n```\n\n> [!WARNING]\n> The TypeScript parser uses a singleton internally, meaning it only respects the options provided during its initial initialization.\n> If you try to change the options for a different file or override them later, the parser will ignore the new options, which may lead to errors.\n> For more context, see [typescript-eslint/typescript-eslint#6778](https://github.com/typescript-eslint/typescript-eslint/issues/6778).\n\n### Available Configurations\n\nThis plugin provides the following configurations:\n\n- **`svelte.configs.base`** - **Required** for Svelte parsing. Does not include any rules. Ideal for building a custom configurations.\n- **`svelte.configs.recommended`** - Extends `base` and includes rules for best practices.\n- **`svelte.configs.prettier`** - Extends `base` and disables rules that may conflict with [Prettier](https://prettier.io/). Prettier still needs to be configured to work with Svelte, for example, by using [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte).\n- **`svelte.configs.all`** - **Not Recommended** - Extends `base` and includes all rules. Subject to change with every major and minor release. Use at your own risk.\n\nFor more details, see [the rule list](./rules.md) to explore the rules provided by this plugin.\n\n### settings.svelte\n\nYou can customize the behavior of this plugin using specific settings.\n\n```js\n// eslint.config.js\nexport default defineConfig([\n  // ...\n  {\n    settings: {\n      svelte: {\n        // Specifies an array of rules to ignore reports within the template.\n        // For example, use this to disable rules in the template that may produce unavoidable false positives.\n        ignoreWarnings: [\n          '@typescript-eslint/no-unsafe-assignment',\n          '@typescript-eslint/no-unsafe-member-access'\n        ],\n\n        // Specifies options for Svelte compilation.\n        // This affects rules that rely on Svelte compilation,\n        // such as `svelte/valid-compile` and `svelte/no-unused-svelte-ignore`.\n        // Note that this setting does not impact ESLint’s custom parser.\n        compileOptions: {\n          // Specifies options related to PostCSS. You can disable the PostCSS processing by setting it to false.\n          postcss: {\n            // Specifies the path to the directory that contains the PostCSS configuration.\n            configFilePath: './path/to/my/postcss.config.js'\n          }\n        },\n\n        // Even if settings.svelte.kit is not specified, the rules will attempt to load information from svelte.config.js.\n        // However, if the default behavior does not work as expected, you should specify settings.svelte.kit explicitly.\n        // If you are using SvelteKit with a non-default configuration, you need to set the following options.\n        // The schema is a subset of SvelteKit’s configuration, so refer to the SvelteKit documentation for more details.\n        // https://svelte.dev/docs/kit/configuration\n        kit: {\n          files: {\n            routes: 'src/routes'\n          }\n        }\n      }\n    }\n  }\n  // ...\n]);\n```\n\n## Editor Integrations\n\n**Visual Studio Code**\\\nInstall [dbaeumer.vscode-eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint).\\\nConfigure `.svelte` files in `.vscode/settings.json`:\n\n<!--USAGE_GUIDE_END-->\n\n## FAQ\n\n### You're using TypeScript and the imported `*.svelte` component types cannot be resolved or appear to be\n\nYou can try [typescript-eslint-parser-for-extra-files]. Note however that it is still an experimental package.\\\nIf you know of a better solution than that please let us know.\n\n[typescript-eslint-parser-for-extra-files]: https://github.com/ota-meshi/typescript-eslint-parser-for-extra-files\n"
  },
  {
    "path": "docs-svelte-kit/eslint.config.mjs",
    "content": "import * as myPlugin from '@ota-meshi/eslint-plugin';\nimport globals from 'globals';\n\n/**\n * @type {import('eslint').Linter.Config[]}\n */\nconst config = [\n\t{\n\t\tignores: [\n\t\t\t'node_modules/',\n\t\t\t'.svelte-kit/',\n\t\t\t'build/',\n\t\t\t'shim/eslint.mjs',\n\t\t\t'shim/assert.mjs',\n\t\t\t'src/routes/*.md',\n\t\t\t'src/routes/**/*.md',\n\t\t\t'src/app.html'\n\t\t]\n\t},\n\t...myPlugin.config({\n\t\teslintPlugin: true,\n\t\tts: true,\n\t\tjson: true,\n\t\tpackageJson: true,\n\t\tyaml: true,\n\t\tmd: true,\n\t\tprettier: true,\n\t\tsvelte: { withTs: false }\n\t}),\n\t{\n\t\tlanguageOptions: {\n\t\t\tsourceType: 'module',\n\t\t\tglobals: {\n\t\t\t\t...globals.browser,\n\t\t\t\trequire: 'readonly'\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\trules: {\n\t\t\t'jsdoc/require-jsdoc': 'off',\n\t\t\t'@typescript-eslint/no-shadow': 'off',\n\t\t\t'no-shadow': 'off',\n\t\t\t'@typescript-eslint/naming-convention': 'off',\n\t\t\t'new-cap': 'off',\n\t\t\tcomplexity: 'off',\n\t\t\t'n/no-missing-import': 'off',\n\t\t\t'n/file-extension-in-import': 'off',\n\t\t\t'n/no-extraneous-import': 'off'\n\t\t}\n\t},\n\t{\n\t\tfiles: ['**/*.svelte'],\n\t\tlanguageOptions: {\n\t\t\tparserOptions: { project: null }\n\t\t}\n\t}\n];\nexport default config;\n"
  },
  {
    "path": "docs-svelte-kit/package.json",
    "content": "{\n  \"name\": \"docs\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"lint\": \"eslint --concurrency auto --cache .\",\n    \"lint-fix\": \"eslint --concurrency auto --cache . --fix\",\n    \"build\": \"cd ../packages/eslint-plugin-svelte && pnpm build && cd ../../docs-svelte-kit && pnpm run svelte-kit build\",\n    \"preview\": \"pnpm run svelte-kit preview\",\n    \"dev\": \"pnpm run svelte-kit dev\",\n    \"svelte-kit\": \"vite\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.28.3\",\n    \"@babel/types\": \"^7.28.2\",\n    \"@fontsource/fira-mono\": \"^5.2.6\",\n    \"@ota-meshi/eslint-plugin\": \"^0.19.0\",\n    \"@shikijs/markdown-it\": \"^3.12.2\",\n    \"@shikijs/twoslash\": \"^3.12.2\",\n    \"@sindresorhus/slugify\": \"^3.0.0\",\n    \"@sveltejs/adapter-static\": \"^3.0.9\",\n    \"@sveltejs/kit\": \"^2.43.1\",\n    \"@sveltejs/vite-plugin-svelte\": \"^6.1.4\",\n    \"@types/babel__core\": \"^7.20.5\",\n    \"@types/cross-spawn\": \"^6.0.6\",\n    \"@types/escape-html\": \"^1.0.4\",\n    \"@types/eslint-scope\": \"^8.3.2\",\n    \"@types/eslint-visitor-keys\": \"^3.3.2\",\n    \"@types/less\": \"^3.0.8\",\n    \"@types/markdown-it\": \"^14.1.2\",\n    \"@types/markdown-it-container\": \"^4.0.0\",\n    \"@types/markdown-it-emoji\": \"^3.0.1\",\n    \"@types/node\": \"^22.18.0\",\n    \"@types/prismjs\": \"^1.26.5\",\n    \"@types/stylus\": \"^0.48.43\",\n    \"@typescript/vfs\": \"^1.6.1\",\n    \"acorn\": \"^8.15.0\",\n    \"assert\": \"^2.1.0\",\n    \"cross-spawn\": \"^7.0.6\",\n    \"env-cmd\": \"^11.0.0\",\n    \"esbuild\": \"^0.28.0\",\n    \"escape-html\": \"^1.0.3\",\n    \"eslint-plugin-svelte\": \"workspace:^\",\n    \"eslint-scope\": \"^9.0.0\",\n    \"eslint-visitor-keys\": \"^5.0.0\",\n    \"espree\": \"^11.0.0\",\n    \"globals\": \"^16.3.0\",\n    \"markdown-it-anchor\": \"^9.2.0\",\n    \"markdown-it-container\": \"^4.0.0\",\n    \"markdown-it-emoji\": \"^3.0.0\",\n    \"pako\": \"^2.1.0\",\n    \"postcss-nested\": \"^7.0.2\",\n    \"prism-svelte\": \"^0.5.0\",\n    \"prismjs\": \"^1.30.0\",\n    \"sass\": \"^1.92.0\",\n    \"source-map-js\": \"^1.2.1\",\n    \"stylus\": \"^0.64.0\",\n    \"svelte\": \"^5.38.6\",\n    \"twoslash-eslint\": \"^0.3.4\",\n    \"twoslash-protocol\": \"^0.3.4\",\n    \"util\": \"^0.12.5\",\n    \"vite\": \"^7.1.4\",\n    \"vite-plugin-svelte-md\": \"^0.6.0\"\n  }\n}\n"
  },
  {
    "path": "docs-svelte-kit/src/app.css",
    "content": "@import '@fontsource/fira-mono';\n@import 'prismjs/themes/prism-tomorrow';\n@import '@shikijs/twoslash/style-rich.css';\n\n:root {\n\tfont-family: 'Inter', 'Helvetica Neue', 'Arial', sans-serif;\n\t--font-mono: 'Fira Mono', monospace;\n\t--pure-white: #ffffff;\n\t--primary-color: #ffffff;\n\t--secondary-color: #676778;\n\t--tertiary-color: #edf0f8;\n\t--accent-color: #ff3e00;\n\t--heading-color: rgba(0, 0, 0, 0.7);\n\t--text-color: #444444;\n\t--background-without-opacity: rgba(255, 255, 255, 0.95);\n\t--column-width: 42rem;\n\t--column-margin-top: 4rem;\n}\n\nbody {\n\tmin-height: 100vh;\n\tmargin: 0;\n\tbackground-color: var(--primary-color);\n\tcolor: var(--text-color);\n}\n\n#svelte {\n\tmin-height: 100vh;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\nh1,\nh2,\np {\n\tfont-weight: 400;\n\tcolor: var(--heading-color);\n}\n\np {\n\tline-height: 1.5;\n}\n\na {\n\tcolor: var(--accent-color);\n\ttext-decoration: none;\n}\na:hover {\n\ttext-decoration: underline;\n}\n\nh1 {\n\tfont-size: 2rem;\n\tmargin: 1rem 0;\n}\n@media (min-width: 720px) {\n\th1 {\n\t\tfont-size: 2.4rem;\n\t}\n}\n\nh2 {\n\tfont-size: 1.6rem;\n\tmargin: 1rem 0;\n}\n\nh3,\nh4,\nh5,\nh6 {\n\tmargin: 0.5rem 0;\n\tfont-weight: 400;\n\tcolor: var(--heading-color);\n\tfont-size: 1rem;\n}\n\nh1 + h2,\nh2 + h3,\nh3 + h4,\nh4 + h5,\nh5 + h6 {\n\tmargin-top: 0;\n}\n\nul {\n\tmargin: 1rem 0;\n\t--list-padding: 30px;\n\tmargin-left: var(--list-padding);\n}\n\npre {\n\tfont-size: 16px;\n\tfont-family: var(--font-mono);\n\tbackground-color: rgba(255, 255, 255, 0.45);\n\tborder-radius: 3px;\n\tbox-shadow: 2px 2px 6px rgb(255 255 255 / 25%);\n\tpadding: 0.5em;\n\toverflow-x: auto;\n\tcolor: var(--text-color);\n\tmargin: 0.5rem 0;\n}\n\ninput,\nbutton {\n\tfont-size: inherit;\n\tfont-family: inherit;\n}\n\nbutton:focus:not(:focus-visible) {\n\toutline: none;\n}\n\n:target {\n\tscroll-margin-top: 80px;\n}\n\n/* twoslash */\n.twoslash .twoslash-popup-container {\n\ttransform: translateY(2em);\n\twhite-space: pre-wrap;\n\tmargin-right: 32px;\n}\n.twoslash .twoslash-error > span:not(.twoslash-popup-container):not(:has(*)) {\n\tmin-width: 6px;\n\tdisplay: inline-block;\n}\n\n/*** markdown ***/\n:not(pre) > code {\n\tpadding: 0.1rem 0.4rem;\n\tmargin: 0 0.2rem;\n\tbackground: #e5eef5;\n\tposition: relative;\n\tborder-radius: 0.3em;\n\twhite-space: nowrap;\n\tcolor: #444;\n\t-webkit-font-smoothing: initial;\n\ttransform: translateY(-2px);\n\tdisplay: inline-block;\n}\n\nblockquote {\n\tpadding: 0.5rem 2.4rem;\n\tcolor: #09f;\n\tborder: 1px solid #40b3ff;\n\tmargin: 1.6rem 2.4rem 2.4rem;\n\tborder-radius: 0.4rem;\n}\nblockquote p {\n\tcolor: #09f;\n}\n\ntable {\n\tmargin: 0 0 2em;\n\twidth: 100%;\n\tfont-size: 1rem; /* var(--h5)は未定義なので1remに */\n}\ntd,\nth {\n\ttext-align: left;\n\tborder-bottom: 1px solid rgba(0 0 0 / 0.1);\n\tpadding: 0.4rem 0.8rem 0.4rem 0;\n}\n\n/* custom container */\n.custom-block .custom-block-title {\n\tfont-weight: 600;\n\tmargin-bottom: -0.4rem;\n}\n\n.custom-block.danger,\n.custom-block.tip,\n.custom-block.warning {\n\tpadding: 0.1rem 1.5rem;\n\tborder-left-width: 4px;\n\tborder-left-style: solid;\n\tmargin: 1rem 0;\n}\n\n.custom-block.tip {\n\tbackground-color: #f3f5f7;\n\tborder-color: #42b983;\n}\n\n.custom-block.warning {\n\tbackground-color: rgba(255, 229, 100, 0.3);\n\tborder-color: #e7c000;\n\tcolor: #6b5900;\n}\n.custom-block.warning .custom-block-title {\n\tcolor: #b29400;\n}\n.custom-block.warning a {\n\tcolor: #2c3e50;\n}\n\n.custom-block.danger {\n\tbackground-color: #ffe6e6;\n\tborder-color: #c00;\n\tcolor: #4d0000;\n}\n.custom-block.danger .custom-block-title {\n\tcolor: #900;\n}\n.custom-block.danger a {\n\tcolor: #2c3e50;\n}\n\n.custom-block.details {\n\tdisplay: block;\n\tposition: relative;\n\tborder-radius: 2px;\n\tmargin: 1.6em 0;\n\tpadding: 1.6em;\n\tbackground-color: #eee;\n}\n.custom-block.details h4 {\n\tmargin-top: 0;\n}\n.custom-block.details figure:last-child,\n.custom-block.details p:last-child {\n\tmargin-bottom: 0;\n\tpadding-bottom: 0;\n}\n.custom-block.details summary {\n\toutline: none;\n\tcursor: pointer;\n}\n"
  },
  {
    "path": "docs-svelte-kit/src/app.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    %sveltekit.head%\n    <meta name=\"description\" content=\"ESLint plugin for Svelte using AST\" />\n    <link\n      rel=\"icon\"\n      type=\"image/png\"\n      href=\"/eslint-plugin-svelte/favicon.png\"\n    />\n\n    <meta property=\"og:type\" content=\"website\" />\n    <meta\n      property=\"og:image\"\n      content=\"https://sveltejs.github.io/eslint-plugin-svelte/favicon.png\"\n    />\n    <meta property=\"og:site_name\" content=\"eslint-plugin-svelte\" />\n    <meta\n      property=\"og:description\"\n      content=\"ESLint plugin for Svelte using AST\"\n    />\n    <meta name=\"twitter:card\" content=\"summary\" />\n\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n  </head>\n  <body>\n    <div id=\"svelte\">%sveltekit.body%</div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs-svelte-kit/src/lib/footer/Footer.svelte",
    "content": "<script>\n\timport { page } from '$app/stores';\n\timport { markdownPath, menuItems, isActive } from '../utils.js';\n\timport { resolve } from '$app/paths';\n\texport let fileInfo = {};\n\texport let frontmatter = {};\n\n\tlet prev, next;\n\t$: {\n\t\tlet prevItem, currItem;\n\t\tfor (const item of iterateMenuItem($menuItems)) {\n\t\t\tif (!item.path) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (currItem) {\n\t\t\t\tnext = item;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isActive(item.path, $page)) {\n\t\t\t\tprev = prevItem;\n\t\t\t\tcurrItem = item;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tprevItem = item;\n\t\t}\n\t}\n\n\t/** Iterate */\n\tfunction* iterateMenuItem(children) {\n\t\tfor (const item of children) {\n\t\t\tyield item;\n\n\t\t\tif (item.children && item.children.length) {\n\t\t\t\tyield* iterateMenuItem(item.children);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<footer class:hidden-menu={frontmatter.hiddenMenu}>\n\t<div class=\"footer-tools\">\n\t\t<div class=\"edit-link\">\n\t\t\t<a\n\t\t\t\thref=\"https://github.com/sveltejs/eslint-plugin-svelte/edit/main/docs/{markdownPath(\n\t\t\t\t\t$page.url.pathname\n\t\t\t\t)}\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\">Edit this page</a\n\t\t\t>\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tfocusable=\"false\"\n\t\t\t\tx=\"0px\"\n\t\t\t\ty=\"0px\"\n\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\twidth=\"15\"\n\t\t\t\theight=\"15\"\n\t\t\t\tclass=\"icon outbound\"\n\t\t\t\t><path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z\"\n\t\t\t\t/>\n\t\t\t\t<polygon\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tpoints=\"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</div>\n\t\t{#if fileInfo.lastUpdated}\n\t\t\t<div class=\"last-updated\">\n\t\t\t\t<span class=\"prefix\">Last Updated:</span>\n\t\t\t\t<span class=\"time\">{fileInfo.lastUpdated}</span>\n\t\t\t</div>\n\t\t{/if}\n\t</div>\n\t<div class=\"footer-move\">\n\t\t{#if prev}\n\t\t\t<span class=\"prev\">←<a href={resolve(prev.path)}>{prev.title}</a></span>\n\t\t{/if}\n\t\t{#if next}\n\t\t\t<span class=\"next\"><a href={resolve(next.path)}>{next.title}</a>→ </span>\n\t\t{/if}\n\t</div>\n\t<div class=\"footer-text\">\n\t\t<span>\n\t\t\tThis site was built with <a href=\"https://kit.svelte.dev/\" target=\"_brank\">SvelteKit</a>.\n\t\t</span>\n\t</div>\n</footer>\n\n<style>\n\t.footer-tools {\n\t\twidth: 100%;\n\t\tpadding: 0 1rem;\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t}\n\n\t.edit-link {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t}\n\n\t.footer-move {\n\t\tborder-top: 1px solid var(--background-without-opacity);\n\t\twidth: 100%;\n\t\tpadding: 0 1rem;\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t}\n\t.footer-text {\n\t\tpadding: 0 1rem 1rem 1rem;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t.last-updated,\n\t.next {\n\t\tmargin-left: auto;\n\t}\n\n\tfooter:not(.hidden-menu) {\n\t\tpadding-left: 20rem;\n\t}\n\n\t@media (max-width: 959px) {\n\t\tfooter:not(.hidden-menu) {\n\t\t\tpadding-left: 16.4rem;\n\t\t}\n\t}\n\t@media (max-width: 719px) {\n\t\tfooter:not(.hidden-menu) {\n\t\t\tpadding-left: 0;\n\t\t}\n\t}\n\n\tfooter {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tpadding: 16px 0 0 0;\n\t}\n\n\tfooter a {\n\t\tfont-weight: bold;\n\t}\n\n\t@media (min-width: 480px) {\n\t\tfooter {\n\t\t\tpadding: 24px 0 0 0;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "docs-svelte-kit/src/lib/header/Header.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\timport { isActive } from '../utils.js';\n\timport { page } from '$app/stores';\n\timport logo from './logo.svg';\n\timport { resolve } from '$app/paths';\n\n\tconst dispatch = createEventDispatcher();\n\n\tfunction handleToggleSidebar() {\n\t\tdispatch('toggleSidebarOpen');\n\t}\n</script>\n\n<header>\n\t<div class=\"corner\">\n\t\t<div\n\t\t\tclass=\"sidebar-button\"\n\t\t\trole=\"button\"\n\t\t\ttabindex=\"0\"\n\t\t\ton:click={handleToggleSidebar}\n\t\t\ton:keydown={(e) => (e.code === 'Enter' || e.code === 'Space') && handleToggleSidebar()}\n\t\t>\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\trole=\"img\"\n\t\t\t\tviewBox=\"0 0 448 512\"\n\t\t\t\tclass=\"icon\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</div>\n\t\t<a href={resolve('/')} class=\"home-link\">\n\t\t\t<img src={logo} alt=\"Logo\" />\n\t\t</a>\n\t</div>\n\n\t<nav>\n\t\t<svg viewBox=\"0 0 2 3\" aria-hidden=\"true\">\n\t\t\t<path d=\"M0,0 L1,2 C1.5,3 1.5,3 2,3 L2,0 Z\" />\n\t\t</svg>\n\t\t<ul>\n\t\t\t<li class:active={isActive('/', $page)}>\n\t\t\t\t<a href={resolve('/')}>Home</a>\n\t\t\t</li>\n\t\t\t<li class:active={isActive('/user-guide/', $page)}>\n\t\t\t\t<a href={resolve('/user-guide/')}>User Guide</a>\n\t\t\t</li>\n\t\t\t<li class:active={isActive('/rules/', $page)}>\n\t\t\t\t<a href={resolve('/rules/')}>Rules</a>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://eslint-online-playground.netlify.app/#eslint-plugin-svelte%20with%20typescript\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\tPlayground\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t</ul>\n\t\t<div class=\"nav-title\">\n\t\t\t<a href={resolve('/')}> <img src={logo} alt=\"Logo\" />eslint-plugin-svelte</a>\n\t\t</div>\n\t\t<svg viewBox=\"0 0 2 3\" aria-hidden=\"true\">\n\t\t\t<path d=\"M0,0 L0,3 C0.5,3 0.5,3 1,2 L2,0 Z\" />\n\t\t</svg>\n\t</nav>\n\n\t<div class=\"corner\">\n\t\t<a\n\t\t\thref=\"https://github.com/sveltejs/eslint-plugin-svelte\"\n\t\t\ttarget=\"_blank\"\n\t\t\tclass=\"github-link\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\taria-label=\"GitHub\"\n\t\t>\n\t\t\t<svg\n\t\t\t\tversion=\"1.1\"\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\tclass=\"octicon octicon-mark-github\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t><path\n\t\t\t\t\tstyle:fill=\"#2c3e50\"\n\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\td=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</a>\n\t</div>\n</header>\n\n<style>\n\theader {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: 0.5em 2em;\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\twidth: 100vw;\n\t\tz-index: 100;\n\t\tbackground-color: var(--primary-color);\n\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n\t}\n\n\t.corner {\n\t\twidth: 3em;\n\t\theight: 3em;\n\t}\n\n\t.corner a,\n\t.sidebar-button {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t.corner img {\n\t\twidth: 2em;\n\t\theight: 2em;\n\t\tobject-fit: contain;\n\t}\n\t.corner svg {\n\t\twidth: 2rem;\n\t\theight: 2rem;\n\t\tobject-fit: contain;\n\t}\n\t.corner path {\n\t\tfill: var(--heading-color);\n\t}\n\n\tnav {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tmin-width: 1px;\n\t}\n\n\tnav svg {\n\t\twidth: 2em;\n\t\theight: 3em;\n\t\tdisplay: block;\n\t}\n\n\tnav path {\n\t\tfill: var(--background-without-opacity);\n\t}\n\n\tul {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\theight: 3em;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tlist-style: none;\n\t\tbackground: var(--background-without-opacity);\n\t\tbackground-size: contain;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n\n\tli.active > a {\n\t\tcolor: var(--accent-color);\n\t}\n\n\tnav a {\n\t\tdisplay: flex;\n\t\theight: 100%;\n\t\talign-items: center;\n\t\tpadding: 0 1em;\n\t\tcolor: var(--heading-color);\n\t\tfont-weight: 700;\n\t\tfont-size: 0.8rem;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.1em;\n\t\ttext-decoration: none;\n\t\ttransition: color 0.2s linear;\n\t}\n\n\ta:hover {\n\t\tcolor: var(--accent-color);\n\t}\n\n\t.home-link {\n\t\tbackground: var(--background-without-opacity);\n\t\tborder-bottom-right-radius: 20%;\n\t}\n\n\t.github-link {\n\t\tbackground: var(--background-without-opacity);\n\t\tborder-bottom-left-radius: 20%;\n\t}\n\n\t.sidebar-button {\n\t\tbackground: var(--background-without-opacity);\n\t}\n\t.sidebar-button,\n\t.nav-title {\n\t\tdisplay: none;\n\t}\n\t@media (max-width: 719px) {\n\t\t.sidebar-button {\n\t\t\tdisplay: flex;\n\t\t}\n\t\t.corner .home-link {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.nav-title {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\tbackground: var(--background-without-opacity);\n\t\t\twidth: calc(100vw - 96px);\n\t\t}\n\t\t.nav-title a {\n\t\t\theight: 3rem;\n\t\t\tobject-fit: contain;\n\t\t\tfont-size: 0.5rem;\n\t\t}\n\t\t.nav-title img {\n\t\t\twidth: 2rem;\n\t\t\theight: 2rem;\n\t\t\tobject-fit: contain;\n\t\t}\n\t\tnav ul,\n\t\tnav svg {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.github-link {\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "docs-svelte-kit/src/lib/sidemenu/SideMenu.svelte",
    "content": "<script>\n\timport UlMenu from './UlMenu.svelte';\n\timport { menuItems } from '../utils.js';\n\n\texport let sidebarOpen = false;\n\texport let hiddenMenu = false;\n</script>\n\n{#if !hiddenMenu || sidebarOpen}\n\t<aside class:sidebar-open={sidebarOpen}>\n\t\t<UlMenu children={$menuItems} />\n\t</aside>\n{/if}\n\n<style>\n\taside {\n\t\tfont-size: 16px;\n\t\twidth: 20rem;\n\t\tposition: fixed;\n\t\tz-index: 10;\n\t\tmargin: 0;\n\t\ttop: 3.6rem;\n\t\tleft: 0;\n\t\tbottom: 0;\n\t\tbox-sizing: border-box;\n\t\tborder-right: 1px solid var(--background-without-opacity);\n\t\toverflow-y: auto;\n\t\tbackground-color: var(--secondary-color);\n\t}\n\n\t@media (max-width: 959px) {\n\t\taside {\n\t\t\tfont-size: 15px;\n\t\t\twidth: 16.4rem;\n\t\t}\n\t}\n\t@media (max-width: 719px) {\n\t\taside {\n\t\t\ttop: 0;\n\t\t\tpadding-top: 3.6rem;\n\t\t\ttransform: translateX(-100%);\n\t\t\ttransition: transform 0.2s ease;\n\t\t}\n\t\taside.sidebar-open {\n\t\t\ttransform: translateX(0);\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte",
    "content": "<script>\n\timport { page } from '$app/stores';\n\timport { isActive, stripBaseUrl } from '../utils.js';\n\timport { resolve } from '$app/paths';\n\texport let children;\n\texport let level = 1;\n</script>\n\n<ul class=\"sidebar-menu sidebar-menu--level{level}\">\n\t{#each children as item (item.path || item.id || item.title)}\n\t\t<li\n\t\t\tclass=\"sidebar-menu-item\"\n\t\t\tclass:active={item.active || (item.path && isActive(item.path, $page))}\n\t\t>\n\t\t\t{#if item.path || item.id}\n\t\t\t\t<a\n\t\t\t\t\tclass=\"sidebar-menu-item-title\"\n\t\t\t\t\tclass:active={item.active || (item.path && isActive(item.path, $page))}\n\t\t\t\t\thref={resolve(item.path || `${stripBaseUrl($page.url.pathname)}#${item.id}`)}\n\t\t\t\t>\n\t\t\t\t\t{item.title}\n\t\t\t\t</a>\n\t\t\t{:else}\n\t\t\t\t<span class=\"sidebar-menu-item-title\">{item.title}</span>\n\t\t\t{/if}\n\t\t\t{#if item.children && item.children.length}\n\t\t\t\t<svelte:self children={item.children} level={level + 1} />\n\t\t\t{/if}\n\t\t</li>\n\t{/each}\n</ul>\n\n<style>\n\tul {\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tlist-style-type: none;\n\t}\n\n\tul.sidebar-menu--level1 > li > a {\n\t\tfont-size: 1.1em;\n\t\tline-height: 1.7;\n\t\tfont-weight: 700;\n\t\tpadding: 0.35rem 1rem 0.35rem 1.25rem;\n\t}\n\tul.sidebar-menu--level1 {\n\t\tpadding: 2.4rem 0;\n\t}\n\tul:not(.sidebar-menu--level1) {\n\t\tpadding-left: 1rem;\n\t\tfont-size: 0.95em;\n\t}\n\t.sidebar-menu-item,\n\t.sidebar-menu-item-title {\n\t\tcolor: white;\n\t}\n\t.sidebar-menu-item-title {\n\t\tpadding: 0.25rem 1rem 0.25rem 1.25rem;\n\t\tfont-size: 1em;\n\t\tfont-weight: 400;\n\t\tdisplay: inline-block;\n\t\tline-height: 1.4;\n\t\twidth: 100%;\n\t\tbox-sizing: border-box;\n\t\tborder-left: 0.25rem solid transparent;\n\t}\n\n\t/* active menu */\n\t.sidebar-menu-item-title {\n\t\tposition: relative;\n\t}\n\t.sidebar-menu-item-title.active::before {\n\t\t--size: 6px;\n\t\tcontent: '';\n\t\twidth: 0;\n\t\theight: 0;\n\t\tposition: absolute;\n\t\ttop: calc(50% - var(--size));\n\t\tright: 0;\n\t\tborder: var(--size) solid transparent;\n\t\tborder-right: var(--size) solid white;\n\t}\n\ta.sidebar-menu-item-title:not(.active) {\n\t\ttransition: color 0.2s linear;\n\t}\n\ta.sidebar-menu-item-title:not(.active):hover {\n\t\tcolor: #40b3ff;\n\t}\n</style>\n"
  },
  {
    "path": "docs-svelte-kit/src/lib/utils.js",
    "content": "/* globals RULES_META -- ignore */\nimport { readable, writable } from 'svelte/store';\nimport { page } from '$app/stores';\nimport { base as baseUrl } from '$app/paths';\n\nconst rules = RULES_META;\n\nexport function stripBaseUrl(path) {\n\tif (path.startsWith(baseUrl)) {\n\t\treturn path.slice(baseUrl.length);\n\t}\n\treturn path;\n}\n\nconst svelteRules = rules.filter((rule) => !rule.meta.deprecated);\n\nconst categories = [\n\t'Possible Errors',\n\t'Security Vulnerability',\n\t'Best Practices',\n\t'Stylistic Issues',\n\t'Extension Rules',\n\t'SvelteKit',\n\t'Experimental',\n\t'System'\n];\nsvelteRules.forEach((rule) => {\n\tif (!categories.includes(rule.meta.docs.category)) {\n\t\tthrow new Error(`missing categories:${rule.meta.docs.category}`);\n\t}\n});\n\nconst categoryRules = categories.map((cat) => {\n\treturn {\n\t\ttitle: cat,\n\t\tchildren: svelteRules\n\t\t\t.filter((rule) => rule.meta.docs.category === cat)\n\t\t\t.map((rule) => {\n\t\t\t\treturn {\n\t\t\t\t\ttitle: rule.meta.docs.ruleId,\n\t\t\t\t\tpath: `/rules/${rule.meta.docs.ruleName}/`\n\t\t\t\t};\n\t\t\t})\n\t};\n});\nconst SIDE_MENU = {\n\t'/rules': [\n\t\t{ path: '/', title: 'Introduction' },\n\t\t{ path: '/user-guide/', title: 'User Guide' },\n\t\t{\n\t\t\tpath: '/rules/',\n\t\t\ttitle: 'Available Rules',\n\t\t\tchildren: categoryRules\n\t\t},\n\t\t{ path: '/migration/', title: 'Migration' }\n\t],\n\t'/': [\n\t\t{ path: '/', title: 'Introduction' },\n\t\t{ path: '/user-guide/', title: 'User Guide' },\n\t\t{ path: '/rules/', title: 'Available Rules' },\n\t\t{ path: '/migration/', title: 'Migration' }\n\t]\n};\n\nexport function isActive(path, $page) {\n\treturn markdownPath($page.url.pathname) === markdownPath(path);\n}\n\nexport function markdownPath(path) {\n\t// eslint-disable-next-line no-param-reassign -- ignore\n\tpath = stripBaseUrl(path);\n\n\tlet normalized = !path.trim() || path === '/' ? 'README' : path.replace(/^\\/|\\/$/g, '');\n\treturn `${normalized}.md`;\n}\n\nexport const tocStore = writable({ children: [] });\n\nexport const menuItems = readable([], function start(set) {\n\tlet pageData = {};\n\tlet tocData = { children: [] };\n\tconst pageUnsubscriber = page.subscribe(($page) => {\n\t\tpageData = $page;\n\t\tset(generateMenu(pageData, tocData));\n\t});\n\tconst tocUnsubscriber = tocStore.subscribe((toc) => {\n\t\ttocData = toc;\n\t\tset(generateMenu(pageData, tocData));\n\t});\n\n\treturn function stop() {\n\t\tpageUnsubscriber();\n\t\ttocUnsubscriber();\n\t};\n});\n\nfunction generateMenu($page, toc) {\n\tconst result = [];\n\tconst [, menus] = Object.entries(SIDE_MENU).find(([k]) =>\n\t\tstripBaseUrl($page.url.pathname).startsWith(k)\n\t) || ['/', SIDE_MENU['/']];\n\tfor (const { path, title, children } of menus) {\n\t\tconst active = isActive(path, $page);\n\t\tif (active) {\n\t\t\tfor (const item of toc.children) {\n\t\t\t\tresult.push({\n\t\t\t\t\t...item,\n\t\t\t\t\tpath,\n\t\t\t\t\ttitle,\n\t\t\t\t\tchildren: children || item.children\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push({ path, title, children });\n\t\t}\n\t}\n\n\treturn result;\n}\n"
  },
  {
    "path": "docs-svelte-kit/src/reset.css",
    "content": "*,\n*::before,\n*::after {\n\tmargin: 0;\n\tpadding: 0;\n\tbox-sizing: border-box;\n}\n:where([hidden]:not([hidden='until-found'])) {\n\tdisplay: none !important;\n}\n:where(html) {\n\t-webkit-text-size-adjust: none;\n\tcolor-scheme: dark light;\n\ttab-size: 2;\n\tscrollbar-gutter: stable;\n}\n:where(html:has(dialog:modal[open])) {\n\toverflow: clip;\n}\n@media (prefers-reduced-motion: no-preference) {\n\t:where(html:focus-within) {\n\t\tscroll-behavior: smooth;\n\t}\n}\n:where(body) {\n\tline-height: 1.5;\n\tfont-family: system-ui, sans-serif;\n\t-webkit-font-smoothing: antialiased;\n}\n:where(button) {\n\tall: unset;\n}\n:where(input, button, textarea, select) {\n\tfont: inherit;\n\tcolor: inherit;\n}\n:where(textarea) {\n\tresize: vertical;\n\tresize: block;\n}\n:where(button, label, select, summary, [role='button'], [role='option']) {\n\tcursor: pointer;\n}\n:where(:disabled) {\n\tcursor: not-allowed;\n}\n:where(label:has(> input:disabled), label:has(+ input:disabled)) {\n\tcursor: not-allowed;\n}\n:where(a) {\n\tcolor: inherit;\n\ttext-underline-offset: 0.2ex;\n}\n:where(ul, ol) {\n\tlist-style: none;\n}\n:where(img, svg, video, canvas, audio, iframe, embed, object) {\n\tdisplay: block;\n}\n:where(img, picture, svg, video) {\n\tmax-inline-size: 100%;\n\tblock-size: auto;\n}\n:where(p, h1, h2, h3, h4, h5, h6) {\n\toverflow-wrap: break-word;\n}\n:where(h1, h2, h3) {\n\tline-height: calc(1em + 0.5rem);\n\ttext-wrap: balance;\n}\n:where(hr) {\n\tborder: none;\n\tborder-block-start: 1px solid;\n\tcolor: inherit;\n\tblock-size: 0;\n\toverflow: visible;\n}\n:where(dialog) {\n\tborder: none;\n\tbackground: none;\n\tinset: unset;\n\tmax-width: unset;\n\tmax-height: unset;\n}\n:where(dialog:not([open])) {\n\tdisplay: none !important;\n}\n:where(:focus-visible) {\n\toutline: 3px solid CanvasText;\n\tbox-shadow: 0 0 0 5px Canvas;\n\toutline-offset: 1px;\n}\n:where(:focus-visible, :target) {\n\tscroll-margin-block: 8vh;\n}\n:where(.visually-hidden:not(:focus-within, :active)) {\n\tclip-path: inset(50%) !important;\n\theight: 1px !important;\n\twidth: 1px !important;\n\toverflow: hidden !important;\n\tposition: absolute !important;\n\twhite-space: nowrap !important;\n\tborder: 0 !important;\n}\n"
  },
  {
    "path": "docs-svelte-kit/src/routes/+error.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { page } from '$app/stores';\n</script>\n\n<h1>{$page.status}</h1>\n<blockquote>\n\t<p>{$page.error.message}</p>\n\t<p>Take me <a href={resolve('/')}>home</a></p>\n</blockquote>\n"
  },
  {
    "path": "docs-svelte-kit/src/routes/+layout.js",
    "content": "import { markdownPath } from '$lib/utils.js';\nconst docs = import.meta.glob('../../../docs/**/*.md');\n\nexport const prerender = true;\nexport const trailingSlash = 'always';\n\n/** @type {import('@sveltejs/kit').Load} */\nexport async function load({ url }) {\n\tconst markdown = `../../../docs/${markdownPath(url.pathname)}`;\n\tif (docs[markdown]) {\n\t\treturn {\n\t\t\tmoduleData: await docs[markdown]()\n\t\t};\n\t}\n\n\t// 404\n\treturn {\n\t\tmoduleData: {\n\t\t\tfrontmatter: { title: '404', hiddenMenu: true }\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "docs-svelte-kit/src/routes/+layout.svelte",
    "content": "<script>\n\timport Header from '$lib/header/Header.svelte';\n\timport SideMenu from '$lib/sidemenu/SideMenu.svelte';\n\timport Footer from '$lib/footer/Footer.svelte';\n\n\timport '../reset.css';\n\timport '../app.css';\n\timport { tocStore } from '$lib/utils.js';\n\n\t/** @type {import('./$types').PageData */\n\texport let data;\n\t$: ({ moduleData } = data);\n\t$: frontmatter = moduleData.frontmatter;\n\t$: fileInfo = moduleData.fileInfo;\n\t$: {\n\t\tconst toc = moduleData.toc;\n\t\t$tocStore = toc;\n\t}\n\n\tlet sidebarOpen = false;\n\n\tfunction handleToggleSidebar() {\n\t\tsidebarOpen = !sidebarOpen;\n\t}\n\tfunction resetSidebarOpen() {\n\t\tsidebarOpen = false;\n\t}\n</script>\n\n<svelte:window on:resize={sidebarOpen ? resetSidebarOpen : null} />\n\n<Header on:toggleSidebarOpen={handleToggleSidebar} />\n\n<SideMenu {sidebarOpen} hiddenMenu={frontmatter.hiddenMenu} />\n\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<main\n\tclass:hidden-menu={frontmatter.hiddenMenu}\n\ton:click={sidebarOpen ? resetSidebarOpen : null}\n\ton:keydown={sidebarOpen ? resetSidebarOpen : null}\n>\n\t<div class=\"main-content\">\n\t\t<slot />\n\t</div>\n</main>\n\n<Footer {frontmatter} {fileInfo} />\n\n<style>\n\tmain {\n\t\tmargin-top: 64px;\n\t\tmin-height: calc(100vh - 180px);\n\t}\n\tmain:not(.hidden-menu) {\n\t\tpadding-left: 20rem;\n\t}\n\n\t@media (max-width: 959px) {\n\t\tmain:not(.hidden-menu) {\n\t\t\tpadding-left: 16.4rem;\n\t\t}\n\t}\n\t@media (max-width: 719px) {\n\t\tmain:not(.hidden-menu) {\n\t\t\tpadding-left: 0;\n\t\t}\n\t}\n\n\tmain .main-content {\n\t\tflex: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding: 1rem calc(1rem + 16px);\n\t\twidth: 100%;\n\t\tmax-width: 1024px;\n\t\tmargin: 0 auto;\n\t\tbox-sizing: border-box;\n\t}\n\n\t.main-content :global(:where(li)) {\n\t\tmargin: 0 0 0.5em;\n\t\tline-height: 1.5;\n\t\tposition: relative;\n\t}\n\n\t.main-content :global(:where(ul li):before) {\n\t\t--sk-back-5: #c2cdd6;\n\t\tcontent: '';\n\t\tbackground-color: var(--sk-back-5);\n\t\topacity: 0.7;\n\t\tborder-radius: 2px;\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tmargin-top: 8px;\n\t\tmargin-left: -18px;\n\t\tposition: absolute;\n\t}\n</style>\n"
  },
  {
    "path": "docs-svelte-kit/src/routes/404/+page.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n</script>\n\n<h1>404</h1>\n<blockquote>\n\t<p>Not Found</p>\n\t<p>Take me <a href={resolve('/')}>home</a></p>\n</blockquote>\n\n<style>\n\tblockquote {\n\t\ttext-align: center;\n\t}\n</style>\n"
  },
  {
    "path": "docs-svelte-kit/svelte.config.js",
    "content": "import adapter from '@sveltejs/adapter-static';\n\nif (typeof self === 'undefined') {\n\tglobalThis.self = globalThis;\n}\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\tcompilerOptions: {\n\t\tpreserveWhitespace: true,\n\t\twarningFilter: (warning) => {\n\t\t\tif (warning.code === 'a11y_no_noninteractive_tabindex') return false;\n\t\t\treturn true;\n\t\t}\n\t},\n\textensions: ['.svelte', '.md'],\n\tkit: {\n\t\tadapter: adapter({\n\t\t\tfallback: '404.html'\n\t\t}),\n\t\tpaths: {\n\t\t\tbase: '/eslint-plugin-svelte'\n\t\t}\n\t}\n};\nexport default config;\n"
  },
  {
    "path": "docs-svelte-kit/tools/generate-routes.mts",
    "content": "import path from 'path';\nimport fs from 'fs';\nimport { fileURLToPath } from 'url';\nconst dirname = path.dirname(fileURLToPath(import.meta.url));\n\n/** Generate SvelteKit routes files */\nexport default function generateRoutes(): void {\n\tconst srcRoot = path.join(dirname, '../../docs');\n\tconst distRoot = path.join(dirname, '../src/routes');\n\n\tfor (const markdownPath of iterateMarkdown(srcRoot)) {\n\t\tconst markdownRelativePath = path.relative(srcRoot, markdownPath);\n\t\tconst distPath = path.join(\n\t\t\tdistRoot,\n\t\t\tmarkdownRelativePath.replace(/(?:README)?\\.md$/u, '/+page.md')\n\t\t);\n\n\t\tmkdirs(path.dirname(distPath));\n\t\tfs.writeFileSync(\n\t\t\tdistPath,\n\t\t\t`<script>\n  import MD from \"${path.relative(path.dirname(distPath), markdownPath)}\"\n</script>\n\n<MD />\n`,\n\t\t\t'utf-8'\n\t\t);\n\t}\n}\n\n/** Iterate markdown files */\nfunction* iterateMarkdown(rootDir: string): IterableIterator<string> {\n\tfor (const filename of fs.readdirSync(rootDir)) {\n\t\tconst abs = path.join(rootDir, filename);\n\t\tif (path.extname(filename) === '.md') {\n\t\t\tyield abs;\n\t\t} else if (fs.statSync(abs).isDirectory()) {\n\t\t\tyield* iterateMarkdown(abs);\n\t\t}\n\t}\n}\n\n/** Make directories */\nfunction mkdirs(dir: string): void {\n\tif (!fs.existsSync(dir)) {\n\t\tmkdirs(path.dirname(dir));\n\t\tfs.mkdirSync(dir);\n\t}\n}\n"
  },
  {
    "path": "docs-svelte-kit/tools/highlight.mts",
    "content": "import prism from 'prismjs';\nimport loadLanguages from 'prismjs/components/index.js';\nimport escapeHtml from 'escape-html';\nimport 'prism-svelte';\n\n// required to make embedded highlighting work...\nloadLanguages(['markup', 'css', 'javascript']);\n\n/** Wrap pre tag */\nfunction wrapPre(code: string, lang: string) {\n\tconst htmlCode = lang === 'text' ? escapeHtml(code) : code;\n\treturn `<pre class=\"language-${lang}\"><code>${htmlCode}</code></pre>`;\n}\n\nconst EXTENSION_MAPPINGS: Record<string, string | undefined> = {\n\tvue: 'markup',\n\thtml: 'markup',\n\tsvelte: 'svelte',\n\tsv: 'svelte',\n\tmd: 'markdown',\n\trb: 'ruby',\n\tts: 'typescript',\n\tpy: 'python',\n\tsh: 'bash',\n\tyml: 'yaml',\n\tstyl: 'stylus',\n\tkt: 'kotlin',\n\trs: 'rust',\n\tjsonc: 'json5'\n};\n\nexport default (str: string, lang: string): string => {\n\tif (!lang) {\n\t\treturn wrapPre(str, 'text');\n\t}\n\tlet normalLang = lang.toLowerCase();\n\tconst rawLang = lang;\n\n\tnormalLang = EXTENSION_MAPPINGS[normalLang] || normalLang;\n\n\tif (!prism.languages[normalLang]) {\n\t\ttry {\n\t\t\tloadLanguages([normalLang]);\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t}\n\tif (prism.languages[normalLang]) {\n\t\tconst code = prism.highlight(str, prism.languages[normalLang], normalLang);\n\t\treturn wrapPre(code, rawLang);\n\t}\n\treturn wrapPre(str, 'text');\n};\n"
  },
  {
    "path": "docs-svelte-kit/tools/markdown-it-container-option.mts",
    "content": "import type containerPlugin from 'markdown-it-container';\ntype ContainerPluginOption = Parameters<typeof containerPlugin>[2];\n/**\n * Generate markdown-it-container option\n * @see https://github.com/markdown-it/markdown-it-container\n */\nexport default (type: string, defaultTitle = type.toUpperCase()): ContainerPluginOption => {\n\treturn {\n\t\trender(tokens, index) {\n\t\t\tconst token = tokens[index];\n\n\t\t\tif (token.nesting === 1) {\n\t\t\t\t// `before` tag\n\n\t\t\t\t// resolve info (title)\n\t\t\t\tlet title = token.info.trim().slice(type.length).trim();\n\n\t\t\t\tif (!title) {\n\t\t\t\t\ttitle = defaultTitle;\n\t\t\t\t}\n\t\t\t\t// render\n\t\t\t\tif (type === 'details') {\n\t\t\t\t\treturn `<details class=\"custom-block details\">${\n\t\t\t\t\t\ttitle ? `<summary>${title}</summary>` : ''\n\t\t\t\t\t}\\n`;\n\t\t\t\t}\n\t\t\t\treturn `<div class=\"custom-block ${type}\">${\n\t\t\t\t\ttitle ? `<p class=\"custom-block-title\">${title}</p>` : ''\n\t\t\t\t}\\n`;\n\t\t\t}\n\t\t\t// `after` tag\n\t\t\t// render\n\t\t\tif (type === 'details') {\n\t\t\t\treturn `</details>\\n`;\n\t\t\t}\n\t\t\treturn '</div>\\n';\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "docs-svelte-kit/tools/markdown-it-markdown.mts",
    "content": "import path from 'path';\nimport spawn from 'cross-spawn';\nimport type Md from 'markdown-it';\n\ntype TreeItem = {\n\tchildren: TreeItem[];\n};\ntype TreeStack = { item: TreeItem; level: number; upper: TreeStack | null };\n\nclass TOCRenderer {\n\tprivate readonly tree: TreeItem;\n\n\tprivate stack: TreeStack;\n\n\tpublic constructor() {\n\t\tconst item: TreeItem = { children: [] };\n\t\tthis.tree = item;\n\t\tthis.stack = { item, level: 1, upper: null };\n\t}\n\n\tpublic addMenu(level: number, id: string, title: string) {\n\t\tif (this.stack.level < level) {\n\t\t\tconst parent = this.stack.item;\n\t\t\tconst item = parent.children[parent.children.length - 1];\n\t\t\tif (item) {\n\t\t\t\tthis.stack = { item, level, upper: this.stack };\n\t\t\t}\n\t\t}\n\t\twhile (level < this.stack.level && this.stack.upper) {\n\t\t\tthis.stack = this.stack.upper;\n\t\t}\n\t\tconst item = { level, id, title, children: [] };\n\t\tthis.stack.item.children.push(item);\n\t}\n\n\tpublic toc() {\n\t\treturn this.tree;\n\t}\n}\n/**\n * @param {import('markdown-it')} md\n */\nexport default (md: Md): void => {\n\tmd.core.ruler.push('custom_markdown', (state) => {\n\t\tconst tokens = state.tokens;\n\t\ttokens.unshift(new state.Token('custom_markdown_data', '', 0));\n\t});\n\n\tmd.renderer.rules.custom_markdown_data = (tokens, _idx, _options, env, _self) => {\n\t\tconst renderer = new TOCRenderer();\n\t\tfor (let idx = 0; idx < tokens.length; idx++) {\n\t\t\tconst token = tokens[idx];\n\n\t\t\tif (token.type !== 'heading_open') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst level = Number(token.tag.slice(1));\n\t\t\tif (level > 3) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Aggregate the next token children text.\n\t\t\tconst title = tokens[idx + 1]\n\t\t\t\t.children!.filter(\n\t\t\t\t\t(token) => token.type === 'text' || token.type === 'emoji' || token.type === 'code_inline'\n\t\t\t\t)\n\t\t\t\t.reduce((acc, t) => acc + t.content, '');\n\n\t\t\tconst slug = token.attrGet('id')!;\n\t\t\trenderer.addMenu(level, slug, title);\n\t\t}\n\n\t\tconst fileInfo: { timestamp?: number; lastUpdated?: string } = {};\n\t\tconst timestamp = getGitLastUpdatedTimestamp(env.id);\n\t\tif (timestamp) {\n\t\t\tfileInfo.timestamp = timestamp;\n\t\t\tfileInfo.lastUpdated = new Date(timestamp).toLocaleString();\n\t\t}\n\t\treturn `<script context=\"module\">\n  export const toc = ${JSON.stringify(renderer.toc())}\n  export const fileInfo = ${JSON.stringify(fileInfo)}\n</script>\n  `;\n\t};\n};\n\n/** Get last updated timestamp */\nfunction getGitLastUpdatedTimestamp(filePath: string) {\n\tlet lastUpdated;\n\ttry {\n\t\tlastUpdated =\n\t\t\tparseInt(\n\t\t\t\tspawn\n\t\t\t\t\t.sync('git', ['log', '-1', '--format=%at', path.basename(filePath)], {\n\t\t\t\t\t\tcwd: path.dirname(filePath)\n\t\t\t\t\t})\n\t\t\t\t\t.stdout.toString('utf-8'),\n\t\t\t\t10\n\t\t\t) * 1000;\n\t} catch {\n\t\t/* do not handle for now */\n\t}\n\treturn lastUpdated;\n}\n"
  },
  {
    "path": "docs-svelte-kit/tools/markdown-it-replace-link.mts",
    "content": "import path from 'path';\nimport type Md from 'markdown-it';\nimport type Token from 'markdown-it/lib/token';\n\nexport default (md: Md, options: { baseUrl: string; root: string }): void => {\n\tconst base = options.baseUrl;\n\tconst root = path.resolve(options.root);\n\n\t/** Normalize href */\n\tfunction normalizeHref(curr: string, href: string) {\n\t\tlet absolutePath;\n\t\tlet hash = '';\n\t\tif (/\\.md(?:#.*)?$/.test(href)) {\n\t\t\thash = /\\.md(#.*)?$/.exec(href)![1] || '';\n\t\t\tabsolutePath = path.join(path.dirname(curr), hash ? href.slice(0, -hash.length) : href);\n\t\t} else {\n\t\t\t// hash only\n\t\t\tabsolutePath = curr;\n\t\t\thash = href;\n\t\t}\n\n\t\treturn `${base}/${path\n\t\t\t.relative(root, absolutePath)\n\t\t\t.replace(/README\\.md$/, '')\n\t\t\t.replace(/\\.md$/, '')}/${hash}`\n\t\t\t.replace(/\\\\/gu, '/')\n\t\t\t.replace(/\\/+/gu, '/');\n\t}\n\n\tmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n\t\tconst token = tokens[idx];\n\t\tconst hrefIndex = token.attrIndex('href');\n\t\tif (hrefIndex >= 0) {\n\t\t\tconst link = token.attrs![hrefIndex];\n\t\t\tconst href = link[1];\n\t\t\tif (/^https?:/.test(href)) {\n\t\t\t\tconst proxyToken = {\n\t\t\t\t\t...token,\n\t\t\t\t\tattrs: [...token.attrs!, ['target', '_blank'], ['rel', 'noopener noreferrer']]\n\t\t\t\t} as Token;\n\t\t\t\treturn self.renderToken([proxyToken], 0, options);\n\t\t\t} else if (/\\.md(?:#.*)?$/.test(href) || /^#.*$/.test(href)) {\n\t\t\t\tconst proxyToken = {\n\t\t\t\t\t...token,\n\t\t\t\t\tattrs: [\n\t\t\t\t\t\t...token.attrs!.slice(0, hrefIndex - 1),\n\t\t\t\t\t\t[link[0], normalizeHref(env.id, href)],\n\t\t\t\t\t\t...token.attrs!.slice(hrefIndex + 1)\n\t\t\t\t\t]\n\t\t\t\t} as Token;\n\t\t\t\treturn self.renderToken([proxyToken], 0, options);\n\t\t\t}\n\t\t}\n\t\treturn self.renderToken(tokens, idx, options);\n\t};\n};\n"
  },
  {
    "path": "docs-svelte-kit/tools/markdown-it-title.mts",
    "content": "import type Md from 'markdown-it';\n/**\n * @param {import('markdown-it')} md\n */\nexport default (md: Md): void => {\n\tconst headingOpen = md.renderer.rules.heading_open;\n\n\tmd.renderer.rules.heading_open = (tokens, idx, options, env, self) => {\n\t\tconst head = headingOpen\n\t\t\t? headingOpen(tokens, idx, options, env, self)\n\t\t\t: self.renderToken(tokens, idx, options);\n\t\tconst token = tokens[idx];\n\t\tconst level = Number(token.tag.substr(1));\n\t\tif (level > 1) {\n\t\t\treturn head;\n\t\t}\n\t\tconst title = tokens[idx + 1]\n\t\t\t.children!.filter(\n\t\t\t\t(token) => token.type === 'text' || token.type === 'emoji' || token.type === 'code_inline'\n\t\t\t)\n\t\t\t.reduce((acc, t) => acc + t.content, '')\n\t\t\t.trim();\n\t\treturn `${head}\n\n<svelte:head>\n  {#if !frontmatter.title}\n    <title>${title}</title>\n    <meta property=\"og:title\" content=\"${title}\" />\n  {/if}\n</svelte:head>\n`;\n\t};\n};\n"
  },
  {
    "path": "docs-svelte-kit/tools/vite-plugin-svelte-md-option.mts",
    "content": "import highlight from './highlight.mjs';\nimport replaceLinkPlugin from './markdown-it-replace-link.mjs';\nimport { full as emojiPlugin } from 'markdown-it-emoji';\nimport anchorPlugin from 'markdown-it-anchor';\nimport containerPlugin from 'markdown-it-container';\nimport titlePlugin from './markdown-it-title.mjs';\nimport markdownPlugin from './markdown-it-markdown.mjs';\nimport containerPluginOption from './markdown-it-container-option.mjs';\nimport slugify from '@sindresorhus/slugify';\nimport type { Options } from 'vite-plugin-svelte-md';\nimport { createTwoslasher as createTwoslasherESLint } from 'twoslash-eslint';\nimport { type TwoslashGenericFunction } from 'twoslash-protocol';\nimport Shiki from '@shikijs/markdown-it';\nimport plugin from 'eslint-plugin-svelte';\nimport { transformerTwoslash } from '@shikijs/twoslash';\nimport tsParser from '@typescript-eslint/parser';\nimport path from 'path';\n\nconst shikiPlugin = await Shiki({\n\ttheme: 'dark-plus',\n\t// Or any other integrations that support passing Shiki transformers\n\ttransformers: [\n\t\t// Create another transformer, but with different trigger and ESLint twoslasher\n\t\ttransformerTwoslash({\n\t\t\tfilter(lang, code) {\n\t\t\t\tif (lang.startsWith('svelte') || lang.startsWith('js')) {\n\t\t\t\t\treturn /\\/\\*\\s*eslint/.test(code);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\texplicitTrigger: false,\n\t\t\t// Pass the custom twoslasher\n\t\t\ttwoslasher: adjustTwoslasherESLint(\n\t\t\t\tcreateTwoslasherESLint({\n\t\t\t\t\teslintConfig: [\n\t\t\t\t\t\t...plugin.configs['flat/base'],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfiles: ['**/*.svelte'],\n\t\t\t\t\t\t\tlanguageOptions: {\n\t\t\t\t\t\t\t\tparserOptions: {\n\t\t\t\t\t\t\t\t\tparser: {\n\t\t\t\t\t\t\t\t\t\tts: tsParser\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\tsvelte: {\n\t\t\t\t\t\t\t\t\tkit: {\n\t\t\t\t\t\t\t\t\t\tfiles: {\n\t\t\t\t\t\t\t\t\t\t\troutes: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tincludeDocs: false\n\t\t\t\t})\n\t\t\t),\n\t\t\trendererRich: {\n\t\t\t\terrorRendering: 'hover'\n\t\t\t}\n\t\t})\n\t]\n});\n\nfunction adjustTwoslasherESLint(base: TwoslashGenericFunction): TwoslashGenericFunction {\n\t// Change the file name to `+page` to make the rules for Svelte Kit work.\n\treturn (code, file, options) => {\n\t\tconst filename = file?.includes('.') ? file : `+page.${file ?? 'ts'}`;\n\t\treturn base(code, path.join(process.cwd(), filename), options);\n\t};\n}\n\nexport default (options: { baseUrl: string; root: string }): Options => ({\n\twrapperClasses: [],\n\tmarkdownItOptions: {\n\t\thighlight\n\t},\n\tmarkdownItUses: [\n\t\t[\n\t\t\treplaceLinkPlugin,\n\t\t\t{\n\t\t\t\tbaseUrl: options.baseUrl,\n\t\t\t\troot: options.root\n\t\t\t}\n\t\t],\n\t\temojiPlugin,\n\t\t[\n\t\t\tanchorPlugin,\n\t\t\t{\n\t\t\t\tslugify,\n\t\t\t\tpermalink: anchorPlugin.permalink.linkInsideHeader({\n\t\t\t\t\tsymbol: '#',\n\t\t\t\t\tplacement: 'before'\n\t\t\t\t})\n\t\t\t}\n\t\t],\n\t\ttitlePlugin,\n\t\tmarkdownPlugin,\n\t\t[containerPlugin, 'tip', containerPluginOption('tip')],\n\t\t[containerPlugin, 'warning', containerPluginOption('warning')],\n\t\t[containerPlugin, 'danger', containerPluginOption('danger', 'warning')],\n\t\t[containerPlugin, 'details', containerPluginOption('details')],\n\t\tshikiPlugin\n\t]\n});\n"
  },
  {
    "path": "docs-svelte-kit/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"target\": \"es2020\",\n\t\t\"module\": \"NodeNext\",\n\t\t\"moduleResolution\": \"Node16\",\n\t\t\"lib\": [\"es2020\", \"dom\"],\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"declaration\": true,\n\t\t\"strict\": true,\n\t\t\"noImplicitAny\": true,\n\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"noImplicitReturns\": true,\n\t\t\"noFallthroughCasesInSwitch\": true,\n\t\t\"baseUrl\": \".\",\n\t\t\"esModuleInterop\": true,\n\t\t\"outDir\": \"lib\",\n\t\t\"skipLibCheck\": true,\n\t\t\"resolveJsonModule\": true\n\t},\n\t\"include\": [\"vite.config.ts\", \"**/*.mts\", \"**/*.ts\"]\n}\n"
  },
  {
    "path": "docs-svelte-kit/vite.config.ts",
    "content": "import { sveltekit } from '@sveltejs/kit/vite';\nimport path from 'path';\nimport svelteMd from 'vite-plugin-svelte-md';\nimport { rules as pluginRules } from 'eslint-plugin-svelte';\nimport svelteMdOption from './tools/vite-plugin-svelte-md-option.mjs';\n\nimport generateRoutes from './tools/generate-routes.mjs';\nimport { createLogger, type UserConfig } from 'vite';\nimport { fileURLToPath } from 'url';\n\ngenerateRoutes();\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst logger = createLogger();\n\n/** @type {import('vite').UserConfig} */\nconst config: UserConfig = {\n\tplugins: [\n\t\tsvelteMd(\n\t\t\tsvelteMdOption({\n\t\t\t\tbaseUrl: '/eslint-plugin-svelte',\n\t\t\t\troot: path.join(dirname, '../docs')\n\t\t\t})\n\t\t),\n\t\tsveltekit()\n\t],\n\tdefine: {\n\t\tRULES_META: JSON.stringify(Object.values(pluginRules).map((rule) => ({ meta: rule.meta })))\n\t},\n\tssr: {\n\t\t// vite-plugin-svelte recognizes svelte-eslint-parser as a library that runs on svelte.\n\t\t// This confuses the SSR on the Dev server.\n\t\t// This is the workaround for that.\n\t\t// https://github.com/sveltejs/vite-plugin-svelte/blob/a1d141e890ac0d1572a46e2bec705aa090236560/packages/vite-plugin-svelte/src/utils/dependencies.ts#L114\n\t\texternal: ['svelte-eslint-parser']\n\t},\n\tbuild: {\n\t\tcommonjsOptions: {\n\t\t\tignoreDynamicRequires: true\n\t\t}\n\t},\n\n\tcustomLogger: {\n\t\t...logger,\n\t\twarn(msg, options) {\n\t\t\tif (msg.includes('vite-plugin-svelte-md') && msg.includes('was used to transform files')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlogger.warn(msg, options);\n\t\t}\n\t}\n};\n\nexport default config;\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"eslint-plugin-svelte-monorepo\",\n  \"description\": \"eslint-plugin-svelte monorepo\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"funding\": \"https://github.com/sponsors/ota-meshi\",\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/sveltejs/eslint-plugin-svelte.git\"\n  },\n  \"scripts\": {\n    \"prerelease\": \"cd packages/eslint-plugin-svelte && pnpm clean && pnpm run build && cd ../.. && cp README.md packages/eslint-plugin-svelte\",\n    \"release\": \"changeset publish\",\n    \"version\": \"cd packages/eslint-plugin-svelte && env-cmd -e version -- pnpm run update && cd ../..\",\n    \"version:ci\": \"cd packages/eslint-plugin-svelte && env-cmd -e version-ci -- pnpm run update && cd ../.. && changeset version\",\n    \"build\": \"pnpm --filter {packages/*} run build\",\n    \"test\": \"pnpm --recursive run test\"\n  },\n  \"devDependencies\": {\n    \"@changesets/changelog-github\": \"^0.6.0\",\n    \"@changesets/cli\": \"^2.30.0\",\n    \"@changesets/get-release-plan\": \"^4.0.15\",\n    \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.7.1\",\n    \"@ota-meshi/eslint-plugin\": \"^0.19.0\",\n    \"@types/eslint\": \"^9.6.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"c8\": \"^10.1.3\",\n    \"env-cmd\": \"^11.0.0\",\n    \"eslint\": \"~9.39.4\",\n    \"eslint-config-prettier\": \"^10.1.8\",\n    \"eslint-formatter-friendly\": \"^7.0.0\",\n    \"eslint-plugin-eslint-plugin\": \"^6.5.0\",\n    \"eslint-plugin-jsdoc\": \"^51.4.1\",\n    \"eslint-plugin-json-schema-validator\": \"^5.5.1\",\n    \"eslint-plugin-jsonc\": \"^2.21.1\",\n    \"eslint-plugin-markdown\": \"^5.1.0\",\n    \"eslint-plugin-mdx\": \"^3.7.0\",\n    \"eslint-plugin-n\": \"^17.24.0\",\n    \"eslint-plugin-node-dependencies\": \"^1.3.0\",\n    \"eslint-plugin-prettier\": \"^5.5.5\",\n    \"eslint-plugin-regexp\": \"^2.10.0\",\n    \"eslint-plugin-yml\": \"^1.19.1\",\n    \"npm-run-all2\": \"^8.0.4\",\n    \"prettier\": \"^3.8.1\",\n    \"prettier-plugin-svelte\": \"^3.5.1\",\n    \"rimraf\": \"^6.1.3\",\n    \"typescript\": \"~5.9.3\",\n    \"typescript-eslint\": \"^8.57.0\",\n    \"undici\": \"^6.24.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/.env-cmdrc.json",
    "content": "{\n\t\"version\": {\n\t\t\"IN_VERSION_SCRIPT\": \"true\"\n\t},\n\t\"version-ci\": {\n\t\t\"IN_VERSION_CI_SCRIPT\": \"true\"\n\t},\n\t\"debug\": {\n\t\t\"DEBUG\": \"eslint-plugin-svelte*\"\n\t},\n\t\"update-fixtures\": {\n\t\t\"UPDATE_FIXTURES\": \"true\"\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/CHANGELOG.md",
    "content": "# eslint-plugin-svelte\n\n## 3.17.1\n\n### Patch Changes\n\n- [#1321](https://github.com/sveltejs/eslint-plugin-svelte/pull/1321) [`97d89f7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/97d89f7d068321d4f79399c6c695ca4c0de2bd82) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-navigation-without-resolve): added support for ResolvedPathname types\n\n## 3.17.0\n\n### Minor Changes\n\n- [#1489](https://github.com/sveltejs/eslint-plugin-svelte/pull/1489) [`eb8172c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eb8172cc5eaf2f319542e6ce42c8319ac48bd517) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-navigation-without-resolve): added support for ternary expressions\n\n### Patch Changes\n\n- [#1490](https://github.com/sveltejs/eslint-plugin-svelte/pull/1490) [`b742163`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b742163d240e5cb99359ed372659489c0ed94b30) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-resolve): properly detecting invalid binary expression operators\n\n## 3.16.0\n\n### Minor Changes\n\n- [#1483](https://github.com/sveltejs/eslint-plugin-svelte/pull/1483) [`69c9a6a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/69c9a6af7081e7011a4123cf2045ad3fd58609e0) Thanks [@shimscho](https://github.com/shimscho)! - feat: add `svelte/max-lines-per-block` rule to enforce maximum line counts per block in Svelte SFCs\n\n- [#1484](https://github.com/sveltejs/eslint-plugin-svelte/pull/1484) [`98eae61`](https://github.com/sveltejs/eslint-plugin-svelte/commit/98eae61f4462b3a92a40e697d8fbd18e2541118a) Thanks [@Stadly](https://github.com/Stadly)! - feat: ignore parenthetical notes in svelte-ignore comments\n\n## 3.15.2\n\n### Patch Changes\n\n- [#1494](https://github.com/sveltejs/eslint-plugin-svelte/pull/1494) [`5d556c8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5d556c86f8a532eec560fabf6f0c8d47a3db5a1f) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-resolve): fixed a rule crash when encountering an attribute without value\n\n## 3.15.1\n\n### Patch Changes\n\n- [#1477](https://github.com/sveltejs/eslint-plugin-svelte/pull/1477) [`8c5f51e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8c5f51efbf54e4d8fcbd7e167321e8c0bc4713ab) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-top-level-browser-globals): false positive when browser globals appear inside TypeScript generic type parameters (e.g. `$state<HTMLElement>(...)`).\n\n- [#1467](https://github.com/sveltejs/eslint-plugin-svelte/pull/1467) [`d81b556`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d81b556a4ab9399db1a4c464fb647f9bdf97aa32) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-resolve): fixed nullish link shorthands not being allowed\n\n## 3.15.0\n\n### Minor Changes\n\n- [#1472](https://github.com/sveltejs/eslint-plugin-svelte/pull/1472) [`a314e4f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a314e4f0f4df348665cfabef724fd5bb731a2469) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - feat: add support for ESLint v10\n\n- [#1461](https://github.com/sveltejs/eslint-plugin-svelte/pull/1461) [`d8e1dc1`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d8e1dc1405d9d9c8cc4efd1b449c3b5ea9f843c8) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-navigation-without-resolve): for links, the rule now reports on the whole attribute\n\n## 3.14.0\n\n### Minor Changes\n\n- [#1443](https://github.com/sveltejs/eslint-plugin-svelte/pull/1443) [`18266fc`](https://github.com/sveltejs/eslint-plugin-svelte/commit/18266fc9a3acc413f5a727241e8db6264005e520) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-navigation-without-resolve): ignoring links with rel=external\n\n## 3.13.1\n\n### Patch Changes\n\n- [#1437](https://github.com/sveltejs/eslint-plugin-svelte/pull/1437) [`89d030d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/89d030dd61dd3ec3240c53dfcfac203da0c543f3) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(svelte/indent): crash when using ts import type\n\n- [#1440](https://github.com/sveltejs/eslint-plugin-svelte/pull/1440) [`a87e40b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a87e40b61445ddc1ba584048021c8f0db13bef02) Thanks [@baseballyama](https://github.com/baseballyama)! - fix(prefer-destructured-store-props): handle runes properly\n\n- [#1438](https://github.com/sveltejs/eslint-plugin-svelte/pull/1438) [`817b137`](https://github.com/sveltejs/eslint-plugin-svelte/commit/817b137504bcbe6aa4eeb4ec70277e4668b725dd) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: Support `experimental.async` compiler option\n\n## 3.13.0\n\n### Minor Changes\n\n- [#1323](https://github.com/sveltejs/eslint-plugin-svelte/pull/1323) [`074af20`](https://github.com/sveltejs/eslint-plugin-svelte/commit/074af20f617b998479b5f0051ab3f55634455ebd) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-navigation-without-resolve): checking link shorthand attributes\n\n### Patch Changes\n\n- [#1388](https://github.com/sveltejs/eslint-plugin-svelte/pull/1388) [`005e9fd`](https://github.com/sveltejs/eslint-plugin-svelte/commit/005e9fd5ec99aaacf39d9dbbd8339dc3be33e776) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-resolve): allowing undefined and null in link hrefs\n\n## 3.12.5\n\n### Patch Changes\n\n- [#1403](https://github.com/sveltejs/eslint-plugin-svelte/pull/1403) [`e4d788d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e4d788d4b7dbab6e250a79ba8bd41ab45bc602e1) Thanks [@baseballyama](https://github.com/baseballyama)! - deps: update `svelte-eslint-parser` to 1.4.0 (It supports `$state.eager`)\n\n- [#1365](https://github.com/sveltejs/eslint-plugin-svelte/pull/1365) [`57ccf95`](https://github.com/sveltejs/eslint-plugin-svelte/commit/57ccf95c4dbc3b863ee80791981a2f9dd4bad529) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-resolve): Detecting asset() function as well\n\n- [#1378](https://github.com/sveltejs/eslint-plugin-svelte/pull/1378) [`5ba5c3e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5ba5c3e1b8445358d1813a78faf30982b8051ad8) Thanks [@baseballyama](https://github.com/baseballyama)! - fix(no-unused-props): validate spread operator properly\n\n- [#1377](https://github.com/sveltejs/eslint-plugin-svelte/pull/1377) [`27cf677`](https://github.com/sveltejs/eslint-plugin-svelte/commit/27cf677e24500e2a83a0c7df8d506ef93b162a78) Thanks [@baseballyama](https://github.com/baseballyama)! - fix(no-navigation-without-resolve): improve error messages\n\n## 3.12.4\n\n### Patch Changes\n\n- [#1322](https://github.com/sveltejs/eslint-plugin-svelte/pull/1322) [`1e06290`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1e062908be85961c0c3184c5464924e750d78f1c) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-resolve): properly detecting absolute and fragment URLs in variables\n\n- [#1355](https://github.com/sveltejs/eslint-plugin-svelte/pull/1355) [`d8df1e8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d8df1e8838cd39a6260c3a9f571a2611ba2c2c17) Thanks [@InkedCat](https://github.com/InkedCat)! - fix: properly support Windows in `no-unused-props` rule\n  fix: properly support Windows in `valid-style-parse` rule\n  fix: properly support Windows in `no-unnecessary-condition` rule\n\n- [#1344](https://github.com/sveltejs/eslint-plugin-svelte/pull/1344) [`03a93f4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/03a93f4ff1b3a1d665bd94befcd5f9126a938602) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: preventing infinite loops in multiple rules\n\n## 3.12.3\n\n### Patch Changes\n\n- [#1305](https://github.com/sveltejs/eslint-plugin-svelte/pull/1305) [`d92dde0`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d92dde085fa7dc71852d28bda906548aece9e531) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-top-level-browser-globals): false positives for compound logical expression guards\n\n## 3.12.2\n\n### Patch Changes\n\n- [#1299](https://github.com/sveltejs/eslint-plugin-svelte/pull/1299) [`5c7cba3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5c7cba3c20dbef33d22df7e99ff56fa259f34027) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: disabling more rules in runes mode\n\n- [#1299](https://github.com/sveltejs/eslint-plugin-svelte/pull/1299) [`5c7cba3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5c7cba3c20dbef33d22df7e99ff56fa259f34027) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: restricting SvelteKit rules to SvelteKit\n\n- [#1306](https://github.com/sveltejs/eslint-plugin-svelte/pull/1306) [`7cb3660`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7cb36605784dd689379600462dbe41f7940ce79a) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-unused-props): false positives for `ComponentProps<any>`\n\n## 3.12.1\n\n### Patch Changes\n\n- [#1313](https://github.com/sveltejs/eslint-plugin-svelte/pull/1313) [`27573f4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/27573f4100411f4d33d821bf46825b9dcdb9895e) Thanks [@marekdedic](https://github.com/marekdedic)! - fix: Not reporting mailto: and other unusual schema addresses in no-nmavigation-without-resolve (and its deprecated versions)\n\n## 3.12.0\n\n### Minor Changes\n\n- [#1308](https://github.com/sveltejs/eslint-plugin-svelte/pull/1308) [`abbcfdd`](https://github.com/sveltejs/eslint-plugin-svelte/commit/abbcfdd55baac44800ff1d58b67640d28f849803) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-navigation-without-resolve): added to recommended rule set\n\n- [#1289](https://github.com/sveltejs/eslint-plugin-svelte/pull/1289) [`e2e791f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e2e791f8fb8268750a9190089c19b16a02843066) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-navigation-without-resolve rule\n\n- [#1289](https://github.com/sveltejs/eslint-plugin-svelte/pull/1289) [`e2e791f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e2e791f8fb8268750a9190089c19b16a02843066) Thanks [@marekdedic](https://github.com/marekdedic)! - chore: deprecated the no-navigation-without-base rule\n\n## 3.11.0\n\n### Minor Changes\n\n- [#1151](https://github.com/sveltejs/eslint-plugin-svelte/pull/1151) [`843730d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/843730dba5cb907bacf007023ad1971b8925f733) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `prefer-svelte-reactivity` rule\n\n- [#1269](https://github.com/sveltejs/eslint-plugin-svelte/pull/1269) [`a444476`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a4444766bf619ba8e3f34289fef606b46a4c64fd) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: support asynchronous svelte\n\n### Patch Changes\n\n- [#1268](https://github.com/sveltejs/eslint-plugin-svelte/pull/1268) [`4e33ba4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4e33ba4c09c792672837db91b46885a85f6cdfe2) Thanks [@GauBen](https://github.com/GauBen)! - feat(valid-prop-names-in-kit-pages): add support for the new `params` page prop\n\n## 3.10.1\n\n### Patch Changes\n\n- [#1260](https://github.com/sveltejs/eslint-plugin-svelte/pull/1260) [`a51363f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a51363fc87bf18191b704ec8a56663e522abab14) Thanks [@tbashiyy](https://github.com/tbashiyy)! - fix(no-unused-class-name): detect duplicated class names\n\n## 3.10.0\n\n### Minor Changes\n\n- [#1257](https://github.com/sveltejs/eslint-plugin-svelte/pull/1257) [`e94a3be`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e94a3be9c110cbe7f7e04decfe1b85f9725bccba) Thanks [@tbashiyy](https://github.com/tbashiyy)! - feat(no-unused-class-name): support regex for `allowedClassNames` option\n\n## 3.9.3\n\n### Patch Changes\n\n- [#1252](https://github.com/sveltejs/eslint-plugin-svelte/pull/1252) [`5db956e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5db956ef737cddce4d8ec31178b6a677c9ed7680) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-top-level-browser-globals): false positive for `{#if browser}`\n\n## 3.9.2\n\n### Patch Changes\n\n- [#1243](https://github.com/sveltejs/eslint-plugin-svelte/pull/1243) [`5df1121`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5df1121d1428d8f31578bd040bb248c8b1edf8a4) Thanks [@zachstence](https://github.com/zachstence)! - fix false positives for regular components in valid-compile/custom_element_props_identifier\n\n## 3.9.1\n\n### Patch Changes\n\n- [#1239](https://github.com/sveltejs/eslint-plugin-svelte/pull/1239) [`a3d4224`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a3d42245fbb6a6663a1b3c6a4e211dce2b6dfbbb) Thanks [@baseballyama](https://github.com/baseballyama)! - fix(prefer-const): Use `additionalProperties` instead of `ignoreReadonly` to match the ESLint core rule option name.\n\n## 3.9.0\n\n### Minor Changes\n\n- [#1235](https://github.com/sveltejs/eslint-plugin-svelte/pull/1235) [`6e86e30`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6e86e30cd766181dce5849ae739eedd2adfd8d8e) Thanks [@43081j](https://github.com/43081j)! - Improve performance of ignore comment extraction and add support for comma-separated ignore codes\n\n## 3.8.2\n\n### Patch Changes\n\n- [#1231](https://github.com/sveltejs/eslint-plugin-svelte/pull/1231) [`0681f90`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0681f901196cf81a87169155f8f632bf12666908) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(consistent-selector-style): Fixed detections of repeated elements such as in {#each}\n\n## 3.8.1\n\n### Patch Changes\n\n- [#1227](https://github.com/sveltejs/eslint-plugin-svelte/pull/1227) [`c938185`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c938185b8a413f200049bc11376db76d768f2ae3) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-top-level-browser-globals): false positives for type annotations\n\n## 3.8.0\n\n### Minor Changes\n\n- [#1210](https://github.com/sveltejs/eslint-plugin-svelte/pull/1210) [`9cffd3b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/9cffd3ba86926793f3240263e38914cdb2180f0a) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-top-level-browser-globals` rule\n\n## 3.7.0\n\n### Minor Changes\n\n- [#1221](https://github.com/sveltejs/eslint-plugin-svelte/pull/1221) [`534ad78`](https://github.com/sveltejs/eslint-plugin-svelte/commit/534ad78221f040ea5f9c32835d6973f4a3643580) Thanks [@baseballyama](https://github.com/baseballyama)! - feat(sort-attributes): support `{@attach}`\n\n## 3.6.0\n\n### Minor Changes\n\n- [#1170](https://github.com/sveltejs/eslint-plugin-svelte/pull/1170) [`3ddbd83`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3ddbd83068a8a82ed5bfe638483c7dd7839e681a) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `prefer-writable-derived` rule\n\n- [#1069](https://github.com/sveltejs/eslint-plugin-svelte/pull/1069) [`73f23ae`](https://github.com/sveltejs/eslint-plugin-svelte/commit/73f23ae0321aa4cb87e700f8478b140059e18c64) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `require-event-prefix` rule\n\n- [#1197](https://github.com/sveltejs/eslint-plugin-svelte/pull/1197) [`e9aec7f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e9aec7f16efb56d5d841a2f5f28cfa05281bcd9d) Thanks [@43081j](https://github.com/43081j)! - Added `no-add-event-listener` rule to disallow usages of `addEventListener`\n\n- [#1148](https://github.com/sveltejs/eslint-plugin-svelte/pull/1148) [`87c74fe`](https://github.com/sveltejs/eslint-plugin-svelte/commit/87c74feef892cb7e04e5709e66dfeda4e27ec820) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(consistent-selector-style): added support for dynamic classes and IDs\n\n### Patch Changes\n\n- [#1208](https://github.com/sveltejs/eslint-plugin-svelte/pull/1208) [`78d0f78`](https://github.com/sveltejs/eslint-plugin-svelte/commit/78d0f78e0740305f62d6e702f89b333d6d97dbec) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-unused-svelte-ignore): ignore reactive-component warnings\n\n## 3.5.1\n\n### Patch Changes\n\n- [#1188](https://github.com/sveltejs/eslint-plugin-svelte/pull/1188) [`9126f1f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/9126f1f017ff990704498570d77fd2d3ff528efe) Thanks [@43081j](https://github.com/43081j)! - Removed eslint-compat-utils from dependencies\n\n## 3.5.0\n\n### Minor Changes\n\n- [#1171](https://github.com/sveltejs/eslint-plugin-svelte/pull/1171) [`842757f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/842757fe45dd2433e801acdce5f66127e2216d7e) Thanks [@baseballyama](https://github.com/baseballyama)! - feat(no-unused-props): add `allowUnusedNestedProperties` option\n\n### Patch Changes\n\n- [#1178](https://github.com/sveltejs/eslint-plugin-svelte/pull/1178) [`7892f4c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7892f4c56a569ebdf80fa791d39c02754bfebe25) Thanks [@baseballyama](https://github.com/baseballyama)! - fix(no-unused-props): handle alias props name properly\n\n## 3.4.1\n\n### Patch Changes\n\n- [#1173](https://github.com/sveltejs/eslint-plugin-svelte/pull/1173) [`8e53e58`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8e53e58411eba530324a8c223f5a2b00080b0cec) Thanks [@43081j](https://github.com/43081j)! - chore: use `context.sourceCode` directly rather than a compatibility helper.\n\n- [#1177](https://github.com/sveltejs/eslint-plugin-svelte/pull/1177) [`ec22fb4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ec22fb41d6ecc3a49cde882556bc4df1d7b681a5) Thanks [@43081j](https://github.com/43081j)! - test: use ESLint and Linter directly from eslint in tests\n\n- [#1174](https://github.com/sveltejs/eslint-plugin-svelte/pull/1174) [`b696ef3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b696ef350846ceb23f7c1078a4e32f8cb8d33681) Thanks [@43081j](https://github.com/43081j)! - chore: use `context.filename` and `context.physicalFilename` instead of compat functions.\n\n- [#1176](https://github.com/sveltejs/eslint-plugin-svelte/pull/1176) [`bafbf5f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/bafbf5f7fc48602f3ede8ec3a7c829e7c4d6e9a4) Thanks [@43081j](https://github.com/43081j)! - chore: switch to `context.cwd` rather than using a compat helper.\n\n## 3.4.0\n\n### Minor Changes\n\n- [#1165](https://github.com/sveltejs/eslint-plugin-svelte/pull/1165) [`2b7e164`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2b7e1640d29477f07f16e5f5b318be34eae9031c) Thanks [@43081j](https://github.com/43081j)! - Adds a suggestion to the `require-store-callbacks-use-set-param` rule to automatically rename or add function parameters.\n\n- [#1163](https://github.com/sveltejs/eslint-plugin-svelte/pull/1163) [`d9b8604`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d9b8604f1dc1c83797d4e853c5a805ffd49ce58d) Thanks [@43081j](https://github.com/43081j)! - Adds a suggestion to the `derived-has-same-inputs-outputs` rule which renames the outputs.\n\n- [#1164](https://github.com/sveltejs/eslint-plugin-svelte/pull/1164) [`29b1315`](https://github.com/sveltejs/eslint-plugin-svelte/commit/29b13152063f2250d33651b1e99991607a443352) Thanks [@43081j](https://github.com/43081j)! - Added a suggestion for `no-at-debug-tags` rule which removes the tags\n\n### Patch Changes\n\n- [#1167](https://github.com/sveltejs/eslint-plugin-svelte/pull/1167) [`db9202d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/db9202de81463d20b1a17d1a0d94e3fd6fe62023) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to 1.1.1\n\n## 3.3.3\n\n### Patch Changes\n\n- [#1146](https://github.com/sveltejs/eslint-plugin-svelte/pull/1146) [`1233e46`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1233e46413132c1e81dc69981be1533c5e6c6a4d) Thanks [@baseballyama](https://github.com/baseballyama)! - fix(no-unused-props): resolve false positives on props with default values or $bindable usage\n\n## 3.3.2\n\n### Patch Changes\n\n- [#1143](https://github.com/sveltejs/eslint-plugin-svelte/pull/1143) [`138380d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/138380deeec2ccd0189b70abf7d9a2cd6b608338) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: stop reporting child properties in `no-unused-props` when the parent object itself is used\n\n## 3.3.1\n\n### Patch Changes\n\n- [#1140](https://github.com/sveltejs/eslint-plugin-svelte/pull/1140) [`40806a4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/40806a4b6342a7f2d1bd40d65df8dec5af666e1a) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(no-useless-mustaches): Wrong auto-fix for quoted mustaches\n\n## 3.3.0\n\n### Minor Changes\n\n- [#1132](https://github.com/sveltejs/eslint-plugin-svelte/pull/1132) [`30c1e5f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/30c1e5fc6517cec7171ca42327699c3ad9ab6580) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `ignorePropertyPatterns` property and rename `ignorePatterns` to `ignoreTypePatterns` in `no-unused-props` rule. The `ignorePatterns` option existed only for a few hours and is removed by this PR. Technically, this is a breaking change, but we’ll handle it as a minor release since very few users are likely affected.\n\n## 3.2.2\n\n### Patch Changes\n\n- [#1135](https://github.com/sveltejs/eslint-plugin-svelte/pull/1135) [`1ff148a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1ff148a0bb24954aef59ce93b05a35913d83f2ee) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: correct detection of externally defined types in `no-unused-props` rule\n\n## 3.2.1\n\n### Patch Changes\n\n- [#1128](https://github.com/sveltejs/eslint-plugin-svelte/pull/1128) [`e94b59a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e94b59a35c914d868f89dd300b8d6b8090054976) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: resolve false positives on nested objects in `no-unused-props` rule\n\n## 3.2.0\n\n### Minor Changes\n\n- [#1062](https://github.com/sveltejs/eslint-plugin-svelte/pull/1062) [`a4d3b29`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a4d3b295583309bd8fcde846d1a1daa612d4d56a) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `no-unnecessary-state-wrap` rule\n\n- [#1061](https://github.com/sveltejs/eslint-plugin-svelte/pull/1061) [`268a372`](https://github.com/sveltejs/eslint-plugin-svelte/commit/268a3727e17c4bcb1906cc6901667a1272d2a191) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `no-unused-props` rule\n\n## 3.1.0\n\n### Minor Changes\n\n- [#1064](https://github.com/sveltejs/eslint-plugin-svelte/pull/1064) [`df1647f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/df1647f64c3abeffc46523a85ea8ea08cc5b4c85) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `excludedRunes` option to the `prefer-const` rule\n\n### Patch Changes\n\n- [#1126](https://github.com/sveltejs/eslint-plugin-svelte/pull/1126) [`9b76b46`](https://github.com/sveltejs/eslint-plugin-svelte/commit/9b76b46e8637baff1bda0039edeacd647637993c) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: check property key instead of value in `valid-prop-names-in-kit-pages` rule\n\n- [#1125](https://github.com/sveltejs/eslint-plugin-svelte/pull/1125) [`0a03362`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0a0336267a41885871a181ed00454929bc2d79da) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: support windows path delimiter\n\n- [#1108](https://github.com/sveltejs/eslint-plugin-svelte/pull/1108) [`976e4f0`](https://github.com/sveltejs/eslint-plugin-svelte/commit/976e4f0b5047f70b737e898743187afff88fea56) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(consistent-selector-style): not reporting class selectors used in class directives\n\n- [#1107](https://github.com/sveltejs/eslint-plugin-svelte/pull/1107) [`3b01537`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3b015374eb80d08a914321b36da36ccc9eac730f) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-navigation-without-base): ignoring fragment links\n\n## 3.0.3\n\n### Patch Changes\n\n- [#1115](https://github.com/sveltejs/eslint-plugin-svelte/pull/1115) [`7f756b8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7f756b8535818008742eead569ebf03065db776b) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: align required Node version with ESLint\n\n## 3.0.2\n\n### Patch Changes\n\n- [#1100](https://github.com/sveltejs/eslint-plugin-svelte/pull/1100) [`1358d89`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1358d89206e9cf57faf5789d246ed99489f1685b) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: handle `<script module>` in `valid-prop-names-in-kit-pages` rule\n\n## 3.0.1\n\n### Patch Changes\n\n- [#1091](https://github.com/sveltejs/eslint-plugin-svelte/pull/1091) [`83da078`](https://github.com/sveltejs/eslint-plugin-svelte/commit/83da0784e93fe148579de6fcd665ed94da76411d) Thanks [@ottomated](https://github.com/ottomated)! - fix: Don't remove mustache'd string literals if they contain curly braces\n\n## 3.0.0\n\n### Major Changes\n\n- [#937](https://github.com/sveltejs/eslint-plugin-svelte/pull/937) [`729394e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/729394e34d2d6f51e00c89b67a40d0f9192260b4) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: drop support for old eslint\n\n- [#1033](https://github.com/sveltejs/eslint-plugin-svelte/pull/1033) [`3bfcc31`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3bfcc31e0f2d127c7a1cb838c4c57125c30109ea) Thanks [@baseballyama](https://github.com/baseballyama)! - **Enabled in recommended config**:\n  - `svelte/infinite-reactive-loop`\n  - `svelte/no-dom-manipulating`\n  - `svelte/no-dupe-on-directives`\n  - `svelte/no-dupe-use-directives`\n  - `svelte/no-export-load-in-svelte-module-in-kit-pages`\n  - `svelte/no-immutable-reactive-statements`\n  - `svelte/no-inspect`\n  - `svelte/no-raw-special-elements`\n  - `svelte/no-reactive-functions`\n  - `svelte/no-reactive-literals`\n  - `svelte/no-reactive-reassign`\n  - `svelte/no-store-async`\n  - `svelte/no-svelte-internal`\n  - `svelte/no-useless-children-snippet`\n  - `svelte/no-useless-mustaches`\n  - `svelte/require-each-key`\n  - `svelte/require-event-dispatcher-types`\n  - `svelte/require-store-reactive-access`\n  - `svelte/require-stores-init`\n  - `svelte/valid-each-key`\n  - `svelte/valid-prop-names-in-kit-pages`\n\n  **Removed from recommended config**:\n  - `svelte/valid-compile`\n\n  This update introduces breaking changes due to newly enabled rules.\n\n- [#1086](https://github.com/sveltejs/eslint-plugin-svelte/pull/1086) [`1c679b5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1c679b50f310040257b89e4e03d3a88764fd7b28) Thanks [@baseballyama](https://github.com/baseballyama)! - breaking: remove `require-stores-init` from recommended rules\n\n- [#1043](https://github.com/sveltejs/eslint-plugin-svelte/pull/1043) [`778427e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/778427e8bd1a015247dd7f19642e2c6ced0891a8) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `*.svelte.{js,ts}` config to base config\n\n- [#900](https://github.com/sveltejs/eslint-plugin-svelte/pull/900) [`4759b47`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4759b47b195abee605a0597360fc9fc4c6d95f68) Thanks [@marekdedic](https://github.com/marekdedic)! - breaking: deprecated the no-goto-without-base rule\n\n- [#885](https://github.com/sveltejs/eslint-plugin-svelte/pull/885) [`ce2ffad`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ce2ffad105b1c6ed2df02a9c2b84f3b654d99ad5) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: drop support for old node versions (<18, 19, 21)\n\n- [#1011](https://github.com/sveltejs/eslint-plugin-svelte/pull/1011) [`7596287`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7596287c9d1a0a31c90e23875f6b7beab20747f1) Thanks [@baseballyama](https://github.com/baseballyama)! - breaking: deprecate the `svelte/no-dynamic-slot-name` rule\n\n- [#930](https://github.com/sveltejs/eslint-plugin-svelte/pull/930) [`eae1b4f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eae1b4fcbfbaec926cfa63a5d08eafcb2238bf82) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: upgrade svelte-eslint-parser to v1\n\n- [#982](https://github.com/sveltejs/eslint-plugin-svelte/pull/982) [`04fc429`](https://github.com/sveltejs/eslint-plugin-svelte/commit/04fc4292ef68134691ac1808fd92688bd9982d37) Thanks [@baseballyama](https://github.com/baseballyama)! - feat!: Updated the `html-self-closing` rule to follow Svelte5\n\n- [#932](https://github.com/sveltejs/eslint-plugin-svelte/pull/932) [`b136ab4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b136ab4e54d8ff38f6ba7f49e1209be14dd18b0b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: change the plugin to an ESM-only package\n\n### Minor Changes\n\n- [#980](https://github.com/sveltejs/eslint-plugin-svelte/pull/980) [`0b28198`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0b28198edd78513e5efc4cfb45e8f1120148435e) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: Implement util to conditionally run lint based on Svelte version and SvelteKit routes etc\n\n- [#1013](https://github.com/sveltejs/eslint-plugin-svelte/pull/1013) [`0ef0f99`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0ef0f99e1781e0453598393b846e63bd159c215d) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add Svelte 5 support to `no-not-function-handler`\n\n- [#900](https://github.com/sveltejs/eslint-plugin-svelte/pull/900) [`4759b47`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4759b47b195abee605a0597360fc9fc4c6d95f68) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-navigation-without-base rule\n\n- [#925](https://github.com/sveltejs/eslint-plugin-svelte/pull/925) [`faf90ef`](https://github.com/sveltejs/eslint-plugin-svelte/commit/faf90ef9a6aab3ec647c30df67a54a25d8322324) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `consistent-selector-style` rule\n\n- [#945](https://github.com/sveltejs/eslint-plugin-svelte/pull/945) [`19f682b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/19f682b73ce6bcccae52da0e59d5ab32a9d2c3c2) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: Support `<svelte:boundary>`\n\n- [#844](https://github.com/sveltejs/eslint-plugin-svelte/pull/844) [`2bbd049`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2bbd0497ab7e05db0aab3c8958db08e3fdf4b9b2) Thanks [@Winter](https://github.com/Winter)! - feat: Added suggestion to the `block-lang` rule.\n\n- [#984](https://github.com/sveltejs/eslint-plugin-svelte/pull/984) [`35d80a5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/35d80a50f1053666153bfc7221b945055bfb76d1) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: support `warningFilter` in `valid-compile` rule\n\n- [#933](https://github.com/sveltejs/eslint-plugin-svelte/pull/933) [`71eca84`](https://github.com/sveltejs/eslint-plugin-svelte/commit/71eca843c43250591ec6fa2dd1dc547b1074d6ad) Thanks [@mikededo](https://github.com/mikededo)! - Add `prefer-const` rule\n\n- [#918](https://github.com/sveltejs/eslint-plugin-svelte/pull/918) [`5da98c9`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5da98c94f452c8436f26af4172e095fd91f66e1a) Thanks [@mikededo](https://github.com/mikededo)! - Added new `no-deprecated-raw-special-elements` rule\n\n- [#922](https://github.com/sveltejs/eslint-plugin-svelte/pull/922) [`f4a0fa7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f4a0fa78e06091348d985b5442a390eae47b0f4f) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-useless-children-snippet rule\n\n- [#836](https://github.com/sveltejs/eslint-plugin-svelte/pull/836) [`3fa90aa`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3fa90aa57a15ad18105b0d80b1ed975f1f782a11) Thanks [@renovate](https://github.com/apps/renovate)! - feat: support for typescript-eslint v8 to `svelte/indent` rule\n\n- [#963](https://github.com/sveltejs/eslint-plugin-svelte/pull/963) [`2c551b2`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2c551b20557bcd53e35479336bf0c25e88a7643b) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: support Svelte5 of `valid-prop-names-in-kit-pages` rule\n\n- [#1054](https://github.com/sveltejs/eslint-plugin-svelte/pull/1054) [`c587629`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c587629ba2a7d7742965367eb3ad797a9075ef8a) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the valid-style-parse rule\n\n- [#1085](https://github.com/sveltejs/eslint-plugin-svelte/pull/1085) [`a0588ef`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a0588ef1fa2d3662a664f4d5564f9f225c67696e) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to v1\n\n- [#1015](https://github.com/sveltejs/eslint-plugin-svelte/pull/1015) [`8369eaf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8369eaf5d2e77fccf0ac9fb3f663d94a2b323a4f) Thanks [@mikededo](https://github.com/mikededo)! - fix!: rename `no-deprecated-raw-special-elements` to `no-raw-special-elements`\n\n- [#911](https://github.com/sveltejs/eslint-plugin-svelte/pull/911) [`452ffed`](https://github.com/sveltejs/eslint-plugin-svelte/commit/452ffed53791cb9e158636bcd80a221d2840cc4a) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-inline-styles): allowing transitions by default\n\n- [#1063](https://github.com/sveltejs/eslint-plugin-svelte/pull/1063) [`d39c90c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d39c90c86edfedb9be42a011a5ca4573f6661397) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: detect version information from node_modules when not specified in package.json, like pnpm’s catalog\n\n### Patch Changes\n\n- [#961](https://github.com/sveltejs/eslint-plugin-svelte/pull/961) [`117e60d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/117e60d4290966911450c7e0db8566279e4511bb) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: support each blocks without an item\n\n- [#1009](https://github.com/sveltejs/eslint-plugin-svelte/pull/1009) [`a003664`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a0036643b5451f0423cd61dafd092c39bd6f4bcb) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: upgrade `svelte-eslint-parser` to `1.0.0-next.8`\n\n- [#1016](https://github.com/sveltejs/eslint-plugin-svelte/pull/1016) [`91999e3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/91999e3520afe42b3cc51f0823f7c912b97176b4) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: change the rule category of `valid-prop-names-in-kit-pages` to `SvelteKit`\n\n- [#993](https://github.com/sveltejs/eslint-plugin-svelte/pull/993) [`b97a13e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b97a13eb02f9c72346f29e64734f0a304890a197) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: add `:exit` for each node listener\n\n- [#1048](https://github.com/sveltejs/eslint-plugin-svelte/pull/1048) [`513806c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/513806cafe221487afd32bdcaa33ba8852dc881f) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: allow `children` in `valid-prop-names-in-kit-pages` rule\n\n- [#1012](https://github.com/sveltejs/eslint-plugin-svelte/pull/1012) [`763cf7a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/763cf7ace209dfb90cf7d1d7e6699a6c0fe240d6) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: change the rule category of `no-export-load-in-svelte-module-in-kit-pages` to `SvelteKit`\n\n- [#1021](https://github.com/sveltejs/eslint-plugin-svelte/pull/1021) [`6557c69`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6557c69d7f3595cdf226e681cadf3d0df4c5d972) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to `1.0.0-next.10`\n\n- [#956](https://github.com/sveltejs/eslint-plugin-svelte/pull/956) [`157ee1f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/157ee1fade79aab88f01d125b0b01cf375da4cd1) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to v1.0.0-next.4\n\n- [#965](https://github.com/sveltejs/eslint-plugin-svelte/pull/965) [`47760ad`](https://github.com/sveltejs/eslint-plugin-svelte/commit/47760ad1b7f6b83d4c29380b3ef3cf09cde42dc8) Thanks [@marekdedic](https://github.com/marekdedic)! - chore: using svelte-eslint-parser for style selector parsing\n\n- [#990](https://github.com/sveltejs/eslint-plugin-svelte/pull/990) [`12049c0`](https://github.com/sveltejs/eslint-plugin-svelte/commit/12049c026f529feff6056e679ba62f07de948aa5) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: ignore `css_unused_selector` compile error if `<style>` tag has `global` attribute\n\n- [#1035](https://github.com/sveltejs/eslint-plugin-svelte/pull/1035) [`f16729f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f16729f55877b1768ec8d240fd8e416f141781ce) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: run `require-event-dispatcher-types` rule on Svelte 3/4 only\n\n- [#1040](https://github.com/sveltejs/eslint-plugin-svelte/pull/1040) [`ac7115c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ac7115c74b3f1e82ef15be81d9ef2026da76bb11) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: account for \\n and \\r in `TemplateLiteral` handling for the `no-useless-mustaches` rule\n\n- [#1020](https://github.com/sveltejs/eslint-plugin-svelte/pull/1020) [`eae0e2e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eae0e2e52c2812ea630eea45e5be4f439191c806) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to `1.0.0-next.9`\n\n- [#1017](https://github.com/sveltejs/eslint-plugin-svelte/pull/1017) [`806d72a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/806d72ad55908fb967252ea0514672b026a6bd09) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `no-reactive-functions` rule on Svelte 5 with runes\n\n- [#1014](https://github.com/sveltejs/eslint-plugin-svelte/pull/1014) [`74373ec`](https://github.com/sveltejs/eslint-plugin-svelte/commit/74373ec77aa9063c64657faefc01ca331e27b599) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `no-reactive-reassign` rule on Svelte 5 with runes\n\n- [#1026](https://github.com/sveltejs/eslint-plugin-svelte/pull/1026) [`1bed311`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1bed311084c58a9893e2b578f8b34c2fcb2e8d8b) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to `v1.0.0-next.12`\n\n- [#941](https://github.com/sveltejs/eslint-plugin-svelte/pull/941) [`fce2f74`](https://github.com/sveltejs/eslint-plugin-svelte/commit/fce2f74b4b2fe8185742f0411739103301f8ea9f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: crash with eslint v9.16.0 in `svelte/no-inner-declarations`\n\n- [#1018](https://github.com/sveltejs/eslint-plugin-svelte/pull/1018) [`5bdc906`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5bdc906fc1e32835ab3b75dfd2a6a08b4cbb968b) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: run the `no-inspect` rule only in Svelte 5’s runes mode\n\n- [#1006](https://github.com/sveltejs/eslint-plugin-svelte/pull/1006) [`5fd91ba`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5fd91baa1835cbffc58a8c473ccf70f3f02a34e6) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `infinite-reactive-loop` rule on Svelte 5 with runes\n\n- [#1031](https://github.com/sveltejs/eslint-plugin-svelte/pull/1031) [`e50d2d4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e50d2d4a8820c222696c049e0b01988626845584) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `no-reactive-literals` rule on Svelte 5 with runes\n\n- [#1032](https://github.com/sveltejs/eslint-plugin-svelte/pull/1032) [`722b36c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/722b36ce3b8a16b965f61701dead22b95c7e8b3d) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: run `no-useless-children-snippet` rule on Svelte 5 only\n\n- [#1007](https://github.com/sveltejs/eslint-plugin-svelte/pull/1007) [`8e9199a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8e9199ae326110778e4b0557616d394c6ac5e847) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: update method for extracting major version\n\n## 3.0.0-next.18\n\n### Patch Changes\n\n- [#1048](https://github.com/sveltejs/eslint-plugin-svelte/pull/1048) [`513806c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/513806cafe221487afd32bdcaa33ba8852dc881f) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: allow `children` in `valid-prop-names-in-kit-pages` rule\n\n## 3.0.0-next.17\n\n### Major Changes\n\n- [#1043](https://github.com/sveltejs/eslint-plugin-svelte/pull/1043) [`778427e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/778427e8bd1a015247dd7f19642e2c6ced0891a8) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `*.svelte.{js,ts}` config to base config\n\n## 3.0.0-next.16\n\n### Major Changes\n\n- [#1033](https://github.com/sveltejs/eslint-plugin-svelte/pull/1033) [`3bfcc31`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3bfcc31e0f2d127c7a1cb838c4c57125c30109ea) Thanks [@baseballyama](https://github.com/baseballyama)! - **Enabled in recommended config**:\n  - `svelte/infinite-reactive-loop`\n  - `svelte/no-dom-manipulating`\n  - `svelte/no-dupe-on-directives`\n  - `svelte/no-dupe-use-directives`\n  - `svelte/no-export-load-in-svelte-module-in-kit-pages`\n  - `svelte/no-immutable-reactive-statements`\n  - `svelte/no-inspect`\n  - `svelte/no-raw-special-elements`\n  - `svelte/no-reactive-functions`\n  - `svelte/no-reactive-literals`\n  - `svelte/no-reactive-reassign`\n  - `svelte/no-store-async`\n  - `svelte/no-svelte-internal`\n  - `svelte/no-useless-children-snippet`\n  - `svelte/no-useless-mustaches`\n  - `svelte/require-each-key`\n  - `svelte/require-event-dispatcher-types`\n  - `svelte/require-store-reactive-access`\n  - `svelte/require-stores-init`\n  - `svelte/valid-each-key`\n  - `svelte/valid-prop-names-in-kit-pages`\n\n  **Removed from recommended config**:\n  - `svelte/valid-compile`\n\n  This update introduces breaking changes due to newly enabled rules.\n\n- [#1011](https://github.com/sveltejs/eslint-plugin-svelte/pull/1011) [`7596287`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7596287c9d1a0a31c90e23875f6b7beab20747f1) Thanks [@baseballyama](https://github.com/baseballyama)! - breaking: deprecate the `svelte/no-dynamic-slot-name` rule\n\n### Minor Changes\n\n- [#1013](https://github.com/sveltejs/eslint-plugin-svelte/pull/1013) [`0ef0f99`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0ef0f99e1781e0453598393b846e63bd159c215d) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add Svelte 5 support to `no-not-function-handler`\n\n### Patch Changes\n\n- [#1035](https://github.com/sveltejs/eslint-plugin-svelte/pull/1035) [`f16729f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f16729f55877b1768ec8d240fd8e416f141781ce) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: run `require-event-dispatcher-types` rule on Svelte 3/4 only\n\n- [#1040](https://github.com/sveltejs/eslint-plugin-svelte/pull/1040) [`ac7115c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ac7115c74b3f1e82ef15be81d9ef2026da76bb11) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: account for \\n and \\r in `TemplateLiteral` handling for the `no-useless-mustaches` rule\n\n- [#1031](https://github.com/sveltejs/eslint-plugin-svelte/pull/1031) [`e50d2d4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e50d2d4a8820c222696c049e0b01988626845584) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `no-reactive-literals` rule on Svelte 5 with runes\n\n- [#1032](https://github.com/sveltejs/eslint-plugin-svelte/pull/1032) [`722b36c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/722b36ce3b8a16b965f61701dead22b95c7e8b3d) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: run `no-useless-children-snippet` rule on Svelte 5 only\n\n## 3.0.0-next.15\n\n### Minor Changes\n\n- [#925](https://github.com/sveltejs/eslint-plugin-svelte/pull/925) [`faf90ef`](https://github.com/sveltejs/eslint-plugin-svelte/commit/faf90ef9a6aab3ec647c30df67a54a25d8322324) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `consistent-selector-style` rule\n\n- [#984](https://github.com/sveltejs/eslint-plugin-svelte/pull/984) [`35d80a5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/35d80a50f1053666153bfc7221b945055bfb76d1) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: support `warningFilter` in `valid-compile` rule\n\n### Patch Changes\n\n- [#1016](https://github.com/sveltejs/eslint-plugin-svelte/pull/1016) [`91999e3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/91999e3520afe42b3cc51f0823f7c912b97176b4) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: change the rule category of `valid-prop-names-in-kit-pages` to `SvelteKit`\n\n- [#1012](https://github.com/sveltejs/eslint-plugin-svelte/pull/1012) [`763cf7a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/763cf7ace209dfb90cf7d1d7e6699a6c0fe240d6) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: change the rule category of `no-export-load-in-svelte-module-in-kit-pages` to `SvelteKit`\n\n- [#1017](https://github.com/sveltejs/eslint-plugin-svelte/pull/1017) [`806d72a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/806d72ad55908fb967252ea0514672b026a6bd09) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `no-reactive-functions` rule on Svelte 5 with runes\n\n- [#1014](https://github.com/sveltejs/eslint-plugin-svelte/pull/1014) [`74373ec`](https://github.com/sveltejs/eslint-plugin-svelte/commit/74373ec77aa9063c64657faefc01ca331e27b599) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `no-reactive-reassign` rule on Svelte 5 with runes\n\n- [#1026](https://github.com/sveltejs/eslint-plugin-svelte/pull/1026) [`1bed311`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1bed311084c58a9893e2b578f8b34c2fcb2e8d8b) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to `v1.0.0-next.12`\n\n- [#1018](https://github.com/sveltejs/eslint-plugin-svelte/pull/1018) [`5bdc906`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5bdc906fc1e32835ab3b75dfd2a6a08b4cbb968b) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: run the `no-inspect` rule only in Svelte 5’s runes mode\n\n- [#1006](https://github.com/sveltejs/eslint-plugin-svelte/pull/1006) [`5fd91ba`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5fd91baa1835cbffc58a8c473ccf70f3f02a34e6) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: do not run `infinite-reactive-loop` rule on Svelte 5 with runes\n\n## 3.0.0-next.14\n\n### Patch Changes\n\n- [#1021](https://github.com/sveltejs/eslint-plugin-svelte/pull/1021) [`6557c69`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6557c69d7f3595cdf226e681cadf3d0df4c5d972) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to `1.0.0-next.10`\n\n## 3.0.0-next.13\n\n### Major Changes\n\n- [#982](https://github.com/sveltejs/eslint-plugin-svelte/pull/982) [`04fc429`](https://github.com/sveltejs/eslint-plugin-svelte/commit/04fc4292ef68134691ac1808fd92688bd9982d37) Thanks [@baseballyama](https://github.com/baseballyama)! - feat!: Updated the `html-self-closing` rule to follow Svelte5\n\n### Minor Changes\n\n- [#1015](https://github.com/sveltejs/eslint-plugin-svelte/pull/1015) [`8369eaf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8369eaf5d2e77fccf0ac9fb3f663d94a2b323a4f) Thanks [@mikededo](https://github.com/mikededo)! - fix!: rename `no-deprecated-raw-special-elements` to `no-raw-special-elements`\n\n### Patch Changes\n\n- [#1009](https://github.com/sveltejs/eslint-plugin-svelte/pull/1009) [`a003664`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a0036643b5451f0423cd61dafd092c39bd6f4bcb) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: upgrade `svelte-eslint-parser` to `1.0.0-next.8`\n\n- [#1020](https://github.com/sveltejs/eslint-plugin-svelte/pull/1020) [`eae0e2e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eae0e2e52c2812ea630eea45e5be4f439191c806) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to `1.0.0-next.9`\n\n- [#1007](https://github.com/sveltejs/eslint-plugin-svelte/pull/1007) [`8e9199a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8e9199ae326110778e4b0557616d394c6ac5e847) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: update method for extracting major version\n\n## 3.0.0-next.12\n\n### Patch Changes\n\n- [#990](https://github.com/sveltejs/eslint-plugin-svelte/pull/990) [`12049c0`](https://github.com/sveltejs/eslint-plugin-svelte/commit/12049c026f529feff6056e679ba62f07de948aa5) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: ignore `css_unused_selector` compile error if `<style>` tag has `global` attribute\n\n## 3.0.0-next.11\n\n### Minor Changes\n\n- [#980](https://github.com/sveltejs/eslint-plugin-svelte/pull/980) [`0b28198`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0b28198edd78513e5efc4cfb45e8f1120148435e) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: Implement util to conditionally run lint based on Svelte version and SvelteKit routes etc\n\n### Patch Changes\n\n- [#993](https://github.com/sveltejs/eslint-plugin-svelte/pull/993) [`b97a13e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b97a13eb02f9c72346f29e64734f0a304890a197) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: add `:exit` for each node listener\n\n## 3.0.0-next.10\n\n### Patch Changes\n\n- [#965](https://github.com/sveltejs/eslint-plugin-svelte/pull/965) [`47760ad`](https://github.com/sveltejs/eslint-plugin-svelte/commit/47760ad1b7f6b83d4c29380b3ef3cf09cde42dc8) Thanks [@marekdedic](https://github.com/marekdedic)! - chore: using svelte-eslint-parser for style selector parsing\n\n## 3.0.0-next.9\n\n### Minor Changes\n\n- [#922](https://github.com/sveltejs/eslint-plugin-svelte/pull/922) [`f4a0fa7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f4a0fa78e06091348d985b5442a390eae47b0f4f) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-useless-children-snippet rule\n\n## 3.0.0-next.8\n\n### Minor Changes\n\n- [#844](https://github.com/sveltejs/eslint-plugin-svelte/pull/844) [`2bbd049`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2bbd0497ab7e05db0aab3c8958db08e3fdf4b9b2) Thanks [@Winter](https://github.com/Winter)! - feat: Added suggestion to the `block-lang` rule.\n\n## 3.0.0-next.7\n\n### Major Changes\n\n- [#900](https://github.com/sveltejs/eslint-plugin-svelte/pull/900) [`4759b47`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4759b47b195abee605a0597360fc9fc4c6d95f68) Thanks [@marekdedic](https://github.com/marekdedic)! - breaking: deprecated the no-goto-without-base rule\n\n### Minor Changes\n\n- [#900](https://github.com/sveltejs/eslint-plugin-svelte/pull/900) [`4759b47`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4759b47b195abee605a0597360fc9fc4c6d95f68) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-navigation-without-base rule\n\n## 3.0.0-next.6\n\n### Minor Changes\n\n- [#933](https://github.com/sveltejs/eslint-plugin-svelte/pull/933) [`71eca84`](https://github.com/sveltejs/eslint-plugin-svelte/commit/71eca843c43250591ec6fa2dd1dc547b1074d6ad) Thanks [@mikededo](https://github.com/mikededo)! - Add `prefer-const` rule\n\n- [#963](https://github.com/sveltejs/eslint-plugin-svelte/pull/963) [`2c551b2`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2c551b20557bcd53e35479336bf0c25e88a7643b) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: support Svelte5 of `valid-prop-names-in-kit-pages` rule\n\n### Patch Changes\n\n- [#961](https://github.com/sveltejs/eslint-plugin-svelte/pull/961) [`117e60d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/117e60d4290966911450c7e0db8566279e4511bb) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: support each blocks without an item\n\n## 3.0.0-next.5\n\n### Patch Changes\n\n- [#956](https://github.com/sveltejs/eslint-plugin-svelte/pull/956) [`157ee1f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/157ee1fade79aab88f01d125b0b01cf375da4cd1) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: update `svelte-eslint-parser` to v1.0.0-next.4\n\n## 3.0.0-next.4\n\n### Major Changes\n\n- [#932](https://github.com/sveltejs/eslint-plugin-svelte/pull/932) [`b136ab4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b136ab4e54d8ff38f6ba7f49e1209be14dd18b0b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: change the plugin to an ESM-only package\n\n## 3.0.0-next.3\n\n### Major Changes\n\n- [#937](https://github.com/sveltejs/eslint-plugin-svelte/pull/937) [`729394e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/729394e34d2d6f51e00c89b67a40d0f9192260b4) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: drop support for old eslint\n\n### Minor Changes\n\n- [#945](https://github.com/sveltejs/eslint-plugin-svelte/pull/945) [`19f682b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/19f682b73ce6bcccae52da0e59d5ab32a9d2c3c2) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: Support `<svelte:boundary>`\n\n## 3.0.0-next.2\n\n### Patch Changes\n\n- [#941](https://github.com/sveltejs/eslint-plugin-svelte/pull/941) [`fce2f74`](https://github.com/sveltejs/eslint-plugin-svelte/commit/fce2f74b4b2fe8185742f0411739103301f8ea9f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: crash with eslint v9.16.0 in `svelte/no-inner-declarations`\n\n## 3.0.0-next.1\n\n### Minor Changes\n\n- [#918](https://github.com/sveltejs/eslint-plugin-svelte/pull/918) [`5da98c9`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5da98c94f452c8436f26af4172e095fd91f66e1a) Thanks [@mikededo](https://github.com/mikededo)! - Added new `no-deprecated-raw-special-elements` rule\n\n- [#836](https://github.com/sveltejs/eslint-plugin-svelte/pull/836) [`3fa90aa`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3fa90aa57a15ad18105b0d80b1ed975f1f782a11) Thanks [@renovate](https://github.com/apps/renovate)! - feat: support for typescript-eslint v8 to `svelte/indent` rule\n\n## 3.0.0-next.0\n\n### Major Changes\n\n- [#885](https://github.com/sveltejs/eslint-plugin-svelte/pull/885) [`ce2ffad`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ce2ffad105b1c6ed2df02a9c2b84f3b654d99ad5) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: drop support for old node versions (<18, 19, 21)\n\n- [#930](https://github.com/sveltejs/eslint-plugin-svelte/pull/930) [`eae1b4f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eae1b4fcbfbaec926cfa63a5d08eafcb2238bf82) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat!: upgrade svelte-eslint-parser to v1\n\n### Minor Changes\n\n- [#911](https://github.com/sveltejs/eslint-plugin-svelte/pull/911) [`452ffed`](https://github.com/sveltejs/eslint-plugin-svelte/commit/452ffed53791cb9e158636bcd80a221d2840cc4a) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-inline-styles): allowing transitions by default\n\n## 2.46.0\n\n### Minor Changes\n\n- [#881](https://github.com/sveltejs/eslint-plugin-svelte/pull/881) [`051925c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/051925c742e1cae98cc8e7f637a6a510e472128f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte to v5.0.0\n\n- [#884](https://github.com/sveltejs/eslint-plugin-svelte/pull/884) [`bbc3e07`](https://github.com/sveltejs/eslint-plugin-svelte/commit/bbc3e07931da8f4aff2044a4792064200b63ab60) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.43.0\n\n## 2.45.1\n\n### Patch Changes\n\n- [#874](https://github.com/sveltejs/eslint-plugin-svelte/pull/874) [`457521a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/457521aef18ba95b99eb5e9c79a81d0a4fb3552e) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser to v0.42\n\n## 2.45.0\n\n### Minor Changes\n\n- [#870](https://github.com/sveltejs/eslint-plugin-svelte/pull/870) [`b0373be`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b0373bef49e4225751c98c3c46c6099cb7d1ca72) Thanks [@mikededo](https://github.com/mikededo)! - feat(html-closing-bracket-new-line): add `html-closing-bracket-new-line` rule\n\n- [#868](https://github.com/sveltejs/eslint-plugin-svelte/pull/868) [`edf99d3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/edf99d3d7b7bf47def460efce4aabe59c2ce446d) Thanks [@mikededo](https://github.com/mikededo)! - feat(no-inspect): add `no-inspect` rule\n\n### Patch Changes\n\n- [#856](https://github.com/sveltejs/eslint-plugin-svelte/pull/856) [`cf6c842`](https://github.com/sveltejs/eslint-plugin-svelte/commit/cf6c842abc8730ef3841686a52273eec3906abcf) Thanks [@KuSh](https://github.com/KuSh)! - chore: Avoid using deprecated FlatConfig eslint type\n\n## 2.44.1\n\n### Patch Changes\n\n- [#864](https://github.com/sveltejs/eslint-plugin-svelte/pull/864) [`580e48a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/580e48ae0edcfd2cb5dd51863130a9c08b24829e) Thanks [@mikededo](https://github.com/mikededo)! - fix(svelte/indent): ensure proper snippet indent\n\n## 2.44.0\n\n### Minor Changes\n\n- [#841](https://github.com/sveltejs/eslint-plugin-svelte/pull/841) [`85053a1`](https://github.com/sveltejs/eslint-plugin-svelte/commit/85053a1af237b78548a0a52f9d73ed5af695c354) Thanks [@jrmajor](https://github.com/jrmajor)! - feat: add config option for foreign elements in `svelte/html-self-closing` rule\n\n### Patch Changes\n\n- [#853](https://github.com/sveltejs/eslint-plugin-svelte/pull/853) [`690c04e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/690c04e5ce61999cb3846881cd8bd0b571fe2874) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser to 0.41.1\n\n## 2.43.0\n\n### Minor Changes\n\n- [#827](https://github.com/sveltejs/eslint-plugin-svelte/pull/827) [`dc7eefc`](https://github.com/sveltejs/eslint-plugin-svelte/commit/dc7eefce962e337bb7579c8b07374931c584e65f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(deps): update dependency svelte-eslint-parser to ^0.41.0\n\n## 2.42.0\n\n### Minor Changes\n\n- [#822](https://github.com/sveltejs/eslint-plugin-svelte/pull/822) [`88da3cf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/88da3cfbfe4be364a4f6860b53fbe389264c318d) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.40.0\n\n## 2.41.0\n\n### Minor Changes\n\n- [#802](https://github.com/sveltejs/eslint-plugin-svelte/pull/802) [`be64d36`](https://github.com/sveltejs/eslint-plugin-svelte/commit/be64d36dfe07f37cdd10d4bac9d80989518dccc2) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: broken indentation of if condition in `svelte/indent` rule\n\n### Patch Changes\n\n- [#789](https://github.com/sveltejs/eslint-plugin-svelte/pull/789) [`0bc17df`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0bc17dfe72aca1236a7e693ac7e23240c8d72910) Thanks [@KuSh](https://github.com/KuSh)! - chore: Use eslint types for exported configs\n\n- [#805](https://github.com/sveltejs/eslint-plugin-svelte/pull/805) [`6e4d3ed`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6e4d3edd17cf930b3e266f51e8ae999e1961006f) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: update `svelte-eslint-parser` to fix nested `{#snippet}`\n\n- [#800](https://github.com/sveltejs/eslint-plugin-svelte/pull/800) [`580f44f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/580f44fa4a64af32d7d3257b871745e926305b8c) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add name to flat configs.\n\n## 2.40.0\n\n### Minor Changes\n\n- [#792](https://github.com/sveltejs/eslint-plugin-svelte/pull/792) [`cb722bc`](https://github.com/sveltejs/eslint-plugin-svelte/commit/cb722bc9d455f4caeaa4dfdf5771dc95f06b26b8) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte-eslint-parser to 0.39\n\n- [#796](https://github.com/sveltejs/eslint-plugin-svelte/pull/796) [`5e4d264`](https://github.com/sveltejs/eslint-plugin-svelte/commit/5e4d26495a377860f7db2ba042993fd686d41a8f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: improve `svelte/valid-compile` to use `svelte.config.js`'s `onwarn` from the parser.\n\n- [#794](https://github.com/sveltejs/eslint-plugin-svelte/pull/794) [`7894f82`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7894f82263d114c948cfe46a041c43a93a5d9249) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: improve `svelte/valid-prop-names-in-kit-pages` to use `svelte.config.js` data from the parser.\n\n- [#794](https://github.com/sveltejs/eslint-plugin-svelte/pull/794) [`7894f82`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7894f82263d114c948cfe46a041c43a93a5d9249) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: improve `svelte/no-export-load-in-svelte-module-in-kit-pages` to use `svelte.config.js` data from the parser.\n\n### Patch Changes\n\n- [#795](https://github.com/sveltejs/eslint-plugin-svelte/pull/795) [`df947a7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/df947a7161fe97021da37f4fcde44fe9923c0a22) Thanks [@baseballyama](https://github.com/baseballyama)! - deps: update `svelte-eslint-parser` to 0.39.1 to set `svelteFeatures.runes` to `true` by default for Svelte 5\n\n- [#797](https://github.com/sveltejs/eslint-plugin-svelte/pull/797) [`f6d4e4c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f6d4e4c974924ef5da1a970d88f04b81a36e19b6) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: `svelte/valid-compile` to use verbatimModuleSyntax to work with TS v5.5.\n\n## 2.39.5\n\n### Patch Changes\n\n- [#790](https://github.com/sveltejs/eslint-plugin-svelte/pull/790) [`f7b7649`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f7b76494efbf82d3bce1b963740ef20884aa6998) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for import vars with TS in `svelte/valid-compile`\n\n## 2.39.4\n\n### Patch Changes\n\n- [#786](https://github.com/sveltejs/eslint-plugin-svelte/pull/786) [`e7e25d6`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e7e25d62db5050e6d16e16518a4afe67499d8efc) Thanks [@baseballyama](https://github.com/baseballyama)! - deps: update `svelte-eslint-parser` to support Svelte `5.0.0-next.155`\n\n## 2.39.3\n\n### Patch Changes\n\n- [#778](https://github.com/sveltejs/eslint-plugin-svelte/pull/778) [`3e2a732`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3e2a732831aae9224824bfb329ef971f135dd997) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser\n\n## 2.39.2\n\n### Patch Changes\n\n- [#775](https://github.com/sveltejs/eslint-plugin-svelte/pull/775) [`0e85eba`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0e85ebab173759e08c1005dceda94736477ef300) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: README is not publish\n\n## 2.39.1\n\n### Patch Changes\n\n- [#772](https://github.com/sveltejs/eslint-plugin-svelte/pull/772) [`0ecab95`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0ecab95f74a9bd88d831671c2048a821a2194ec6) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positive for kebab-case with svelte v5 in `svelte/no-unused-svelte-ignore`\n\n## 2.39.0\n\n### Minor Changes\n\n- [#749](https://github.com/sveltejs/eslint-plugin-svelte/pull/749) [`da4d535`](https://github.com/sveltejs/eslint-plugin-svelte/commit/da4d5357344805ef4e95aac681c2c58158199b8e) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `svelte/no-svelte-internal` rule\n\n- [#758](https://github.com/sveltejs/eslint-plugin-svelte/pull/758) [`6ee50c8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6ee50c8b0d8e183cf0e3c974e3b3b131007a5a30) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: Update svelte-eslint-parser to 0.36\n\n## 2.38.0\n\n### Minor Changes\n\n- [#741](https://github.com/sveltejs/eslint-plugin-svelte/pull/741) [`33626a3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/33626a3444cc6bd5a1789b0043ea5799b81711d1) Thanks [@baseballyama](https://github.com/baseballyama)! - Use the latest Svelte 5\n\n## 2.37.0\n\n### Minor Changes\n\n- [#735](https://github.com/sveltejs/eslint-plugin-svelte/pull/735) [`33f0de2`](https://github.com/sveltejs/eslint-plugin-svelte/commit/33f0de261636e0dca77ec0479fa93a988e6ca950) Thanks [@xiBread](https://github.com/xiBread)! - feat: add rule types\n\n## 2.36.0\n\n### Minor Changes\n\n- Add experimental support for Svelte v5\n  - [#622](https://github.com/sveltejs/eslint-plugin-svelte/pull/622) [`470ef6c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/470ef6cd1ef4767528ff15b5fbdfec1740a5ec02) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for `{@snippet}`and `{@render}` in indent rule\n  - [#620](https://github.com/sveltejs/eslint-plugin-svelte/pull/620) [`1097107`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1097107afce00fd8b959261b015a4eb1f39f116d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: (experimental) partial support for Svelte v5\n  - [#624](https://github.com/sveltejs/eslint-plugin-svelte/pull/624) [`7df5b6f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7df5b6f0963f1fb8fc9256f8ed6f034e5f7fbf3d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for `{@snippet}` and `{@render}` in mustache-spacing rule\n  - Update parser and svelte(v5)\n    - [#657](https://github.com/sveltejs/eslint-plugin-svelte/pull/657) [`b159b46`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b159b467427aab17c74246f9b89283aa966bb2e4) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte to v5.0.0-next.33\n    - [#704](https://github.com/sveltejs/eslint-plugin-svelte/pull/704) [`af2ccf9`](https://github.com/sveltejs/eslint-plugin-svelte/commit/af2ccf9f85af00221f9ec10efbc770cba5615a62) Thanks [@ota-meshi](https://github.com/ota-meshi)! - Update svelte-eslint-parser\n    - [#693](https://github.com/sveltejs/eslint-plugin-svelte/pull/693) [`b11ff34`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b11ff34de949f778d9344ec1143d1a636864d95b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update dependencies & some fixes\n    - [#628](https://github.com/sveltejs/eslint-plugin-svelte/pull/628) [`85fc8f4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/85fc8f467bd9c69475b2ef46fae7bfdd7360158f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update parser and fix some tests\n    - [#696](https://github.com/sveltejs/eslint-plugin-svelte/pull/696) [`d4303f5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d4303f5347dae7828e08e699741a276ee35dbd43) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser\n    - [#635](https://github.com/sveltejs/eslint-plugin-svelte/pull/635) [`ec3f1cf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ec3f1cf5ab1726e2a8b79225c231159333474c71) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte to v5.0.0-next.16\n    - [#687](https://github.com/sveltejs/eslint-plugin-svelte/pull/687) [`2943021`](https://github.com/sveltejs/eslint-plugin-svelte/commit/29430210e25cbe417ba28d65d7bf1b07ed4e08e3) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update parser\n- Support for ESLint v9\n  - [#673](https://github.com/sveltejs/eslint-plugin-svelte/pull/673) [`b72b97b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b72b97ba617ff5eeb9b6f4e600c511250c19a72b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for eslint v9\n  - [#708](https://github.com/sveltejs/eslint-plugin-svelte/pull/708) [`d597a69`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d597a69637d95f6be13eaa10a7cc6feebd812e23) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for flat config\n    - [#719](https://github.com/sveltejs/eslint-plugin-svelte/pull/719) [`eaf5e6a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eaf5e6af1edab5a4d565b74be6bcc02c71c13ac6) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: suppress comment not working in flat config.\n    - [#711](https://github.com/sveltejs/eslint-plugin-svelte/pull/711) [`aaba61f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/aaba61f1d7f8337e690659e396d52453b3cc0002) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: flat config would cause an error with non-svelte files\n- [#690](https://github.com/sveltejs/eslint-plugin-svelte/pull/690) [`e84397d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e84397dd71300fc5e4200e9e6c807a3e5f901e23) Thanks [@sdarnell](https://github.com/sdarnell)! - Added prefer option to prefer-class-directive rule ('always' or 'empty'). The default is now 'empty' which is a slight relaxation of the rule.\n- [#679](https://github.com/sveltejs/eslint-plugin-svelte/pull/679) [`4e6c681`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4e6c6817681b81bd546b032d7b1ff9a6a6e1935a) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-goto-without-base rule\n\n### Patch Changes\n\n- [#694](https://github.com/sveltejs/eslint-plugin-svelte/pull/694) [`73d6fd8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/73d6fd832d88af44feb9a8b86826e138d47251de) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: style report location\n- [#670](https://github.com/sveltejs/eslint-plugin-svelte/pull/670) [`6121a56`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6121a562f8a6d34bb338a5a2df373032abe514d6) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency eslint-compat-utils to ^0.3.0\n\n## 2.36.0-next.13\n\n### Patch Changes\n\n- [#719](https://github.com/sveltejs/eslint-plugin-svelte/pull/719) [`eaf5e6a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/eaf5e6af1edab5a4d565b74be6bcc02c71c13ac6) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: suppress comment not working in flat config.\n\n## 2.36.0-next.12\n\n### Patch Changes\n\n- [#711](https://github.com/sveltejs/eslint-plugin-svelte/pull/711) [`aaba61f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/aaba61f1d7f8337e690659e396d52453b3cc0002) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: flat config would cause an error with non-svelte files\n\n## 2.36.0-next.11\n\n### Minor Changes\n\n- [#708](https://github.com/sveltejs/eslint-plugin-svelte/pull/708) [`d597a69`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d597a69637d95f6be13eaa10a7cc6feebd812e23) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for flat config\n\n## 2.36.0-next.10\n\n### Patch Changes\n\n- [#704](https://github.com/sveltejs/eslint-plugin-svelte/pull/704) [`af2ccf9`](https://github.com/sveltejs/eslint-plugin-svelte/commit/af2ccf9f85af00221f9ec10efbc770cba5615a62) Thanks [@ota-meshi](https://github.com/ota-meshi)! - Update svelte-eslint-parser\n\n## 2.36.0-next.9\n\n### Minor Changes\n\n- [#679](https://github.com/sveltejs/eslint-plugin-svelte/pull/679) [`4e6c681`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4e6c6817681b81bd546b032d7b1ff9a6a6e1935a) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-goto-without-base rule\n\n### Patch Changes\n\n- [#696](https://github.com/sveltejs/eslint-plugin-svelte/pull/696) [`d4303f5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d4303f5347dae7828e08e699741a276ee35dbd43) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser\n\n## 2.36.0-next.8\n\n### Patch Changes\n\n- [#694](https://github.com/sveltejs/eslint-plugin-svelte/pull/694) [`73d6fd8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/73d6fd832d88af44feb9a8b86826e138d47251de) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: style report location\n\n## 2.36.0-next.7\n\n### Minor Changes\n\n- [#690](https://github.com/sveltejs/eslint-plugin-svelte/pull/690) [`e84397d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e84397dd71300fc5e4200e9e6c807a3e5f901e23) Thanks [@sdarnell](https://github.com/sdarnell)! - Added prefer option to prefer-class-directive rule ('always' or 'empty'). The default is now 'empty' which is a slight relaxation of the rule.\n\n### Patch Changes\n\n- [#693](https://github.com/sveltejs/eslint-plugin-svelte/pull/693) [`b11ff34`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b11ff34de949f778d9344ec1143d1a636864d95b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update dependencies & some fixes\n\n## 2.36.0-next.6\n\n### Patch Changes\n\n- [#687](https://github.com/sveltejs/eslint-plugin-svelte/pull/687) [`2943021`](https://github.com/sveltejs/eslint-plugin-svelte/commit/29430210e25cbe417ba28d65d7bf1b07ed4e08e3) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update parser\n\n## 2.36.0-next.5\n\n### Patch Changes\n\n- [#670](https://github.com/sveltejs/eslint-plugin-svelte/pull/670) [`6121a56`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6121a562f8a6d34bb338a5a2df373032abe514d6) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency eslint-compat-utils to ^0.3.0\n\n- [#673](https://github.com/sveltejs/eslint-plugin-svelte/pull/673) [`b72b97b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b72b97ba617ff5eeb9b6f4e600c511250c19a72b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for eslint v9\n\n## 2.36.0-next.4\n\n### Patch Changes\n\n- [#657](https://github.com/sveltejs/eslint-plugin-svelte/pull/657) [`b159b46`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b159b467427aab17c74246f9b89283aa966bb2e4) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte to v5.0.0-next.33\n\n## 2.36.0-next.3\n\n### Patch Changes\n\n- [#635](https://github.com/sveltejs/eslint-plugin-svelte/pull/635) [`ec3f1cf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ec3f1cf5ab1726e2a8b79225c231159333474c71) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte to v5.0.0-next.16\n\n## 2.36.0-next.2\n\n### Patch Changes\n\n- [#628](https://github.com/sveltejs/eslint-plugin-svelte/pull/628) [`85fc8f4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/85fc8f467bd9c69475b2ef46fae7bfdd7360158f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update parser and fix some tests\n\n## 2.36.0-next.1\n\n### Minor Changes\n\n- [#622](https://github.com/sveltejs/eslint-plugin-svelte/pull/622) [`470ef6c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/470ef6cd1ef4767528ff15b5fbdfec1740a5ec02) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for `{@snippet}`and `{@render}` in indent rule\n\n- [#624](https://github.com/sveltejs/eslint-plugin-svelte/pull/624) [`7df5b6f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7df5b6f0963f1fb8fc9256f8ed6f034e5f7fbf3d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for `{@snippet}` and `{@render}` in mustache-spacing rule\n\n## 2.36.0-next.0\n\n### Minor Changes\n\n- [#620](https://github.com/sveltejs/eslint-plugin-svelte/pull/620) [`1097107`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1097107afce00fd8b959261b015a4eb1f39f116d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: (experimental) partial support for Svelte v5\n\n## 2.35.1\n\n### Patch Changes\n\n- [#623](https://github.com/sveltejs/eslint-plugin-svelte/pull/623) [`a8b4bd4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a8b4bd4bb7c0164f76e4efd19bd8ab6de3185cd6) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: replace deprecated typeParameters with typeArguments\n\n## 2.35.0\n\n### Minor Changes\n\n- [#608](https://github.com/sveltejs/eslint-plugin-svelte/pull/608) [`ff28fd3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ff28fd328254a0b7327078a878c9486f4db1b7c8) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-inline-styles rule\n\n- [#605](https://github.com/sveltejs/eslint-plugin-svelte/pull/605) [`ef5f965`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ef5f965024935c9bf6224450243223066789501e) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: use eslint-compat-utils\n\n## 2.34.1\n\n### Patch Changes\n\n- [#604](https://github.com/sveltejs/eslint-plugin-svelte/pull/604) [`796c0ad`](https://github.com/sveltejs/eslint-plugin-svelte/commit/796c0ad5f71dd927989caea109027e1735202c3b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for custom-element with svelte v3 in `svelte/valid-compile`\n\n## 2.34.0\n\n### Minor Changes\n\n- [#592](https://github.com/sveltejs/eslint-plugin-svelte/pull/592) [`1fe38d7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1fe38d770928bb890d4292e6a10028b93d9ba843) Thanks [@moufmouf](https://github.com/moufmouf)! - feat: add new `svelte/no-ignored-unsubscribe` rule.\n\n## 2.33.2\n\n### Patch Changes\n\n- [#585](https://github.com/sveltejs/eslint-plugin-svelte/pull/585) [`d9866a1`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d9866a1396da2374926158034e92464164c061c0) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for `bind:` with member in `svelte/no-immutable-reactive-statements` rule\n\n## 2.33.1\n\n### Patch Changes\n\n- [#581](https://github.com/sveltejs/eslint-plugin-svelte/pull/581) [`1645a9e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1645a9eb28519051f997c019ed95347055a76959) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for mutable member in `svelte/no-immutable-reactive-statements` rule\n\n## 2.33.0\n\n### Minor Changes\n\n- [#565](https://github.com/sveltejs/eslint-plugin-svelte/pull/565) [`bd11057`](https://github.com/sveltejs/eslint-plugin-svelte/commit/bd110572cafc9c7323e6f2d0407bb237d0f32708) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: change dependency parser version\n\n## 2.32.4\n\n### Patch Changes\n\n- [#551](https://github.com/sveltejs/eslint-plugin-svelte/pull/551) [`a17a6e0`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a17a6e003e8321aca0b9b95d1a401bf7f8966451) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency known-css-properties to ^0.28.0\n\n## 2.32.3\n\n### Patch Changes\n\n- [#548](https://github.com/sveltejs/eslint-plugin-svelte/pull/548) [`68e7724`](https://github.com/sveltejs/eslint-plugin-svelte/commit/68e77240499b93a1fe0d31d0defa8e42d48a6e5d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: typescript-eslint v6 compatibility\n\n## 2.32.2\n\n### Patch Changes\n\n- [#530](https://github.com/sveltejs/eslint-plugin-svelte/pull/530) [`c584404`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c584404bd5a2134d81067abbd3c01525abc8e9f7) Thanks [@pawelblaszczyk5](https://github.com/pawelblaszczyk5)! - fix: handle type aliases for $Events and $Slots declarations\n\n## 2.32.1\n\n### Patch Changes\n\n- [#527](https://github.com/sveltejs/eslint-plugin-svelte/pull/527) [`0212a78`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0212a78541e2ff51305c3b75f115dabcba73ab78) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(no-ununsed-class-name): fixed an error with `@use` at-rules\n\n## 2.32.0\n\n### Minor Changes\n\n- [#520](https://github.com/sveltejs/eslint-plugin-svelte/pull/520) [`8ba5fb1`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8ba5fb102d39310cdd5756245bb1f388e432a7a0) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(no-unused-class-name): added an option to allow some specific class names\n\n- [#524](https://github.com/sveltejs/eslint-plugin-svelte/pull/524) [`1e0346e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1e0346ef287089cf2b9169abf319d81e52993630) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add support for Svelte v4\n\n- [#525](https://github.com/sveltejs/eslint-plugin-svelte/pull/525) [`20412ab`](https://github.com/sveltejs/eslint-plugin-svelte/commit/20412ab756154291e36671e31c41a0ca7c3c7f97) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.32.0\n\n### Patch Changes\n\n- [#511](https://github.com/sveltejs/eslint-plugin-svelte/pull/511) [`bb30943`](https://github.com/sveltejs/eslint-plugin-svelte/commit/bb309430f45b49e86b3c4cb6fd53d6e57ea37a86) Thanks [@marekdedic](https://github.com/marekdedic)! - feat(block-lang): added support for multiple modules of the same type\n\n## 2.31.1\n\n### Patch Changes\n\n- [#514](https://github.com/sveltejs/eslint-plugin-svelte/pull/514) [`95ed14e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/95ed14ef4a59bfa25f3dd74403d583eb45df75f8) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: `plugin:svelte/all` config\n\n- [#517](https://github.com/sveltejs/eslint-plugin-svelte/pull/517) [`c1f27c4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c1f27c4a89e744131aa3ec93d9ad2cceddd84412) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positive for `customElement=\"...\"` in `svelte/valid-compile`\n\n- [#515](https://github.com/sveltejs/eslint-plugin-svelte/pull/515) [`1ecdfee`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1ecdfeedd47cfe81cc8c121c847a05bfbdfdb76e) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: crash with non svelte files in `svelte/no-unused-class-name`\n\n## 2.31.0\n\n### Minor Changes\n\n- [#489](https://github.com/sveltejs/eslint-plugin-svelte/pull/489) [`cc321f4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/cc321f4182fe71b0b1f136d6ede37c509a402c25) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the no-unused-class-name rule\n\n- [#504](https://github.com/sveltejs/eslint-plugin-svelte/pull/504) [`ab9e6e7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ab9e6e7f64537747a31826d9ff3758350f0b0f59) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.31.0\n\n- [#499](https://github.com/sveltejs/eslint-plugin-svelte/pull/499) [`16d6816`](https://github.com/sveltejs/eslint-plugin-svelte/commit/16d6816bbfec66ad89bbbe59429c74c6a21542df) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `no-restricted-html-elements` rule\n\n## 2.30.0\n\n### Minor Changes\n\n- [#494](https://github.com/sveltejs/eslint-plugin-svelte/pull/494) [`e5ea6fe`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e5ea6fe641788e05339f468ce6c3d818df7b2446) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add experimental support for Svelte v4\n\n- [#494](https://github.com/sveltejs/eslint-plugin-svelte/pull/494) [`e5ea6fe`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e5ea6fe641788e05339f468ce6c3d818df7b2446) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix(deps): update dependency svelte-eslint-parser to ^0.30.0\n\n## 2.29.0\n\n### Minor Changes\n\n- [#486](https://github.com/sveltejs/eslint-plugin-svelte/pull/486) [`011de46`](https://github.com/sveltejs/eslint-plugin-svelte/commit/011de46248d13425ed6a1afc45f8102d32505b4c) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.29.0\n\n## 2.28.0\n\n### Minor Changes\n\n- [#470](https://github.com/sveltejs/eslint-plugin-svelte/pull/470) [`6290345`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6290345134d6cc5ef7a0bbe4b437918e61794150) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.28.0\n\n- [#473](https://github.com/sveltejs/eslint-plugin-svelte/pull/473) [`6b71add`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6b71addc4a6963afcb6c861fc9190562a8ccbaf7) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/require-each-key` rule\n\n- [#475](https://github.com/sveltejs/eslint-plugin-svelte/pull/475) [`abac19f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/abac19f16c1a5c245034cad1d1e616905962f91f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/valid-each-key` rule\n\n- [#467](https://github.com/sveltejs/eslint-plugin-svelte/pull/467) [`170f816`](https://github.com/sveltejs/eslint-plugin-svelte/commit/170f816bd733a45103bdc8e82cc8e4768498dd4b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: export meta object\n\n## 2.27.4\n\n### Patch Changes\n\n- [#465](https://github.com/sveltejs/eslint-plugin-svelte/pull/465) [`c8c98d4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c8c98d4dceca3a7bff56f6ea9558579bbc26be27) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for builtin `$$` vars in `svelte/no-immutable-reactive-statements`\n\n- [#464](https://github.com/sveltejs/eslint-plugin-svelte/pull/464) [`fcb7226`](https://github.com/sveltejs/eslint-plugin-svelte/commit/fcb722663535a7d8b6b39ff438e48a5e850a6bc9) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for builtin `$$` vars in `svelte/prefer-destructured-store-props`\n\n## 2.27.3\n\n### Patch Changes\n\n- [#461](https://github.com/sveltejs/eslint-plugin-svelte/pull/461) [`295091b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/295091ba5808a4d2828d4cb4a6d6aaff36515b66) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: disable no-self-assign rule (take2)\n\n## 2.27.2\n\n### Patch Changes\n\n- [#455](https://github.com/sveltejs/eslint-plugin-svelte/pull/455) [`bfd8a29`](https://github.com/sveltejs/eslint-plugin-svelte/commit/bfd8a296ff852b58ba11a4854e7815f8fc7d7443) Thanks [@baseballyama](https://github.com/baseballyama)! - disable `no-self-assign` rule in Svelte files\n\n## 2.27.1\n\n### Patch Changes\n\n- [#451](https://github.com/sveltejs/eslint-plugin-svelte/pull/451) [`df9ed9e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/df9ed9e98011a42275b143920b1dbdc500cb3fec) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: broken import when not using typescript-eslint\n\n## 2.27.0\n\n### Minor Changes\n\n- [#439](https://github.com/sveltejs/eslint-plugin-svelte/pull/439) [`f810b69`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f810b694e2b3bc1bad0daba8227bcd672a8cb454) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-immutable-reactive-statements` rule\n\n- [#447](https://github.com/sveltejs/eslint-plugin-svelte/pull/447) [`9b5198c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/9b5198c8c9606e50867c95a6bc2b5ae4fe948c8d) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency svelte-eslint-parser to ^0.27.0\n\n- [#440](https://github.com/sveltejs/eslint-plugin-svelte/pull/440) [`ed68b20`](https://github.com/sveltejs/eslint-plugin-svelte/commit/ed68b205c2ff9c80237c06b453e9de3957a4f090) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-reactive-reassign` rule\n\n## 2.26.0\n\n### Minor Changes\n\n- [#433](https://github.com/sveltejs/eslint-plugin-svelte/pull/433) [`890cfa2`](https://github.com/sveltejs/eslint-plugin-svelte/commit/890cfa268b2473fb770de9d79682078f97c9e295) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte-eslint-parser to add support for `<svelte:document>`\n\n## 2.25.0\n\n### Minor Changes\n\n- [#428](https://github.com/sveltejs/eslint-plugin-svelte/pull/428) [`89925ea`](https://github.com/sveltejs/eslint-plugin-svelte/commit/89925eaf45b94b91e0c0c37fa754652f807e225d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - chore: move repo and move url of rule docs\n\n## 2.24.0\n\n### Minor Changes\n\n- [#425](https://github.com/sveltejs/eslint-plugin-svelte/pull/425) [`2f08a42`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2f08a421cc6317d4b2c06325ae1c9105df6a110e) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte-eslint-parser to v0.25\n\n## 2.23.1\n\n### Patch Changes\n\n- [#420](https://github.com/sveltejs/eslint-plugin-svelte/pull/420) [`4ae07d9`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4ae07d93a4102504afd9f37a38ff0e90de075a79) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positive for containing element in `svelte/no-unused-svelte-ignore`\n\n## 2.23.0\n\n### Minor Changes\n\n- [#403](https://github.com/sveltejs/eslint-plugin-svelte/pull/403) [`c171d9c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c171d9c1a3ea80359db46d925cdce06c8dff4d5b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: use `@eslint-community` packages\n\n### Patch Changes\n\n- [#415](https://github.com/sveltejs/eslint-plugin-svelte/pull/415) [`9714749`](https://github.com/sveltejs/eslint-plugin-svelte/commit/97147490f72b09602bd8667c9fe00131b2fb8bbc) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: ignore indent for inline style tags in `svelte/indent` rule\n\n- [#418](https://github.com/sveltejs/eslint-plugin-svelte/pull/418) [`fe306ed`](https://github.com/sveltejs/eslint-plugin-svelte/commit/fe306ed81223a0379147421bab1dd0176941fb6f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: maximum call stack error in `svelte/infinite-reactive-loop` rule\n\n## 2.22.0\n\n### Minor Changes\n\n- [#407](https://github.com/sveltejs/eslint-plugin-svelte/pull/407) [`c394a80`](https://github.com/sveltejs/eslint-plugin-svelte/commit/c394a80fd5aaa68236563f44d4ef0afb7424bc33) Thanks [@DetachHead](https://github.com/DetachHead)! - add `all` config which enables every rule\n\n## 2.21.0\n\n### Minor Changes\n\n- [#399](https://github.com/sveltejs/eslint-plugin-svelte/pull/399) [`0e102c2`](https://github.com/sveltejs/eslint-plugin-svelte/commit/0e102c2a5c1b6feeece43615b4a0eb3b06acb0b7) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte-eslint-parser to v0.24\n\n## 2.20.2\n\n### Patch Changes\n\n- [#397](https://github.com/sveltejs/eslint-plugin-svelte/pull/397) [`7b0d70b`](https://github.com/sveltejs/eslint-plugin-svelte/commit/7b0d70b4d85c6090b84c5de51d1215e2d3ebddeb) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: `ReferenceTracker` usage\n\n## 2.20.1\n\n### Patch Changes\n\n- [#394](https://github.com/sveltejs/eslint-plugin-svelte/pull/394) [`4c5be6f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/4c5be6f0c96c1c08e8c5878ece6af55bb2f35266) Thanks [@marekdedic](https://github.com/marekdedic)! - fix(block-lang): fixed false positives for non-svelte files\n\n## 2.20.0\n\n### Minor Changes\n\n- [#389](https://github.com/sveltejs/eslint-plugin-svelte/pull/389) [`6039793`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6039793f6e1243f2180564ea992f762ecf1c5ab2) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `svelte/block-lang` rule\n\n## 2.19.2\n\n### Patch Changes\n\n- [#387](https://github.com/sveltejs/eslint-plugin-svelte/pull/387) [`6422ee8`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6422ee89fcb5c8cefceda7dfa5b78e411c27f557) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positive for element in `svelte/no-unused-svelte-ignore`\n\n## 2.19.1\n\n### Patch Changes\n\n- [#383](https://github.com/sveltejs/eslint-plugin-svelte/pull/383) [`08aace5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/08aace561ab4f013b4eda47f829bc7fa545d5c9f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for read property in `svelte/no-dom-manipulating`\n\n## 2.19.0\n\n### Minor Changes\n\n- [#375](https://github.com/sveltejs/eslint-plugin-svelte/pull/375) [`d692baf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/d692baf88637c8aca066d4abe62450b2b9f9940f) Thanks [@ptrxyz](https://github.com/ptrxyz)! - Change to use `parserServices.program.getCompilerOptions().target` for TS transpile in `svelte/valid-compile` rule.\n\n## 2.18.0\n\n### Minor Changes\n\n- [#368](https://github.com/sveltejs/eslint-plugin-svelte/pull/368) [`fcb5e31`](https://github.com/sveltejs/eslint-plugin-svelte/commit/fcb5e319620b1cc71ffe579760033813bd719410) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `svelte/experimental-require-slot-types` rule\n\n- [#365](https://github.com/sveltejs/eslint-plugin-svelte/pull/365) [`e61bbc3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e61bbc347f416f19e9e1e026c4d692e404776023) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `svelte/experimental-require-strict-events` rule\n\n## 2.17.0\n\n### Minor Changes\n\n- [#366](https://github.com/sveltejs/eslint-plugin-svelte/pull/366) [`a1fe4ac`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a1fe4aca6fbc5620d831ae93195faa4863936855) Thanks [@baseballyama](https://github.com/baseballyama)! - Support `snapshot` to `valid-prop-names-in-kit-pages` rule\n\n## 2.16.0\n\n### Minor Changes\n\n- [#358](https://github.com/sveltejs/eslint-plugin-svelte/pull/358) [`3464f23`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3464f2340ee1a45a4f50900eafe6435af9ba2931) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser to v0.23\n\n- [#332](https://github.com/sveltejs/eslint-plugin-svelte/pull/332) [`26870cf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/26870cf4eae7c682ae9d2741194fc23fdca9112e) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `svelte/nfinite-reactive-loop` rule\n\n- [#354](https://github.com/sveltejs/eslint-plugin-svelte/pull/354) [`2f1d89a`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2f1d89a4cbb5845aa328f5889dd449c386f04bda) Thanks [@marekdedic](https://github.com/marekdedic)! - feat: added the `svelte/require-event-dispatcher-types` rule\n\n### Patch Changes\n\n- [#357](https://github.com/sveltejs/eslint-plugin-svelte/pull/357) [`a561f99`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a561f995a426ccb2d9a4066fc8cc264efbb74d7e) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for ts in `svelte/no-unused-svelte-ignore`\n\n## 2.15.0\n\n### Minor Changes\n\n- [#349](https://github.com/sveltejs/eslint-plugin-svelte/pull/349) [`b3f6fd5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b3f6fd50169a45e2efc229f9f132635a1c8a3136) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: improved loading of external modules\n\n### Patch Changes\n\n- [#351](https://github.com/sveltejs/eslint-plugin-svelte/pull/351) [`aa7ab6c`](https://github.com/sveltejs/eslint-plugin-svelte/commit/aa7ab6cacb502eac046d89ecc5ff63b07f7118f8) Thanks [@SiNONiMiTY](https://github.com/SiNONiMiTY)! - fix(deps): update sourcemap-codec dependency\n\n- [#353](https://github.com/sveltejs/eslint-plugin-svelte/pull/353) [`5933794`](https://github.com/sveltejs/eslint-plugin-svelte/commit/593379470019210bf9104bc260dffacb8976f8f5) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false positives for `form` in `svelte/valid-prop-names-in-kit-pages`\n\n## 2.14.1\n\n### Patch Changes\n\n- [#318](https://github.com/sveltejs/eslint-plugin-svelte/pull/318) [`53d4fda`](https://github.com/sveltejs/eslint-plugin-svelte/commit/53d4fdaf0fe60f78677b6f9b85ed81da553301e5) Thanks [@DetachHead](https://github.com/DetachHead)! - fix `isKitPageComponent` on windows\n\n## 2.14.0\n\n### Minor Changes\n\n- [#310](https://github.com/sveltejs/eslint-plugin-svelte/pull/310) [`6d392c4`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6d392c4ac1d94e6f296858da99454198774c6bec) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: improve `svelte/indent` rule to support more ts syntax\n\n- [#308](https://github.com/sveltejs/eslint-plugin-svelte/pull/308) [`a9c4912`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a9c4912b9d23fe7557786445fa8180a7b35bda21) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-dupe-use-directives` rule\n\n- [#308](https://github.com/sveltejs/eslint-plugin-svelte/pull/308) [`a9c4912`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a9c4912b9d23fe7557786445fa8180a7b35bda21) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-dupe-on-directives` rule\n\n## 2.13.1\n\n### Patch Changes\n\n- [#306](https://github.com/sveltejs/eslint-plugin-svelte/pull/306) [`48bb4b7`](https://github.com/sveltejs/eslint-plugin-svelte/commit/48bb4b793864dc9689a5f021ae17c2bd08a3e325) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser to 0.22\n\n## 2.13.0\n\n### Minor Changes\n\n- [#303](https://github.com/sveltejs/eslint-plugin-svelte/pull/303) [`747eae5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/747eae528d8aadc0d31a64f04baa8f2e557e80c6) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: update svelte-eslint-parser to v0.21\n\n- [#296](https://github.com/sveltejs/eslint-plugin-svelte/pull/296) [`695e2e5`](https://github.com/sveltejs/eslint-plugin-svelte/commit/695e2e50762bf004af9200d7d05958e5cea08f70) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: improve reporting range for `svelte/html-self-closing` rule.\n\n- [#302](https://github.com/sveltejs/eslint-plugin-svelte/pull/302) [`f0d3e68`](https://github.com/sveltejs/eslint-plugin-svelte/commit/f0d3e68f75f6a90d5f245313e96b3987fec6761f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-dom-manipulating` rule\n\n## 2.12.0\n\n### Minor Changes\n\n- [#291](https://github.com/sveltejs/eslint-plugin-svelte/pull/291) [`049ac2d`](https://github.com/sveltejs/eslint-plugin-svelte/commit/049ac2db68a9a3c753cc4e5fdf178795b01d715c) Thanks [@renovate](https://github.com/apps/renovate)! - feat: update dependency svelte-eslint-parser to ^0.20.0\n\n- [#284](https://github.com/sveltejs/eslint-plugin-svelte/pull/284) [`1240968`](https://github.com/sveltejs/eslint-plugin-svelte/commit/1240968523fb7721c6ca3ea5bdf943247be4a099) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `require-store-callbacks-use-set-param` rule\n\n- [#281](https://github.com/sveltejs/eslint-plugin-svelte/pull/281) [`8da870f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8da870fc6c7d2b00a067d8befe124576c623a907) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `no-export-load-in-svelte-module-in-kit-pages` rule\n\n- [#283](https://github.com/sveltejs/eslint-plugin-svelte/pull/283) [`909979e`](https://github.com/sveltejs/eslint-plugin-svelte/commit/909979e004f5b069dbd4adb1a53a125ecda110a7) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `svelte/valid-prop-names-in-kit-pages` rule\n\n- [#289](https://github.com/sveltejs/eslint-plugin-svelte/pull/289) [`2895f16`](https://github.com/sveltejs/eslint-plugin-svelte/commit/2895f16c0e62cd0e946e549f8fc147aef42c143b) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/require-store-reactive-access` rule\n\n### Patch Changes\n\n- [#286](https://github.com/sveltejs/eslint-plugin-svelte/pull/286) [`8802e14`](https://github.com/sveltejs/eslint-plugin-svelte/commit/8802e1456b3d0c2bf021a3086b5160c51f56b049) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency known-css-properties to ^0.26.0\n\n## 2.11.0\n\n### Minor Changes\n\n- [#274](https://github.com/sveltejs/eslint-plugin-svelte/pull/274) [`9a9ba19`](https://github.com/sveltejs/eslint-plugin-svelte/commit/9a9ba19ee6301de01196a26696fc2ed350238c7f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: update svelte-eslint-parser to v0.19.0. See [release note](https://github.com/ota-meshi/svelte-eslint-parser/releases/tag/v0.19.0)\n\n- [#276](https://github.com/sveltejs/eslint-plugin-svelte/pull/276) [`e9f7bcf`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e9f7bcf8f96bf33d7f24cac2178b5dbd95f1b72d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: deprecate `svelte/@typescript-eslint/no-unnecessary-condition` rule\n\n## 2.10.0\n\n### Minor Changes\n\n- [#270](https://github.com/sveltejs/eslint-plugin-svelte/pull/270) [`dc60b36`](https://github.com/sveltejs/eslint-plugin-svelte/commit/dc60b36007d26ce5bc639a87d2a57072d7cf6c89) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/prefer-destructured-store-props` rule\n\n## 2.9.0\n\n### Minor Changes\n\n- [#262](https://github.com/sveltejs/eslint-plugin-svelte/pull/262) [`b732ec6`](https://github.com/sveltejs/eslint-plugin-svelte/commit/b732ec621b1832ddf214ca3bb556d1c0b9ead463) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/@typescript-eslint/no-unnecessary-condition` rule\n\n### Patch Changes\n\n- [#261](https://github.com/sveltejs/eslint-plugin-svelte/pull/261) [`3dae5ab`](https://github.com/sveltejs/eslint-plugin-svelte/commit/3dae5abe1ac9487697784109e31370641efb204f) Thanks [@ota-meshi](https://github.com/ota-meshi)! - fix: false report in `settings.ignoreWarnings`\n\n## 2.8.0\n\n### Minor Changes\n\n- [#249](https://github.com/sveltejs/eslint-plugin-svelte/pull/249) [`6d0b89f`](https://github.com/sveltejs/eslint-plugin-svelte/commit/6d0b89f644b160b94293f4f0a63d5cef4bb032e4) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `svelte/derived-has-same-inputs-outputs` rule\n\n## 2.7.0\n\n### Minor Changes\n\n- [#240](https://github.com/sveltejs/eslint-plugin-svelte/pull/240) [`e56fbdb`](https://github.com/sveltejs/eslint-plugin-svelte/commit/e56fbdb34079567a6c1061909fa7d54cfc91727d) Thanks [@ota-meshi](https://github.com/ota-meshi)! - feat: add `svelte/no-trailing-spaces` rule\n- [#225](https://github.com/sveltejs/eslint-plugin-svelte/pull/225) [`a3888b3`](https://github.com/sveltejs/eslint-plugin-svelte/commit/a3888b3cf358ceaa4ddaf22af19f8124d0ff53e4) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add `svelte/no-store-async` rule\n\n## 2.6.0\n\n### Minor Changes\n\n- [#216](https://github.com/sveltejs/eslint-plugin-svelte/pull/216) [`9d122ea`](https://github.com/sveltejs/eslint-plugin-svelte/commit/9d122eaee577ffb846051b7cad15f515dbbb2ccb) Thanks [@marekvospel](https://github.com/marekvospel)! - feat(html-self-closing): add configuration presets\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 Yosuke Ota\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/babel.config.cjs",
    "content": "'use strict';\n\n// for test\nmodule.exports = {\n\tplugins: ['@babel/plugin-proposal-function-bind']\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/eslint.config.mjs",
    "content": "import * as myPlugin from '@ota-meshi/eslint-plugin';\nimport * as tseslint from 'typescript-eslint';\nimport { createJiti } from 'jiti';\nconst jiti = createJiti(import.meta.url);\nconst internal = {\n\trules: {\n\t\t'prefer-find-variable-safe': await jiti.import('./internal-rules/prefer-find-variable-safe.ts')\n\t}\n};\n\n/**\n * @type {import('eslint').Linter.Config[]}\n */\nconst config = [\n\t{\n\t\tignores: [\n\t\t\t'.nyc_output/',\n\t\t\t'coverage/',\n\t\t\t'lib/',\n\t\t\t'node_modules/',\n\t\t\t'build/',\n\t\t\t'!.*.js',\n\t\t\t'src/rule-types.ts',\n\t\t\t'tests'\n\t\t]\n\t},\n\t...myPlugin.config({\n\t\teslintPlugin: true,\n\t\tnode: true,\n\t\tts: true,\n\t\tjson: true,\n\t\tpackageJson: true,\n\t\tyaml: true,\n\t\tprettier: true\n\t}),\n\t{\n\t\trules: {\n\t\t\t'jsdoc/require-jsdoc': 'off',\n\t\t\t'@typescript-eslint/no-shadow': 'off',\n\t\t\t'no-shadow': 'off',\n\t\t\t'@typescript-eslint/naming-convention': 'off',\n\t\t\t'new-cap': 'off',\n\t\t\tcomplexity: 'off',\n\t\t\t// This is not necessary as we manage it in a different way,\n\t\t\t// and it also prevents false positives for our internal rule implementation.\n\t\t\t'eslint-plugin/require-meta-docs-url': 'off',\n\t\t\t// Repo rule\n\t\t\t'no-restricted-imports': [\n\t\t\t\t'error',\n\t\t\t\t{\n\t\t\t\t\tpatterns: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgroup: ['/regexpp', '/regexpp/*'],\n\t\t\t\t\t\t\tmessage: 'Please use `@eslint-community/regexpp` instead.'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgroup: ['/eslint-utils', '/eslint-utils/*'],\n\t\t\t\t\t\t\tmessage: 'Please use `@eslint-community/eslint-utils` instead.'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tfiles: ['src/**'],\n\t\tplugins: {\n\t\t\tinternal\n\t\t},\n\t\trules: {\n\t\t\t'@typescript-eslint/no-restricted-imports': [\n\t\t\t\t'error',\n\t\t\t\t{\n\t\t\t\t\tpatterns: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgroup: ['@typescript-eslint/*'],\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t'@typescript-eslint is not included in dependencies. Only type-import is allowed.',\n\t\t\t\t\t\t\tallowTypeImports: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t'no-restricted-properties': [\n\t\t\t\t'error',\n\t\t\t\t{ object: 'context', property: 'getSourceCode', message: 'Use `context.sourceCode`' },\n\t\t\t\t{ object: 'context', property: 'getFilename', message: 'Use `context.filename`' },\n\t\t\t\t{\n\t\t\t\t\tobject: 'context',\n\t\t\t\t\tproperty: 'getPhysicalFilename',\n\t\t\t\t\tmessage: 'Use `context.physicalFilename`'\n\t\t\t\t},\n\t\t\t\t{ object: 'context', property: 'getCwd', message: 'Use `context.cwd`' },\n\t\t\t\t{ object: 'context', property: 'getScope', message: 'Use src/utils/compat.ts' },\n\t\t\t\t{ object: 'context', property: 'parserServices', message: 'Use src/utils/compat.ts' }\n\t\t\t],\n\t\t\t'internal/prefer-find-variable-safe': 'error'\n\t\t}\n\t},\n\t...tseslint.config({\n\t\tfiles: ['tests/fixtures/rules/**'],\n\t\textends: [tseslint.configs.disableTypeChecked],\n\t\trules: {\n\t\t\t'one-var': 'off',\n\t\t\t'no-unused-vars': 'off',\n\t\t\t'no-undef': 'off',\n\t\t\t'no-empty-function': 'off',\n\t\t\t'no-console': 'off',\n\t\t\t'dot-notation': 'off',\n\t\t\t'no-constant-binary-expression': 'off',\n\t\t\t'func-style': 'off',\n\t\t\t'no-var': 'off',\n\t\t\t'no-unused-expressions': 'off',\n\t\t\t'no-new': 'off',\n\t\t\t'getter-return': 'off',\n\t\t\t'no-sparse-arrays': 'off'\n\t\t},\n\t\tlanguageOptions: {\n\t\t\tsourceType: 'module',\n\t\t\tparserOptions: {\n\t\t\t\tproject: null\n\t\t\t}\n\t\t}\n\t}),\n\t{\n\t\tfiles: [\n\t\t\t'tests/fixtures/rules/**/*output.*',\n\t\t\t'tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang07-input.svelte'\n\t\t],\n\t\trules: {\n\t\t\t'prettier/prettier': 'off'\n\t\t}\n\t},\n\t{\n\t\tfiles: ['tests/fixtures/rules/**/*errors.yaml'],\n\t\trules: {\n\t\t\t'yml/no-tab-indent': 'off'\n\t\t}\n\t},\n\t{\n\t\tfiles: ['tests/**'],\n\t\trules: {\n\t\t\t'@typescript-eslint/no-misused-promises': 'off',\n\t\t\t'@typescript-eslint/no-require-imports': 'off'\n\t\t}\n\t},\n\t{\n\t\tfiles: ['eslint.config.mjs'],\n\t\trules: {\n\t\t\t// Some ESLint plugins specify in repository root's package.json, so this rule should be disabled.\n\t\t\t'n/no-extraneous-import': 'off'\n\t\t}\n\t}\n];\nexport default config;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/internal-rules/prefer-find-variable-safe.ts",
    "content": "import type { Rule } from 'eslint';\nimport { ReferenceTracker, findVariable } from '@eslint-community/eslint-utils';\nimport path from 'node:path';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { Variable } from '@typescript-eslint/scope-manager';\n\nexport default {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce to use FindVariableContext to avoid infinite recursion',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tmessages: {\n\t\t\tpreferFindVariableSafe: 'Prefer to use FindVariableContext to avoid infinite recursion.'\n\t\t},\n\t\tschema: [],\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context: Rule.RuleContext): Rule.RuleListener {\n\t\tconst referenceTracker = new ReferenceTracker(\n\t\t\tcontext.sourceCode.scopeManager.globalScope as never\n\t\t);\n\t\tlet astUtilsPath = path.relative(\n\t\t\tpath.dirname(context.physicalFilename),\n\t\t\tpath.join(import.meta.dirname, '..', 'src', 'utils', 'ast-utils')\n\t\t);\n\t\tif (!astUtilsPath.startsWith('.')) {\n\t\t\tastUtilsPath = `./${astUtilsPath}`;\n\t\t}\n\t\tconst findVariableCalls = [\n\t\t\t...referenceTracker.iterateEsmReferences({\n\t\t\t\t[astUtilsPath]: {\n\t\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t\tfindVariable: {\n\t\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[`${astUtilsPath}.js`]: {\n\t\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t\tfindVariable: {\n\t\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[`${astUtilsPath}.ts`]: {\n\t\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t\tfindVariable: {\n\t\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t];\n\t\ttype FunctionContext = {\n\t\t\tnode:\n\t\t\t\t| TSESTree.FunctionDeclaration\n\t\t\t\t| TSESTree.FunctionExpression\n\t\t\t\t| TSESTree.ArrowFunctionExpression;\n\t\t\tidentifier: TSESTree.Identifier | null;\n\t\t\tfindVariableCall?: TSESTree.CallExpression;\n\t\t\tcalls: Set<TSESTree.Identifier>;\n\t\t\tupper: FunctionContext | null;\n\t\t};\n\t\tlet functionStack: FunctionContext | null = null;\n\t\tconst functionContexts: FunctionContext[] = [];\n\n\t\tfunction getFunctionVariableName(\n\t\t\tnode:\n\t\t\t\t| TSESTree.FunctionDeclaration\n\t\t\t\t| TSESTree.FunctionExpression\n\t\t\t\t| TSESTree.ArrowFunctionExpression\n\t\t) {\n\t\t\tif (node.type === 'FunctionDeclaration') {\n\t\t\t\treturn node.id;\n\t\t\t}\n\t\t\tif (node.parent?.type === 'VariableDeclarator' && node.parent.id.type === 'Identifier') {\n\t\t\t\treturn node.parent.id;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction* iterateVariables(node: TSESTree.Identifier) {\n\t\t\tconst visitedNodes = new Set<TSESTree.Identifier>();\n\t\t\tlet currentNode: TSESTree.Identifier | null = node;\n\t\t\twhile (currentNode) {\n\t\t\t\tif (visitedNodes.has(currentNode)) break;\n\t\t\t\tconst variable = findVariable(\n\t\t\t\t\tcontext.sourceCode.getScope(currentNode),\n\t\t\t\t\tcurrentNode\n\t\t\t\t) as Variable | null;\n\t\t\t\tif (!variable) break;\n\t\t\t\tyield variable;\n\t\t\t\tconst def = variable.defs[0];\n\t\t\t\tif (!def) break;\n\t\t\t\tif (def.type !== 'Variable' || !def.node.init) break;\n\t\t\t\tif (def.node.init.type !== 'Identifier') break;\n\t\t\t\tcurrentNode = def.node.init;\n\t\t\t\tvisitedNodes.add(currentNode);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Verify a function context to report if necessary.\n\t\t * Reports when a function contains a call to findVariable and the function is recursive.\n\t\t */\n\t\tfunction verifyFunctionContext(functionContext: FunctionContext) {\n\t\t\tif (!functionContext.findVariableCall) return;\n\t\t\tif (!hasRecursive(functionContext)) return;\n\t\t\tcontext.report({\n\t\t\t\tnode: functionContext.findVariableCall,\n\t\t\t\tmessageId: 'preferFindVariableSafe'\n\t\t\t});\n\t\t}\n\n\t\tfunction hasRecursive(functionContext: FunctionContext) {\n\t\t\tconst buffer = [functionContext];\n\t\t\tconst visitedContext = new Set<FunctionContext>();\n\t\t\tlet current;\n\t\t\twhile ((current = buffer.shift())) {\n\t\t\t\tif (visitedContext.has(current)) continue;\n\t\t\t\tvisitedContext.add(current);\n\t\t\t\tif (!current.identifier) continue;\n\t\t\t\tfor (const variable of iterateVariables(current.identifier)) {\n\t\t\t\t\tfor (const { identifier } of variable.references) {\n\t\t\t\t\t\tif (identifier.type !== 'Identifier') continue;\n\t\t\t\t\t\tif (functionContext.calls.has(identifier)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuffer.push(...functionContexts.filter((ctx) => ctx.calls.has(identifier)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\treturn {\n\t\t\t':function'(\n\t\t\t\tnode:\n\t\t\t\t\t| TSESTree.FunctionDeclaration\n\t\t\t\t\t| TSESTree.FunctionExpression\n\t\t\t\t\t| TSESTree.ArrowFunctionExpression\n\t\t\t) {\n\t\t\t\tfunctionStack = {\n\t\t\t\t\tnode,\n\t\t\t\t\tidentifier: getFunctionVariableName(node),\n\t\t\t\t\tcalls: new Set(),\n\t\t\t\t\tupper: functionStack\n\t\t\t\t};\n\t\t\t\tfunctionContexts.push(functionStack);\n\t\t\t},\n\t\t\t':function:exit'() {\n\t\t\t\tfunctionStack = functionStack?.upper || null;\n\t\t\t},\n\t\t\tCallExpression(node) {\n\t\t\t\tif (!functionStack) return;\n\t\t\t\tif (findVariableCalls.some((call) => call.node === node)) {\n\t\t\t\t\tfunctionStack.findVariableCall = node;\n\t\t\t\t}\n\t\t\t\tif (node.callee.type === 'Identifier') {\n\t\t\t\t\tfunctionStack.calls.add(node.callee);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tfor (const functionContext of functionContexts) {\n\t\t\t\t\tverifyFunctionContext(functionContext);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/package.json",
    "content": "{\n  \"name\": \"eslint-plugin-svelte\",\n  \"version\": \"3.17.1\",\n  \"description\": \"ESLint plugin for Svelte using AST\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/sveltejs/eslint-plugin-svelte.git\",\n    \"directory\": \"packages/eslint-plugin-svelte\"\n  },\n  \"homepage\": \"https://sveltejs.github.io/eslint-plugin-svelte\",\n  \"author\": \"Yosuke Ota (https://github.com/ota-meshi)\",\n  \"funding\": \"https://github.com/sponsors/ota-meshi\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n  },\n  \"type\": \"module\",\n  \"main\": \"lib/index.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"keywords\": [\n    \"eslint\",\n    \"eslint-plugin\",\n    \"eslintplugin\",\n    \"svelte\",\n    \"sveltejs\"\n  ],\n  \"scripts\": {\n    \"build\": \"pnpm run build:meta && pnpm run build:ts\",\n    \"build:meta\": \"pnpm run ts ./tools/update-meta.ts\",\n    \"build:ts\": \"tsc --project ./tsconfig.build.json\",\n    \"clean\": \"rimraf lib coverage build .svelte-kit svelte.config-dist.js\",\n    \"cover\": \"c8 --reporter=lcov pnpm run test\",\n    \"debug\": \"pnpm run mocha \\\"tests/src/**/*.ts\\\" --reporter dot --timeout 60000\",\n    \"lint\": \"run-p lint:*\",\n    \"lint-fix\": \"pnpm run lint:es --fix\",\n    \"lint:es\": \"eslint --concurrency auto --cache .\",\n    \"mocha\": \"pnpm run ts ./node_modules/mocha/bin/mocha.js\",\n    \"new\": \"pnpm run ts ./tools/new-rule.ts\",\n    \"prebuild\": \"pnpm run clean\",\n    \"prerelease\": \"pnpm run clean && pnpm run build\",\n    \"release\": \"changeset publish\",\n    \"test\": \"pnpm run mocha \\\"tests/src/**/*.ts\\\" --reporter dot --timeout 60000\",\n    \"test:debug\": \"env-cmd -e debug -- pnpm run test\",\n    \"test:update-fixtures\": \"env-cmd -e update-fixtures -- pnpm run test\",\n    \"ts\": \"node --import tsx/esm\",\n    \"typecov\": \"type-coverage\",\n    \"update\": \"pnpm run ts ./tools/update.ts\",\n    \"version\": \"env-cmd -e version -- pnpm run update\",\n    \"version:ci\": \"env-cmd -e version-ci -- pnpm run update && changeset version\"\n  },\n  \"peerDependencies\": {\n    \"eslint\": \"^8.57.1 || ^9.0.0 || ^10.0.0\",\n    \"svelte\": \"^3.37.0 || ^4.0.0 || ^5.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"svelte\": {\n      \"optional\": true\n    }\n  },\n  \"dependencies\": {\n    \"@eslint-community/eslint-utils\": \"^4.6.1\",\n    \"@jridgewell/sourcemap-codec\": \"^1.5.0\",\n    \"esutils\": \"^2.0.3\",\n    \"globals\": \"^16.0.0\",\n    \"known-css-properties\": \"^0.37.0\",\n    \"postcss\": \"^8.4.49\",\n    \"postcss-load-config\": \"^3.1.4\",\n    \"postcss-safe-parser\": \"^7.0.0\",\n    \"semver\": \"^7.6.3\",\n    \"svelte-eslint-parser\": \"^1.4.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.28.3\",\n    \"@babel/eslint-parser\": \"^7.28.0\",\n    \"@babel/plugin-proposal-function-bind\": \"^7.27.1\",\n    \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.5.0\",\n    \"@types/babel__core\": \"^7.20.5\",\n    \"@types/eslint-utils\": \"^3.0.5\",\n    \"@types/esutils\": \"^2.0.2\",\n    \"@types/json-schema\": \"^7.0.15\",\n    \"@types/less\": \"^3.0.8\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^22.18.0\",\n    \"@types/postcss-safe-parser\": \"^5.0.4\",\n    \"@types/semver\": \"^7.7.0\",\n    \"@types/stylus\": \"^0.48.43\",\n    \"@typescript-eslint/scope-manager\": \"^8.48.1\",\n    \"@typescript-eslint/types\": \"^8.48.1\",\n    \"acorn\": \"^8.15.0\",\n    \"assert\": \"^2.1.0\",\n    \"esbuild\": \"^0.28.0\",\n    \"eslint-scope\": \"^9.0.0\",\n    \"eslint-typegen\": \"^2.3.0\",\n    \"eslint-visitor-keys\": \"^5.0.0\",\n    \"espree\": \"^11.0.0\",\n    \"jiti\": \"^2.5.1\",\n    \"less\": \"^4.4.1\",\n    \"mocha\": \"~11.7.2\",\n    \"postcss-nested\": \"^7.0.2\",\n    \"postcss-selector-parser\": \"^7.1.0\",\n    \"sass\": \"^1.92.0\",\n    \"source-map-js\": \"^1.2.1\",\n    \"stylus\": \"^0.64.0\",\n    \"svelte\": \"^5.41.0\",\n    \"svelte-i18n\": \"^4.0.1\",\n    \"tsx\": \"^4.20.5\",\n    \"type-coverage\": \"^2.29.7\",\n    \"yaml\": \"^2.8.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"typeCoverage\": {\n    \"atLeast\": 98.9,\n    \"cache\": true,\n    \"detail\": true,\n    \"ignoreAsAssertion\": true,\n    \"ignoreNested\": true,\n    \"ignoreNonNullAssertion\": true,\n    \"showRelativePath\": true,\n    \"strict\": true,\n    \"update\": true\n  }\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/postcss.config.cjs",
    "content": "'use strict';\n\n// for test\nmodule.exports = {\n\tplugins: [require('postcss-nested')]\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/configs/flat/all.ts",
    "content": "import type { Linter } from 'eslint';\nimport { rules } from '../../utils/rules.js';\nimport base from './base.js';\nconst config: Linter.Config[] = [\n\t...base,\n\t{\n\t\tname: 'svelte:all:rules',\n\t\trules: Object.fromEntries(\n\t\t\trules\n\t\t\t\t.map((rule) => [`svelte/${rule.meta.docs.ruleName}`, 'error'])\n\t\t\t\t.filter(\n\t\t\t\t\t([ruleName]) =>\n\t\t\t\t\t\t![\n\t\t\t\t\t\t\t// Does not work without options.\n\t\t\t\t\t\t\t'svelte/no-restricted-html-elements'\n\t\t\t\t\t\t].includes(ruleName)\n\t\t\t\t)\n\t\t)\n\t}\n];\nexport default config;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/configs/flat/base.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\nimport type { ESLint, Linter } from 'eslint';\nimport * as parser from 'svelte-eslint-parser';\nlet pluginObject: ESLint.Plugin | null = null;\nexport function setPluginObject(plugin: ESLint.Plugin): void {\n\tpluginObject = plugin;\n}\nconst config: Linter.Config[] = [\n\t{\n\t\tname: 'svelte:base:setup-plugin',\n\t\tplugins: {\n\t\t\tget svelte(): ESLint.Plugin {\n\t\t\t\treturn pluginObject!;\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tname: 'svelte:base:setup-for-svelte',\n\t\tfiles: ['*.svelte', '**/*.svelte'],\n\t\tlanguageOptions: {\n\t\t\tparser\n\t\t},\n\t\trules: {\n\t\t\t// ESLint core rules known to cause problems with `.svelte`.\n\t\t\t'no-inner-declarations': 'off', // The AST generated by svelte-eslint-parser will false positives in it rule because the root node of the script is not the `Program`.\n\t\t\t// \"no-irregular-whitespace\": \"off\",\n\t\t\t// Self assign is one of way to update reactive value in Svelte.\n\t\t\t'no-self-assign': 'off',\n\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t'svelte/comment-directive': 'error',\n\t\t\t'svelte/system': 'error'\n\t\t},\n\t\tprocessor: 'svelte/svelte'\n\t},\n\t{\n\t\tname: 'svelte:base:setup-for-svelte-script',\n\t\tfiles: ['*.svelte.js', '*.svelte.ts', '**/*.svelte.js', '**/*.svelte.ts'],\n\t\tlanguageOptions: {\n\t\t\tparser\n\t\t},\n\t\trules: {\n\t\t\t// eslint-plugin-svelte rules\n\t\t}\n\t}\n];\nexport default config;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/configs/flat/prettier.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\nimport type { Linter } from 'eslint';\nimport base from './base.js';\nconst config: Linter.Config[] = [\n\t...base,\n\t{\n\t\tname: 'svelte:prettier:turn-off-rules',\n\t\trules: {\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t'svelte/first-attribute-linebreak': 'off',\n\t\t\t'svelte/html-closing-bracket-new-line': 'off',\n\t\t\t'svelte/html-closing-bracket-spacing': 'off',\n\t\t\t'svelte/html-quotes': 'off',\n\t\t\t'svelte/html-self-closing': 'off',\n\t\t\t'svelte/indent': 'off',\n\t\t\t'svelte/max-attributes-per-line': 'off',\n\t\t\t'svelte/mustache-spacing': 'off',\n\t\t\t'svelte/no-spaces-around-equal-signs-in-attribute': 'off',\n\t\t\t'svelte/no-trailing-spaces': 'off',\n\t\t\t'svelte/shorthand-attribute': 'off',\n\t\t\t'svelte/shorthand-directive': 'off'\n\t\t}\n\t}\n];\nexport default config;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/configs/flat/recommended.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\nimport type { Linter } from 'eslint';\nimport base from './base.js';\nconst config: Linter.Config[] = [\n\t...base,\n\t{\n\t\tname: 'svelte:recommended:rules',\n\t\trules: {\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t'svelte/comment-directive': 'error',\n\t\t\t'svelte/infinite-reactive-loop': 'error',\n\t\t\t'svelte/no-at-debug-tags': 'warn',\n\t\t\t'svelte/no-at-html-tags': 'error',\n\t\t\t'svelte/no-dom-manipulating': 'error',\n\t\t\t'svelte/no-dupe-else-if-blocks': 'error',\n\t\t\t'svelte/no-dupe-on-directives': 'error',\n\t\t\t'svelte/no-dupe-style-properties': 'error',\n\t\t\t'svelte/no-dupe-use-directives': 'error',\n\t\t\t'svelte/no-export-load-in-svelte-module-in-kit-pages': 'error',\n\t\t\t'svelte/no-immutable-reactive-statements': 'error',\n\t\t\t'svelte/no-inner-declarations': 'error',\n\t\t\t'svelte/no-inspect': 'warn',\n\t\t\t'svelte/no-navigation-without-resolve': 'error',\n\t\t\t'svelte/no-not-function-handler': 'error',\n\t\t\t'svelte/no-object-in-text-mustaches': 'error',\n\t\t\t'svelte/no-raw-special-elements': 'error',\n\t\t\t'svelte/no-reactive-functions': 'error',\n\t\t\t'svelte/no-reactive-literals': 'error',\n\t\t\t'svelte/no-reactive-reassign': 'error',\n\t\t\t'svelte/no-shorthand-style-property-overrides': 'error',\n\t\t\t'svelte/no-store-async': 'error',\n\t\t\t'svelte/no-svelte-internal': 'error',\n\t\t\t'svelte/no-unknown-style-directive-property': 'error',\n\t\t\t'svelte/no-unnecessary-state-wrap': 'error',\n\t\t\t'svelte/no-unused-props': 'error',\n\t\t\t'svelte/no-unused-svelte-ignore': 'error',\n\t\t\t'svelte/no-useless-children-snippet': 'error',\n\t\t\t'svelte/no-useless-mustaches': 'error',\n\t\t\t'svelte/prefer-svelte-reactivity': 'error',\n\t\t\t'svelte/prefer-writable-derived': 'error',\n\t\t\t'svelte/require-each-key': 'error',\n\t\t\t'svelte/require-event-dispatcher-types': 'error',\n\t\t\t'svelte/require-store-reactive-access': 'error',\n\t\t\t'svelte/system': 'error',\n\t\t\t'svelte/valid-each-key': 'error',\n\t\t\t'svelte/valid-prop-names-in-kit-pages': 'error'\n\t\t}\n\t}\n];\nexport default config;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/index.ts",
    "content": "import * as plugin from './main.js';\nimport { setPluginObject } from './configs/flat/base.js';\nsetPluginObject(plugin);\n\nexport * from './main.js';\nexport default plugin;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/main.ts",
    "content": "import './rule-types.js';\nimport type { RuleModule } from './types.js';\nimport { rules as ruleList } from './utils/rules.js';\nimport base from './configs/flat/base.js';\nimport recommended from './configs/flat/recommended.js';\nimport prettier from './configs/flat/prettier.js';\nimport all from './configs/flat/all.js';\nimport * as processor from './processor/index.js';\nimport * as metaModule from './meta.js';\nimport type { Linter, Rule } from 'eslint';\n\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- ts(2742) Error */\nexport const configs = {\n\tbase: base as Linter.Config[],\n\trecommended: recommended as Linter.Config[],\n\tprettier: prettier as Linter.Config[],\n\tall: all as Linter.Config[],\n\t// For backward compatibility\n\t'flat/base': base as Linter.Config[],\n\t'flat/recommended': recommended as Linter.Config[],\n\t'flat/prettier': prettier as Linter.Config[],\n\t'flat/all': all as Linter.Config[]\n};\n/* eslint-enable @typescript-eslint/no-unnecessary-type-assertion -- ts(2742) Error */\n\nexport const rules = ruleList.reduce(\n\t(obj, r) => {\n\t\tobj[r.meta.docs.ruleName] = r;\n\t\treturn obj;\n\t},\n\t{} as { [key: string]: RuleModule }\n) as unknown as Record<string, Rule.RuleModule>;\n\nexport const meta = { ...metaModule };\nexport const processors = {\n\t'.svelte': processor,\n\tsvelte: processor\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/meta.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\nexport const name = 'eslint-plugin-svelte' as const;\nexport const version = '3.17.1' as const;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/processor/index.ts",
    "content": "import type { Linter } from 'eslint';\nimport type { Shared } from '../shared/index.js';\nimport { beginShared, terminateShared } from '../shared/index.js';\nexport * as meta from '../meta.js';\n\n/** preprocess */\nexport function preprocess(code: string, filename: string): string[] {\n\tif (filename) {\n\t\tbeginShared(filename);\n\t}\n\n\treturn [code];\n}\n\n/** postprocess */\nexport function postprocess(\n\t[messages]: Linter.LintMessage[][],\n\tfilename: string\n): Linter.LintMessage[] {\n\tconst shared = terminateShared(filename);\n\tif (shared) {\n\t\treturn filter(messages, shared);\n\t}\n\n\treturn messages;\n}\n\nexport const supportsAutofix = true;\n\n/** Filter  */\nfunction filter(messages: Linter.LintMessage[], shared: Shared): Linter.LintMessage[] {\n\tif (shared.commentDirectives.length === 0) {\n\t\treturn messages;\n\t}\n\tlet filteredMessages = messages;\n\tfor (const cd of shared.commentDirectives) {\n\t\tfilteredMessages = cd.filterMessages(filteredMessages);\n\t}\n\treturn filteredMessages;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rule-types.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\n\n/* eslint-disable */\n/* prettier-ignore */\nimport type { Linter } from 'eslint'\n\ndeclare module 'eslint' {\n\tinterface RulesConfig extends RuleOptions {}\n}\n\n/* eslint-disable */\n/* prettier-ignore */\n\nexport interface RuleOptions {\n  /**\n   * disallow conditionals where the type is always truthy or always falsy\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/@typescript-eslint/no-unnecessary-condition/\n   * @deprecated\n   */\n  'svelte/@typescript-eslint/no-unnecessary-condition'?: Linter.RuleEntry<SvelteTypescriptEslintNoUnnecessaryCondition>\n  /**\n   * disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/block-lang/\n   */\n  'svelte/block-lang'?: Linter.RuleEntry<SvelteBlockLang>\n  /**\n   * disallow usage of button without an explicit type attribute\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/button-has-type/\n   */\n  'svelte/button-has-type'?: Linter.RuleEntry<SvelteButtonHasType>\n  /**\n   * support comment-directives in HTML template\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/comment-directive/\n   */\n  'svelte/comment-directive'?: Linter.RuleEntry<SvelteCommentDirective>\n  /**\n   * enforce a consistent style for CSS selectors\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/consistent-selector-style/\n   */\n  'svelte/consistent-selector-style'?: Linter.RuleEntry<SvelteConsistentSelectorStyle>\n  /**\n   * derived store should use same variable names between values and callback\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/derived-has-same-inputs-outputs/\n   */\n  'svelte/derived-has-same-inputs-outputs'?: Linter.RuleEntry<[]>\n  /**\n   * require slot type declaration using the `$$Slots` interface\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/experimental-require-slot-types/\n   */\n  'svelte/experimental-require-slot-types'?: Linter.RuleEntry<[]>\n  /**\n   * require the strictEvents attribute on `<script>` tags\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/experimental-require-strict-events/\n   */\n  'svelte/experimental-require-strict-events'?: Linter.RuleEntry<[]>\n  /**\n   * enforce the location of first attribute\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/first-attribute-linebreak/\n   */\n  'svelte/first-attribute-linebreak'?: Linter.RuleEntry<SvelteFirstAttributeLinebreak>\n  /**\n   * Require or disallow a line break before tag's closing brackets\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/html-closing-bracket-new-line/\n   */\n  'svelte/html-closing-bracket-new-line'?: Linter.RuleEntry<SvelteHtmlClosingBracketNewLine>\n  /**\n   * require or disallow a space before tag's closing brackets\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/html-closing-bracket-spacing/\n   */\n  'svelte/html-closing-bracket-spacing'?: Linter.RuleEntry<SvelteHtmlClosingBracketSpacing>\n  /**\n   * enforce quotes style of HTML attributes\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/html-quotes/\n   */\n  'svelte/html-quotes'?: Linter.RuleEntry<SvelteHtmlQuotes>\n  /**\n   * enforce self-closing style\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/html-self-closing/\n   */\n  'svelte/html-self-closing'?: Linter.RuleEntry<SvelteHtmlSelfClosing>\n  /**\n   * enforce consistent indentation\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/indent/\n   */\n  'svelte/indent'?: Linter.RuleEntry<SvelteIndent>\n  /**\n   * Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/infinite-reactive-loop/\n   */\n  'svelte/infinite-reactive-loop'?: Linter.RuleEntry<[]>\n  /**\n   * enforce the maximum number of attributes per line\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/max-attributes-per-line/\n   */\n  'svelte/max-attributes-per-line'?: Linter.RuleEntry<SvelteMaxAttributesPerLine>\n  /**\n   * enforce maximum number of lines in svelte component blocks\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/max-lines-per-block/\n   */\n  'svelte/max-lines-per-block'?: Linter.RuleEntry<SvelteMaxLinesPerBlock>\n  /**\n   * enforce unified spacing in mustache\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/mustache-spacing/\n   */\n  'svelte/mustache-spacing'?: Linter.RuleEntry<SvelteMustacheSpacing>\n  /**\n   * Warns against the use of `addEventListener`\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-add-event-listener/\n   */\n  'svelte/no-add-event-listener'?: Linter.RuleEntry<[]>\n  /**\n   * disallow the use of `{@debug}`\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-debug-tags/\n   */\n  'svelte/no-at-debug-tags'?: Linter.RuleEntry<[]>\n  /**\n   * disallow use of `{@html}` to prevent XSS attack\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-html-tags/\n   */\n  'svelte/no-at-html-tags'?: Linter.RuleEntry<[]>\n  /**\n   * disallow DOM manipulating\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dom-manipulating/\n   */\n  'svelte/no-dom-manipulating'?: Linter.RuleEntry<[]>\n  /**\n   * disallow duplicate conditions in `{#if}` / `{:else if}` chains\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-else-if-blocks/\n   */\n  'svelte/no-dupe-else-if-blocks'?: Linter.RuleEntry<[]>\n  /**\n   * disallow duplicate `on:` directives\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-on-directives/\n   */\n  'svelte/no-dupe-on-directives'?: Linter.RuleEntry<[]>\n  /**\n   * disallow duplicate style properties\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-style-properties/\n   */\n  'svelte/no-dupe-style-properties'?: Linter.RuleEntry<[]>\n  /**\n   * disallow duplicate `use:` directives\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-use-directives/\n   */\n  'svelte/no-dupe-use-directives'?: Linter.RuleEntry<[]>\n  /**\n   * disallow dynamic slot name\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dynamic-slot-name/\n   * @deprecated\n   */\n  'svelte/no-dynamic-slot-name'?: Linter.RuleEntry<[]>\n  /**\n   * disallow exporting load functions in `*.svelte` module in SvelteKit page components.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-export-load-in-svelte-module-in-kit-pages/\n   */\n  'svelte/no-export-load-in-svelte-module-in-kit-pages'?: Linter.RuleEntry<[]>\n  /**\n   * disallow wrapping single reactive statements in curly braces\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-extra-reactive-curlies/\n   */\n  'svelte/no-extra-reactive-curlies'?: Linter.RuleEntry<[]>\n  /**\n   * disallow using goto() without the base path\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-goto-without-base/\n   * @deprecated\n   */\n  'svelte/no-goto-without-base'?: Linter.RuleEntry<[]>\n  /**\n   * disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-ignored-unsubscribe/\n   */\n  'svelte/no-ignored-unsubscribe'?: Linter.RuleEntry<[]>\n  /**\n   * disallow reactive statements that don't reference reactive values.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-immutable-reactive-statements/\n   */\n  'svelte/no-immutable-reactive-statements'?: Linter.RuleEntry<[]>\n  /**\n   * disallow attributes and directives that produce inline styles\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inline-styles/\n   */\n  'svelte/no-inline-styles'?: Linter.RuleEntry<SvelteNoInlineStyles>\n  /**\n   * disallow variable or `function` declarations in nested blocks\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inner-declarations/\n   */\n  'svelte/no-inner-declarations'?: Linter.RuleEntry<SvelteNoInnerDeclarations>\n  /**\n   * Warns against the use of `$inspect` directive\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inspect/\n   */\n  'svelte/no-inspect'?: Linter.RuleEntry<[]>\n  /**\n   * disallow using navigation (links, goto, pushState, replaceState) without the base path\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-base/\n   * @deprecated\n   */\n  'svelte/no-navigation-without-base'?: Linter.RuleEntry<SvelteNoNavigationWithoutBase>\n  /**\n   * disallow internal navigation (links, `goto()`, `pushState()`, `replaceState()`) without a `resolve()`\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-resolve/\n   */\n  'svelte/no-navigation-without-resolve'?: Linter.RuleEntry<SvelteNoNavigationWithoutResolve>\n  /**\n   * disallow use of not function in event handler\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-not-function-handler/\n   */\n  'svelte/no-not-function-handler'?: Linter.RuleEntry<[]>\n  /**\n   * disallow objects in text mustache interpolation\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-object-in-text-mustaches/\n   */\n  'svelte/no-object-in-text-mustaches'?: Linter.RuleEntry<[]>\n  /**\n   * Checks for invalid raw HTML elements\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-raw-special-elements/\n   */\n  'svelte/no-raw-special-elements'?: Linter.RuleEntry<[]>\n  /**\n   * it's not necessary to define functions in reactive statements\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-functions/\n   */\n  'svelte/no-reactive-functions'?: Linter.RuleEntry<[]>\n  /**\n   * don't assign literal values in reactive statements\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-literals/\n   */\n  'svelte/no-reactive-literals'?: Linter.RuleEntry<[]>\n  /**\n   * disallow reassigning reactive values\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-reassign/\n   */\n  'svelte/no-reactive-reassign'?: Linter.RuleEntry<SvelteNoReactiveReassign>\n  /**\n   * disallow specific HTML elements\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-restricted-html-elements/\n   */\n  'svelte/no-restricted-html-elements'?: Linter.RuleEntry<SvelteNoRestrictedHtmlElements>\n  /**\n   * disallow shorthand style properties that override related longhand properties\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-shorthand-style-property-overrides/\n   */\n  'svelte/no-shorthand-style-property-overrides'?: Linter.RuleEntry<[]>\n  /**\n   * disallow spaces around equal signs in attribute\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-spaces-around-equal-signs-in-attribute/\n   */\n  'svelte/no-spaces-around-equal-signs-in-attribute'?: Linter.RuleEntry<[]>\n  /**\n   * disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-store-async/\n   */\n  'svelte/no-store-async'?: Linter.RuleEntry<[]>\n  /**\n   * svelte/internal will be removed in Svelte 6.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-svelte-internal/\n   */\n  'svelte/no-svelte-internal'?: Linter.RuleEntry<[]>\n  /**\n   * disallow `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"`\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-target-blank/\n   */\n  'svelte/no-target-blank'?: Linter.RuleEntry<SvelteNoTargetBlank>\n  /**\n   * disallow using top-level browser global variables\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-top-level-browser-globals/\n   */\n  'svelte/no-top-level-browser-globals'?: Linter.RuleEntry<[]>\n  /**\n   * disallow trailing whitespace at the end of lines\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-trailing-spaces/\n   */\n  'svelte/no-trailing-spaces'?: Linter.RuleEntry<SvelteNoTrailingSpaces>\n  /**\n   * disallow unknown `style:property`\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/\n   */\n  'svelte/no-unknown-style-directive-property'?: Linter.RuleEntry<SvelteNoUnknownStyleDirectiveProperty>\n  /**\n   * Disallow unnecessary $state wrapping of reactive classes\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unnecessary-state-wrap/\n   */\n  'svelte/no-unnecessary-state-wrap'?: Linter.RuleEntry<SvelteNoUnnecessaryStateWrap>\n  /**\n   * disallow the use of a class in the template without a corresponding style\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-class-name/\n   */\n  'svelte/no-unused-class-name'?: Linter.RuleEntry<SvelteNoUnusedClassName>\n  /**\n   * Warns about defined Props properties that are unused\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-props/\n   */\n  'svelte/no-unused-props'?: Linter.RuleEntry<SvelteNoUnusedProps>\n  /**\n   * disallow unused svelte-ignore comments\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-svelte-ignore/\n   */\n  'svelte/no-unused-svelte-ignore'?: Linter.RuleEntry<[]>\n  /**\n   * disallow explicit children snippet where it's not needed\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-children-snippet/\n   */\n  'svelte/no-useless-children-snippet'?: Linter.RuleEntry<[]>\n  /**\n   * disallow unnecessary mustache interpolations\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/\n   */\n  'svelte/no-useless-mustaches'?: Linter.RuleEntry<SvelteNoUselessMustaches>\n  /**\n   * require class directives instead of ternary expressions\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-class-directive/\n   */\n  'svelte/prefer-class-directive'?: Linter.RuleEntry<SveltePreferClassDirective>\n  /**\n   * Require `const` declarations for variables that are never reassigned after declared\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-const/\n   */\n  'svelte/prefer-const'?: Linter.RuleEntry<SveltePreferConst>\n  /**\n   * destructure values from object stores for better change tracking & fewer redraws\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-destructured-store-props/\n   */\n  'svelte/prefer-destructured-store-props'?: Linter.RuleEntry<[]>\n  /**\n   * require style directives instead of style attribute\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-style-directive/\n   */\n  'svelte/prefer-style-directive'?: Linter.RuleEntry<[]>\n  /**\n   * disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-svelte-reactivity/\n   */\n  'svelte/prefer-svelte-reactivity'?: Linter.RuleEntry<[]>\n  /**\n   * Prefer using writable $derived instead of $state and $effect\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-writable-derived/\n   */\n  'svelte/prefer-writable-derived'?: Linter.RuleEntry<[]>\n  /**\n   * require keyed `{#each}` block\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/\n   */\n  'svelte/require-each-key'?: Linter.RuleEntry<[]>\n  /**\n   * require type parameters for `createEventDispatcher`\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/\n   */\n  'svelte/require-event-dispatcher-types'?: Linter.RuleEntry<[]>\n  /**\n   * require component event names to start with \"on\"\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-prefix/\n   */\n  'svelte/require-event-prefix'?: Linter.RuleEntry<SvelteRequireEventPrefix>\n  /**\n   * require style attributes that can be optimized\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-optimized-style-attribute/\n   */\n  'svelte/require-optimized-style-attribute'?: Linter.RuleEntry<[]>\n  /**\n   * store callbacks must use `set` param\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-callbacks-use-set-param/\n   */\n  'svelte/require-store-callbacks-use-set-param'?: Linter.RuleEntry<[]>\n  /**\n   * disallow to use of the store itself as an operand. Need to use $ prefix or get function.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-reactive-access/\n   */\n  'svelte/require-store-reactive-access'?: Linter.RuleEntry<[]>\n  /**\n   * require initial value in store\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/\n   */\n  'svelte/require-stores-init'?: Linter.RuleEntry<[]>\n  /**\n   * enforce use of shorthand syntax in attribute\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/shorthand-attribute/\n   */\n  'svelte/shorthand-attribute'?: Linter.RuleEntry<SvelteShorthandAttribute>\n  /**\n   * enforce use of shorthand syntax in directives\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/shorthand-directive/\n   */\n  'svelte/shorthand-directive'?: Linter.RuleEntry<SvelteShorthandDirective>\n  /**\n   * enforce order of attributes\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/sort-attributes/\n   */\n  'svelte/sort-attributes'?: Linter.RuleEntry<SvelteSortAttributes>\n  /**\n   * enforce consistent spacing after the `<!--` and before the `-->` in a HTML comment\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/spaced-html-comment/\n   */\n  'svelte/spaced-html-comment'?: Linter.RuleEntry<SvelteSpacedHtmlComment>\n  /**\n   * system rule for working this plugin\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/system/\n   */\n  'svelte/system'?: Linter.RuleEntry<[]>\n  /**\n   * disallow warnings when compiling.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/\n   */\n  'svelte/valid-compile'?: Linter.RuleEntry<SvelteValidCompile>\n  /**\n   * enforce keys to use variables defined in the `{#each}` block\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-each-key/\n   */\n  'svelte/valid-each-key'?: Linter.RuleEntry<[]>\n  /**\n   * disallow props other than data or errors in SvelteKit page components.\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-prop-names-in-kit-pages/\n   */\n  'svelte/valid-prop-names-in-kit-pages'?: Linter.RuleEntry<[]>\n  /**\n   * require valid style element parsing\n   * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-style-parse/\n   */\n  'svelte/valid-style-parse'?: Linter.RuleEntry<[]>\n}\n\n/* ======= Declarations ======= */\n// ----- svelte/@typescript-eslint/no-unnecessary-condition -----\ntype SvelteTypescriptEslintNoUnnecessaryCondition = []|[{\n  \n  allowConstantLoopConditions?: boolean\n  \n  allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing?: boolean\n}]\n// ----- svelte/block-lang -----\ntype SvelteBlockLang = []|[{\n  enforceScriptPresent?: boolean\n  enforceStylePresent?: boolean\n  script?: ((string | null) | [(string | null), ...((string | null))[]])\n  style?: ((string | null) | [(string | null), ...((string | null))[]])\n}]\n// ----- svelte/button-has-type -----\ntype SvelteButtonHasType = []|[{\n  button?: boolean\n  submit?: boolean\n  reset?: boolean\n}]\n// ----- svelte/comment-directive -----\ntype SvelteCommentDirective = []|[{\n  reportUnusedDisableDirectives?: boolean\n}]\n// ----- svelte/consistent-selector-style -----\ntype SvelteConsistentSelectorStyle = []|[{\n  checkGlobal?: boolean\n  \n  style?: []|[(\"class\" | \"id\" | \"type\")]|[(\"class\" | \"id\" | \"type\"), (\"class\" | \"id\" | \"type\")]|[(\"class\" | \"id\" | \"type\"), (\"class\" | \"id\" | \"type\"), (\"class\" | \"id\" | \"type\")]\n}]\n// ----- svelte/first-attribute-linebreak -----\ntype SvelteFirstAttributeLinebreak = []|[{\n  multiline?: (\"below\" | \"beside\")\n  singleline?: (\"below\" | \"beside\")\n}]\n// ----- svelte/html-closing-bracket-new-line -----\ntype SvelteHtmlClosingBracketNewLine = []|[{\n  singleline?: (\"always\" | \"never\")\n  multiline?: (\"always\" | \"never\")\n  selfClosingTag?: {\n    singleline?: (\"always\" | \"never\")\n    multiline?: (\"always\" | \"never\")\n  }\n}]\n// ----- svelte/html-closing-bracket-spacing -----\ntype SvelteHtmlClosingBracketSpacing = []|[{\n  startTag?: (\"always\" | \"never\" | \"ignore\")\n  endTag?: (\"always\" | \"never\" | \"ignore\")\n  selfClosingTag?: (\"always\" | \"never\" | \"ignore\")\n}]\n// ----- svelte/html-quotes -----\ntype SvelteHtmlQuotes = []|[{\n  prefer?: (\"double\" | \"single\")\n  dynamic?: {\n    quoted?: boolean\n    avoidInvalidUnquotedInHTML?: boolean\n  }\n}]\n// ----- svelte/html-self-closing -----\ntype SvelteHtmlSelfClosing = []|[({\n  void?: (\"never\" | \"always\" | \"ignore\")\n  normal?: (\"never\" | \"always\" | \"ignore\")\n  svg?: (\"never\" | \"always\" | \"ignore\")\n  math?: (\"never\" | \"always\" | \"ignore\")\n  component?: (\"never\" | \"always\" | \"ignore\")\n  svelte?: (\"never\" | \"always\" | \"ignore\")\n} | (\"all\" | \"html\" | \"none\"))]\n// ----- svelte/indent -----\ntype SvelteIndent = []|[{\n  indent?: (number | \"tab\")\n  indentScript?: boolean\n  switchCase?: number\n  alignAttributesVertically?: boolean\n  ignoredNodes?: (string & {\n    [k: string]: unknown | undefined\n  } & {\n    [k: string]: unknown | undefined\n  })[]\n}]\n// ----- svelte/max-attributes-per-line -----\ntype SvelteMaxAttributesPerLine = []|[{\n  multiline?: number\n  singleline?: number\n}]\n// ----- svelte/max-lines-per-block -----\ntype SvelteMaxLinesPerBlock = []|[{\n  script?: number\n  template?: number\n  style?: number\n  skipBlankLines?: boolean\n  skipComments?: boolean\n}]\n// ----- svelte/mustache-spacing -----\ntype SvelteMustacheSpacing = []|[{\n  textExpressions?: (\"never\" | \"always\")\n  attributesAndProps?: (\"never\" | \"always\")\n  directiveExpressions?: (\"never\" | \"always\")\n  tags?: {\n    openingBrace?: (\"never\" | \"always\")\n    closingBrace?: (\"never\" | \"always\" | \"always-after-expression\")\n  }\n}]\n// ----- svelte/no-inline-styles -----\ntype SvelteNoInlineStyles = []|[{\n  allowTransitions?: boolean\n}]\n// ----- svelte/no-inner-declarations -----\ntype SvelteNoInnerDeclarations = []|[(\"functions\" | \"both\")]|[(\"functions\" | \"both\"), {\n  blockScopedFunctions?: (\"allow\" | \"disallow\")\n}]\n// ----- svelte/no-navigation-without-base -----\ntype SvelteNoNavigationWithoutBase = []|[{\n  ignoreGoto?: boolean\n  ignoreLinks?: boolean\n  ignorePushState?: boolean\n  ignoreReplaceState?: boolean\n}]\n// ----- svelte/no-navigation-without-resolve -----\ntype SvelteNoNavigationWithoutResolve = []|[{\n  ignoreGoto?: boolean\n  ignoreLinks?: boolean\n  ignorePushState?: boolean\n  ignoreReplaceState?: boolean\n}]\n// ----- svelte/no-reactive-reassign -----\ntype SvelteNoReactiveReassign = []|[{\n  props?: boolean\n}]\n// ----- svelte/no-restricted-html-elements -----\ntype SvelteNoRestrictedHtmlElements = [(string | {\n  \n  elements?: [string, ...(string)[]]\n  message?: string\n}), ...((string | {\n  \n  elements?: [string, ...(string)[]]\n  message?: string\n}))[]]\n// ----- svelte/no-target-blank -----\ntype SvelteNoTargetBlank = []|[{\n  allowReferrer?: boolean\n  enforceDynamicLinks?: (\"always\" | \"never\")\n}]\n// ----- svelte/no-trailing-spaces -----\ntype SvelteNoTrailingSpaces = []|[{\n  skipBlankLines?: boolean\n  ignoreComments?: boolean\n}]\n// ----- svelte/no-unknown-style-directive-property -----\ntype SvelteNoUnknownStyleDirectiveProperty = []|[{\n  \n  ignoreProperties?: [string, ...(string)[]]\n  ignorePrefixed?: boolean\n}]\n// ----- svelte/no-unnecessary-state-wrap -----\ntype SvelteNoUnnecessaryStateWrap = []|[{\n  additionalReactiveClasses?: string[]\n  allowReassign?: boolean\n}]\n// ----- svelte/no-unused-class-name -----\ntype SvelteNoUnusedClassName = []|[{\n  allowedClassNames?: string[]\n}]\n// ----- svelte/no-unused-props -----\ntype SvelteNoUnusedProps = []|[{\n  checkImportedTypes?: boolean\n  ignoreTypePatterns?: string[]\n  ignorePropertyPatterns?: string[]\n  allowUnusedNestedProperties?: boolean\n}]\n// ----- svelte/no-useless-mustaches -----\ntype SvelteNoUselessMustaches = []|[{\n  ignoreIncludesComment?: boolean\n  ignoreStringEscape?: boolean\n}]\n// ----- svelte/prefer-class-directive -----\ntype SveltePreferClassDirective = []|[{\n  prefer?: (\"always\" | \"empty\")\n}]\n// ----- svelte/prefer-const -----\ntype SveltePreferConst = []|[{\n  destructuring?: (\"any\" | \"all\")\n  ignoreReadBeforeAssign?: boolean\n  excludedRunes?: string[]\n  [k: string]: unknown | undefined\n}]\n// ----- svelte/require-event-prefix -----\ntype SvelteRequireEventPrefix = []|[{\n  checkAsyncFunctions?: boolean\n}]\n// ----- svelte/shorthand-attribute -----\ntype SvelteShorthandAttribute = []|[{\n  prefer?: (\"always\" | \"never\")\n}]\n// ----- svelte/shorthand-directive -----\ntype SvelteShorthandDirective = []|[{\n  prefer?: (\"always\" | \"never\")\n}]\n// ----- svelte/sort-attributes -----\ntype SvelteSortAttributes = []|[{\n  order?: (string | [string, ...(string)[]] | {\n    match: (string | [string, ...(string)[]])\n    sort: (\"alphabetical\" | \"ignore\")\n  })[]\n  alphabetical?: boolean\n}]\n// ----- svelte/spaced-html-comment -----\ntype SvelteSpacedHtmlComment = []|[(\"always\" | \"never\")]\n// ----- svelte/valid-compile -----\ntype SvelteValidCompile = []|[{\n  ignoreWarnings?: boolean\n}]"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts",
    "content": "// This rule is based on typescript-eslint's no-unnecessary-condition rule\n// and modified to work well with Svelte components.\n// https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../../utils/index.js';\nimport {\n\tisFalsyType,\n\tgetConstrainedTypeAtLocation,\n\tisTruthyLiteral,\n\tisPossiblyFalsyType,\n\tisNullishType,\n\tisBooleanLiteralType,\n\tgetTypeScriptTools,\n\tisAnyType,\n\tisUnknownType,\n\tisNeverType,\n\tgetCallSignaturesOfType,\n\tisNullableType,\n\tgetTypeOfPropertyOfType,\n\tgetTypeName,\n\tisTupleType\n} from '../../utils/ts-utils/index.js';\nimport type { TS, TSTools } from '../../utils/ts-utils/index.js';\n\n/**\n * Returns all types of a union type or an array containing `type` itself if it's no union type.\n * This method is heavily inspired by tsutils. https://github.com/ajafff/tsutils\n * The MIT License (MIT) Copyright (c) 2017 Klaus Meinhardt\n * https://github.com/ajafff/tsutils/blob/master/LICENSE\n */\nfunction unionTypeParts(type: TS.Type): TS.Type[] {\n\treturn [...iterate(type)];\n\n\t/**\n\t * iterate\n\t */\n\tfunction* iterate(t: TS.Type): Iterable<TS.Type> {\n\t\tif (t.isUnion()) {\n\t\t\tfor (const type of t.types) {\n\t\t\t\tyield* iterate(type);\n\t\t\t}\n\t\t} else {\n\t\t\tyield t;\n\t\t}\n\t}\n}\n\n/**\n * Check whether the given type can be a falsy type or not.\n */\nfunction isPossiblyFalsy(type: TS.Type, tsTools: TSTools): boolean {\n\treturn (\n\t\tunionTypeParts(type)\n\t\t\t// PossiblyFalsy flag includes literal values, so exclude ones that\n\t\t\t// are definitely truthy\n\t\t\t.filter((t) => !isTruthyLiteral(t, tsTools))\n\t\t\t.some((type) => isPossiblyFalsyType(type, tsTools.ts))\n\t);\n}\n\n/**\n * Check whether the given type can be a truthy type or not.\n */\nfunction isPossiblyTruthy(type: TS.Type, tsTools: TSTools): boolean {\n\treturn unionTypeParts(type).some((type) => !isFalsyType(type, tsTools));\n}\n\n/**\n * Check whether the given type can be a nullish type or not.\n */\nfunction isPossiblyNullish(type: TS.Type, tsTools: TSTools): boolean {\n\treturn isNullableType(type, tsTools.ts);\n}\n\n/**\n * Check whether the given type is a nullish type or not.\n */\nfunction isAlwaysNullish(type: TS.Type, tsTools: TSTools): boolean {\n\treturn isNullishType(type, tsTools.ts);\n}\n\n/**\n * Check whether the given type is a literal type or not.\n */\nfunction isLiteral(type: TS.Type, tsTools: TSTools): boolean {\n\treturn (\n\t\tisBooleanLiteralType(type, tsTools.ts) || isNullishType(type, tsTools.ts) || type.isLiteral()\n\t);\n}\n\nexport default createRule('@typescript-eslint/no-unnecessary-condition', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow conditionals where the type is always truthy or always falsy',\n\t\t\tcategory: 'Extension Rules',\n\t\t\trecommended: false,\n\t\t\textensionRule: {\n\t\t\t\tplugin: '@typescript-eslint/eslint-plugin',\n\t\t\t\turl: 'https://typescript-eslint.io/rules/no-unnecessary-condition/'\n\t\t\t}\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tallowConstantLoopConditions: {\n\t\t\t\t\t\tdescription: 'Whether to ignore constant loop conditions, such as `while (true)`.',\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tallowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: {\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Whether to not error when running with a tsconfig that has strictNullChecks turned.',\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\talwaysTruthy: 'Unnecessary conditional, value is always truthy.',\n\t\t\talwaysFalsy: 'Unnecessary conditional, value is always falsy.',\n\t\t\talwaysTruthyFunc: 'This callback should return a conditional, but return is always truthy.',\n\t\t\talwaysFalsyFunc: 'This callback should return a conditional, but return is always falsy.',\n\t\t\tneverNullish:\n\t\t\t\t'Unnecessary conditional, expected left-hand side of `??` operator to be possibly null or undefined.',\n\t\t\talwaysNullish:\n\t\t\t\t'Unnecessary conditional, left-hand side of `??` operator is always `null` or `undefined`.',\n\t\t\tliteralBooleanExpression:\n\t\t\t\t'Unnecessary conditional, both sides of the expression are literal values.',\n\t\t\tnoOverlapBooleanExpression: 'Unnecessary conditional, the types have no overlap.',\n\t\t\tnever: 'Unnecessary conditional, value is `never`.',\n\t\t\tneverOptionalChain: 'Unnecessary optional chain on a non-nullish value.',\n\t\t\tnoStrictNullCheck:\n\t\t\t\t'This rule requires the `strictNullChecks` compiler option to be turned on to function correctly.'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tdeprecated: true,\n\t\treplacedBy: {\n\t\t\tnote: 'This rule is no longer needed when using svelte-eslint-parser>=v0.19.0.'\n\t\t}\n\t},\n\tcreate(context) {\n\t\tconst {\n\t\t\tallowConstantLoopConditions = false,\n\t\t\tallowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing = false\n\t\t} = (context.options[0] || {}) as {\n\t\t\tallowConstantLoopConditions?: boolean;\n\t\t\tallowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing?: boolean;\n\t\t};\n\t\tconst tools = getTypeScriptTools(context);\n\t\tif (!tools) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst { service, ts } = tools;\n\t\tconst checker = service.program.getTypeChecker();\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst compilerOptions = service.program.getCompilerOptions();\n\t\tconst isStrictNullChecks = compilerOptions.strict\n\t\t\t? compilerOptions.strictNullChecks !== false\n\t\t\t: compilerOptions.strictNullChecks;\n\n\t\tif (!isStrictNullChecks && allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing !== true) {\n\t\t\tcontext.report({\n\t\t\t\tloc: {\n\t\t\t\t\tstart: { line: 0, column: 0 },\n\t\t\t\t\tend: { line: 0, column: 0 }\n\t\t\t\t},\n\t\t\t\tmessageId: 'noStrictNullCheck'\n\t\t\t});\n\t\t}\n\n\t\tconst mutableVarReferenceIds: (TSESTree.Identifier | TSESTree.JSXIdentifier)[] = [];\n\t\tconst scriptElements: AST.SvelteScriptElement[] = [];\n\t\tlet inSvelteReactiveStatement = false;\n\n\t\t// Extract references to mutable variables in the root scope.\n\t\tfor (const scope of [\n\t\t\tsourceCode.scopeManager.globalScope,\n\t\t\tsourceCode.scopeManager.globalScope?.childScopes.find((scope) => scope.type === 'module')\n\t\t]) {\n\t\t\tif (!scope) continue;\n\t\t\tfor (const variable of scope.variables) {\n\t\t\t\tif (\n\t\t\t\t\tvariable.defs.some(\n\t\t\t\t\t\t(def) =>\n\t\t\t\t\t\t\tdef.type === 'Variable' && (def.parent.kind === 'var' || def.parent.kind === 'let')\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tfor (const reference of variable.references) {\n\t\t\t\t\t\tmutableVarReferenceIds.push(reference.identifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Extract <script> ranges.\n\t\tfor (const body of sourceCode.ast.body) {\n\t\t\tif (body.type === 'SvelteScriptElement') {\n\t\t\t\tscriptElements.push(body);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the given expression node is in Svelte reactive scope\n\t\t * and the variables that make up the given expression node use\n\t\t * mutable variables declared in component root scope.\n\t\t */\n\t\tfunction hasSvelteReactiveVar(node: TSESTree.Expression | TSESTree.SpreadElement): boolean {\n\t\t\tconst inReactiveScope =\n\t\t\t\tinSvelteReactiveStatement ||\n\t\t\t\t(scriptElements.length &&\n\t\t\t\t\tscriptElements.every(\n\t\t\t\t\t\t(elem) => node.range[1] <= elem.range[0] || elem.range[1] <= node.range[0]\n\t\t\t\t\t));\n\t\t\tif (!inReactiveScope) {\n\t\t\t\t// The given expression node is neither in a reactive scope nor in a template scope.\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn mutableVarReferenceIds.some(\n\t\t\t\t(id) => node.range[0] <= id.range[0] && id.range[1] <= node.range[1]\n\t\t\t);\n\t\t}\n\n\t\t/** Get the TS type from ES Node */\n\t\tfunction getNodeType(\n\t\t\tnode: TSESTree.Expression | TSESTree.PrivateIdentifier | TSESTree.SpreadElement\n\t\t): TS.Type | undefined {\n\t\t\tconst tsNode = service.esTreeNodeToTSNodeMap.get(node);\n\t\t\treturn tsNode && getConstrainedTypeAtLocation(checker, tsNode);\n\t\t}\n\n\t\t/**\n\t\t * Check whether the given node is an array type or not.\n\t\t */\n\t\tfunction nodeIsArrayType(node: TSESTree.Expression): boolean {\n\t\t\tconst nodeType = getNodeType(node);\n\t\t\tif (!nodeType) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- isArrayType is an internal API of TS.\n\t\t\treturn (checker as any).isArrayType(nodeType);\n\t\t}\n\n\t\t/**\n\t\t * Check whether the given node is an tuple type or not.\n\t\t */\n\t\tfunction nodeIsTupleType(node: TSESTree.Expression): boolean {\n\t\t\tconst nodeType = getNodeType(node);\n\t\t\treturn Boolean(nodeType && isTupleType(nodeType, ts));\n\t\t}\n\n\t\t/**\n\t\t * Check whether the given node is an array index signature or not.\n\t\t */\n\t\tfunction isArrayIndexExpression(node: TSESTree.Expression): boolean {\n\t\t\treturn (\n\t\t\t\t// Is an index signature\n\t\t\t\tnode.type === 'MemberExpression' &&\n\t\t\t\tnode.computed &&\n\t\t\t\t// ...into an array type\n\t\t\t\t(nodeIsArrayType(node.object) ||\n\t\t\t\t\t// ... or a tuple type\n\t\t\t\t\t(nodeIsTupleType(node.object) &&\n\t\t\t\t\t\t// Exception: literal index into a tuple - will have a sound type\n\t\t\t\t\t\tnode.property.type !== 'Literal'))\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Checks if a conditional node is necessary:\n\t\t * if the type of the node is always true or always false, it's not necessary.\n\t\t */\n\t\tfunction checkNode(node: TSESTree.Expression, isUnaryNotArgument = false): void {\n\t\t\tif (hasSvelteReactiveVar(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check if the node is Unary Negation expression and handle it\n\t\t\tif (node.type === 'UnaryExpression' && node.operator === '!') {\n\t\t\t\tcheckNode(node.argument, true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Since typescript array index signature types don't represent the\n\t\t\t//  possibility of out-of-bounds access, if we're indexing into an array\n\t\t\t//  just skip the check, to avoid false positives\n\t\t\tif (isArrayIndexExpression(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// When checking logical expressions, only check the right side\n\t\t\t//  as the left side has been checked by checkLogicalExpressionForUnnecessaryConditionals\n\t\t\t//\n\t\t\t// Unless the node is nullish coalescing, as it's common to use patterns like `nullBool ?? true` to to strict\n\t\t\t//  boolean checks if we inspect the right here, it'll usually be a constant condition on purpose.\n\t\t\t// In this case it's better to inspect the type of the expression as a whole.\n\t\t\tif (node.type === 'LogicalExpression' && node.operator !== '??') {\n\t\t\t\tcheckNode(node.right);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst type = getNodeType(node);\n\n\t\t\t// Conditional is always necessary if it involves:\n\t\t\t//    `any` or `unknown` or a naked type parameter\n\t\t\tif (\n\t\t\t\t!type ||\n\t\t\t\tunionTypeParts(type).some(\n\t\t\t\t\t(part) => isAnyType(part, ts) || isUnknownType(part, ts) || part.isTypeParameter()\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet messageId: string | null = null;\n\n\t\t\tif (unionTypeParts(type).some((part) => isNeverType(part, ts))) {\n\t\t\t\tmessageId = 'never';\n\t\t\t} else if (!isPossiblyTruthy(type, tools!)) {\n\t\t\t\tmessageId = !isUnaryNotArgument ? 'alwaysFalsy' : 'alwaysTruthy';\n\t\t\t} else if (!isPossiblyFalsy(type, tools!)) {\n\t\t\t\tmessageId = !isUnaryNotArgument ? 'alwaysTruthy' : 'alwaysFalsy';\n\t\t\t}\n\n\t\t\tif (messageId) {\n\t\t\t\tcontext.report({ node, messageId });\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks if a conditional node is necessary from the given lhs of nullish coalescing.\n\t\t */\n\t\tfunction checkNodeForNullish(node: TSESTree.Expression): void {\n\t\t\tif (hasSvelteReactiveVar(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst type = getNodeType(node);\n\t\t\t// Conditional is always necessary if it involves `any` or `unknown`\n\t\t\tif (!type || isAnyType(type, ts) || isUnknownType(type, ts)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet messageId: string | null = null;\n\t\t\tif (unionTypeParts(type).some((part) => isNeverType(part, ts))) {\n\t\t\t\tmessageId = 'never';\n\t\t\t} else if (!isPossiblyNullish(type, tools!)) {\n\t\t\t\t// Since typescript array index signature types don't represent the\n\t\t\t\t//  possibility of out-of-bounds access, if we're indexing into an array\n\t\t\t\t//  just skip the check, to avoid false positives\n\t\t\t\tif (\n\t\t\t\t\t!isArrayIndexExpression(node) &&\n\t\t\t\t\t!(\n\t\t\t\t\t\tnode.type === 'ChainExpression' &&\n\t\t\t\t\t\tnode.expression.type !== 'TSNonNullExpression' &&\n\t\t\t\t\t\toptionChainContainsOptionArrayIndex(node.expression)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tmessageId = 'neverNullish';\n\t\t\t\t}\n\t\t\t} else if (isAlwaysNullish(type, tools!)) {\n\t\t\t\tmessageId = 'alwaysNullish';\n\t\t\t}\n\n\t\t\tif (messageId) {\n\t\t\t\tcontext.report({ node, messageId });\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks that a binary expression is necessarily conditional, reports otherwise.\n\t\t * If both sides of the binary expression are literal values, it's not a necessary condition.\n\t\t *\n\t\t * NOTE: It's also unnecessary if the types that don't overlap at all\n\t\t *    but that case is handled by the Typescript compiler itself.\n\t\t *    Known exceptions:\n\t\t *      * https://github.com/microsoft/TypeScript/issues/32627\n\t\t *      * https://github.com/microsoft/TypeScript/issues/37160 (handled)\n\t\t */\n\t\tconst BOOL_OPERATORS = new Set(['<', '>', '<=', '>=', '==', '===', '!=', '!==']);\n\n\t\t/**\n\t\t * Checks if a conditional node is necessary from the given binary expression.\n\t\t */\n\t\tfunction checkIfBinaryExpressionIsNecessaryConditional(node: TSESTree.BinaryExpression): void {\n\t\t\tif (hasSvelteReactiveVar(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!BOOL_OPERATORS.has(node.operator)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst leftType = getNodeType(node.left);\n\t\t\tconst rightType = getNodeType(node.right);\n\t\t\tif (!leftType || !rightType) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isLiteral(leftType, tools!) && isLiteral(rightType, tools!)) {\n\t\t\t\tcontext.report({ node, messageId: 'literalBooleanExpression' });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Workaround for https://github.com/microsoft/TypeScript/issues/37160\n\t\t\tif (isStrictNullChecks) {\n\t\t\t\tconst UNDEFINED = ts.TypeFlags.Undefined;\n\t\t\t\tconst NULL = ts.TypeFlags.Null;\n\t\t\t\t// eslint-disable-next-line func-style -- ignore\n\t\t\t\tconst isComparable = (type: TS.Type, f: TS.TypeFlags): boolean => {\n\t\t\t\t\tlet flag = f;\n\t\t\t\t\t// Allow comparison to `any`, `unknown` or a naked type parameter.\n\t\t\t\t\tflag |= ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.TypeParameter;\n\n\t\t\t\t\t// Allow loose comparison to nullish values.\n\t\t\t\t\tif (node.operator === '==' || node.operator === '!=') {\n\t\t\t\t\t\tflag |= NULL | UNDEFINED;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unionTypeParts(type).some((t) => (t.flags & flag) !== 0);\n\t\t\t\t};\n\n\t\t\t\tif (\n\t\t\t\t\t(leftType.flags === UNDEFINED && !isComparable(rightType, UNDEFINED)) ||\n\t\t\t\t\t(rightType.flags === UNDEFINED && !isComparable(leftType, UNDEFINED)) ||\n\t\t\t\t\t(leftType.flags === NULL && !isComparable(rightType, NULL)) ||\n\t\t\t\t\t(rightType.flags === NULL && !isComparable(leftType, NULL))\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({ node, messageId: 'noOverlapBooleanExpression' });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks that a logical expression contains a boolean, reports otherwise.\n\t\t */\n\t\tfunction checkLogicalExpressionForUnnecessaryConditionals(\n\t\t\tnode: TSESTree.LogicalExpression\n\t\t): void {\n\t\t\tif (node.operator === '??') {\n\t\t\t\tcheckNodeForNullish(node.left);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Only checks the left side, since the right side might not be \"conditional\" at all.\n\t\t\t// The right side will be checked if the LogicalExpression is used in a conditional context\n\t\t\tcheckNode(node.left);\n\t\t}\n\n\t\t/**\n\t\t * Checks that a testable expression of a loop is necessarily conditional, reports otherwise.\n\t\t */\n\t\tfunction checkIfLoopIsNecessaryConditional(\n\t\t\tnode: TSESTree.DoWhileStatement | TSESTree.ForStatement | TSESTree.WhileStatement\n\t\t): void {\n\t\t\tif (node.test === null) {\n\t\t\t\t// e.g. `for(;;)`\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Allow:\n\t\t\t *   while (true) {}\n\t\t\t *   for (;true;) {}\n\t\t\t *   do {} while (true)\n\t\t\t */\n\t\t\tif (allowConstantLoopConditions) {\n\t\t\t\tconst nodeType = getNodeType(node.test);\n\t\t\t\tif (\n\t\t\t\t\tnodeType &&\n\t\t\t\t\tisBooleanLiteralType(nodeType, ts) &&\n\t\t\t\t\tchecker.typeToString(nodeType) === 'true'\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcheckNode(node.test);\n\t\t}\n\n\t\tconst ARRAY_PREDICATE_FUNCTIONS = new Set(['filter', 'find', 'some', 'every']);\n\n\t\t/**\n\t\t * Checks whether the given call expression is an array method that takes a predicate as an argument.\n\t\t */\n\t\tfunction isArrayPredicateFunction(node: TSESTree.CallExpression): boolean {\n\t\t\tconst { callee } = node;\n\t\t\treturn (\n\t\t\t\t// looks like `something.filter` or `something.find`\n\t\t\t\tcallee.type === 'MemberExpression' &&\n\t\t\t\tcallee.property.type === 'Identifier' &&\n\t\t\t\tARRAY_PREDICATE_FUNCTIONS.has(callee.property.name) &&\n\t\t\t\t// and the left-hand side is an array, according to the types\n\t\t\t\t(nodeIsArrayType(callee.object) || nodeIsTupleType(callee.object))\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Checks if a conditional node is necessary from the given call expression.\n\t\t */\n\t\tfunction checkCallExpression(node: TSESTree.CallExpression): void {\n\t\t\t// If this is something like arr.filter(x => /*condition*/), check `condition`\n\t\t\tif (isArrayPredicateFunction(node) && node.arguments.length) {\n\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t// Inline defined functions\n\t\t\t\tif (\n\t\t\t\t\t(callback.type === 'ArrowFunctionExpression' || callback.type === 'FunctionExpression') &&\n\t\t\t\t\tcallback.body\n\t\t\t\t) {\n\t\t\t\t\t// Two special cases, where we can directly check the node that's returned:\n\t\t\t\t\t// () => something\n\t\t\t\t\tif (callback.body.type !== 'BlockStatement') {\n\t\t\t\t\t\tcheckNode(callback.body);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// () => { return something; }\n\t\t\t\t\tconst callbackBody = callback.body.body;\n\t\t\t\t\tif (\n\t\t\t\t\t\tcallbackBody.length === 1 &&\n\t\t\t\t\t\tcallbackBody[0].type === 'ReturnStatement' &&\n\t\t\t\t\t\tcallbackBody[0].argument\n\t\t\t\t\t) {\n\t\t\t\t\t\tcheckNode(callbackBody[0].argument);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// Potential enhancement: could use code-path analysis to check\n\t\t\t\t\t//   any function with a single return statement\n\t\t\t\t\t// (Value to complexity ratio is dubious however)\n\t\t\t\t}\n\t\t\t\tconst nodeType = getNodeType(callback);\n\t\t\t\tif (!nodeType) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Otherwise just do type analysis on the function as a whole.\n\t\t\t\tconst returnTypes = getCallSignaturesOfType(nodeType).map((sig) => sig.getReturnType());\n\t\t\t\t/* istanbul ignore if */ if (returnTypes.length === 0) {\n\t\t\t\t\t// Not a callable function\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Predicate is always necessary if it involves `any` or `unknown`\n\t\t\t\tif (returnTypes.some((t) => isAnyType(t, ts) || isUnknownType(t, ts))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!returnTypes.some((t) => isPossiblyFalsy(t, tools!))) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: callback,\n\t\t\t\t\t\tmessageId: 'alwaysTruthyFunc'\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!returnTypes.some((t) => isPossiblyTruthy(t, tools!))) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: callback,\n\t\t\t\t\t\tmessageId: 'alwaysFalsyFunc'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * Recursively searches an optional chain for an array index expression\n\t\t *  Has to search the entire chain, because an array index will \"infect\" the rest of the types\n\t\t *  Example:\n\t\t *  ```\n\t\t *  [{x: {y: \"z\"} }][n] // type is {x: {y: \"z\"}}\n\t\t *    ?.x // type is {y: \"z\"}\n\t\t *    ?.y // This access is considered \"unnecessary\" according to the types\n\t\t *  ```\n\t\t */\n\t\tfunction optionChainContainsOptionArrayIndex(\n\t\t\tnode: TSESTree.MemberExpression | TSESTree.CallExpression\n\t\t): boolean {\n\t\t\tconst lhsNode = node.type === 'CallExpression' ? node.callee : node.object;\n\t\t\tif (node.optional && isArrayIndexExpression(lhsNode)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (lhsNode.type === 'MemberExpression' || lhsNode.type === 'CallExpression') {\n\t\t\t\treturn optionChainContainsOptionArrayIndex(lhsNode);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Check whether the given property is a nullable or not.\n\t\t */\n\t\tfunction isNullablePropertyType(objType: TS.Type, propertyType: TS.Type): boolean {\n\t\t\tif (propertyType.isUnion()) {\n\t\t\t\treturn propertyType.types.some((type) => isNullablePropertyType(objType, type));\n\t\t\t}\n\t\t\tif (propertyType.isNumberLiteral() || propertyType.isStringLiteral()) {\n\t\t\t\tconst propType = getTypeOfPropertyOfType(objType, propertyType.value.toString(), checker);\n\t\t\t\tif (propType) {\n\t\t\t\t\treturn isNullableType(propType, ts);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst typeName = getTypeName(propertyType, tools!);\n\t\t\treturn Boolean(\n\t\t\t\t(typeName === 'string' && checker.getIndexInfoOfType(objType, ts.IndexKind.String)) ||\n\t\t\t\t(typeName === 'number' && checker.getIndexInfoOfType(objType, ts.IndexKind.Number))\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Checks whether a member expression is nullable or not regardless of it's previous node.\n\t\t *  Example:\n\t\t *  ```\n\t\t *  // 'bar' is nullable if 'foo' is null.\n\t\t *  // but this function checks regardless of 'foo' type, so returns 'true'.\n\t\t *  declare const foo: { bar : { baz: string } } | null\n\t\t *  foo?.bar;\n\t\t *  ```\n\t\t */\n\t\tfunction isNullableOriginFromPrev(node: TSESTree.MemberExpression): boolean {\n\t\t\tconst prevType = getNodeType(node.object);\n\t\t\tconst property = node.property;\n\t\t\tif (prevType && prevType.isUnion() && property.type === 'Identifier') {\n\t\t\t\tconst isOwnNullable = prevType.types.some((type) => {\n\t\t\t\t\tif (node.computed) {\n\t\t\t\t\t\tconst propertyType = getNodeType(node.property);\n\t\t\t\t\t\treturn Boolean(propertyType && isNullablePropertyType(type, propertyType));\n\t\t\t\t\t}\n\t\t\t\t\tconst propType = getTypeOfPropertyOfType(type, property.name, checker);\n\t\t\t\t\treturn propType && isNullableType(propType, ts);\n\t\t\t\t});\n\t\t\t\treturn !isOwnNullable && isNullableType(prevType, ts);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Checks whether a lhs expression is optionable or not.\n\t\t */\n\t\tfunction isOptionableExpression(node: TSESTree.Expression): boolean {\n\t\t\tconst type = getNodeType(node);\n\t\t\tif (!type) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst isOwnNullable =\n\t\t\t\tnode.type === 'MemberExpression' ? !isNullableOriginFromPrev(node) : true;\n\t\t\treturn (\n\t\t\t\tisAnyType(type, ts) ||\n\t\t\t\tisUnknownType(type, ts) ||\n\t\t\t\t(isNullableType(type, ts) && isOwnNullable)\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Checks if a conditional node is necessary from the given optional chaining expression.\n\t\t */\n\t\tfunction checkOptionalChain(\n\t\t\tnode: TSESTree.MemberExpression | TSESTree.CallExpression,\n\t\t\tbeforeOperator: TSESTree.Node,\n\t\t\tfix: '' | '.'\n\t\t): void {\n\t\t\t// We only care if this step in the chain is optional. If just descend\n\t\t\t// from an optional chain, then that's fine.\n\t\t\tif (!node.optional) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Since typescript array index signature types don't represent the\n\t\t\t//  possibility of out-of-bounds access, if we're indexing into an array\n\t\t\t//  just skip the check, to avoid false positives\n\t\t\tif (optionChainContainsOptionArrayIndex(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nodeToCheck = node.type === 'CallExpression' ? node.callee : node.object;\n\n\t\t\tif (hasSvelteReactiveVar(nodeToCheck)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isOptionableExpression(nodeToCheck)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst questionDotOperator = sourceCode.getTokenAfter(beforeOperator, {\n\t\t\t\tincludeComments: false,\n\t\t\t\tfilter: (token) => token.type === 'Punctuator' && token.value === '?.'\n\t\t\t})!;\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tloc: questionDotOperator.loc,\n\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\tfix(fixer) {\n\t\t\t\t\treturn fixer.replaceText(questionDotOperator, fix);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks for optional member expression\n\t\t */\n\t\tfunction checkOptionalMemberExpression(node: TSESTree.MemberExpression): void {\n\t\t\tcheckOptionalChain(node, node.object, node.computed ? '' : '.');\n\t\t}\n\n\t\t/**\n\t\t * Checks for optional call expression\n\t\t */\n\t\tfunction checkOptionalCallExpression(node: TSESTree.CallExpression): void {\n\t\t\tcheckOptionalChain(node, node.callee, '');\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteReactiveStatement: () => (inSvelteReactiveStatement = true),\n\t\t\t'SvelteReactiveStatement:exit': () => (inSvelteReactiveStatement = false),\n\t\t\tBinaryExpression: checkIfBinaryExpressionIsNecessaryConditional,\n\t\t\tCallExpression: checkCallExpression,\n\t\t\tConditionalExpression: (node: TSESTree.ConditionalExpression): void => checkNode(node.test),\n\t\t\tDoWhileStatement: checkIfLoopIsNecessaryConditional,\n\t\t\tForStatement: checkIfLoopIsNecessaryConditional,\n\t\t\tIfStatement: (node: TSESTree.IfStatement): void => checkNode(node.test),\n\t\t\tLogicalExpression: checkLogicalExpressionForUnnecessaryConditionals,\n\t\t\tWhileStatement: checkIfLoopIsNecessaryConditional,\n\t\t\t'MemberExpression[optional = true]': checkOptionalMemberExpression,\n\t\t\t'CallExpression[optional = true]': checkOptionalCallExpression\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/block-lang.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { findAttribute, getLangValue } from '../utils/ast-utils.js';\nimport type { AST } from 'svelte-eslint-parser';\nimport type { SuggestionReportDescriptor, SourceCode } from '../types.js';\n\nexport default createRule('block-lang', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks.',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tenforceScriptPresent: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tenforceStylePresent: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tscript: {\n\t\t\t\t\t\toneOf: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: ['string', 'null']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: ['string', 'null']\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\toneOf: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: ['string', 'null']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: ['string', 'null']\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {},\n\t\ttype: 'suggestion',\n\t\thasSuggestions: true\n\t},\n\tcreate(context) {\n\t\tif (!context.sourceCode.parserServices.isSvelte) {\n\t\t\treturn {};\n\t\t}\n\t\tconst enforceScriptPresent: boolean = context.options[0]?.enforceScriptPresent ?? false;\n\t\tconst enforceStylePresent: boolean = context.options[0]?.enforceStylePresent ?? false;\n\n\t\tconst scriptOption: string | null | (string | null)[] = context.options[0]?.script ?? null;\n\t\tconst allowedScriptLangs: (string | null)[] = Array.isArray(scriptOption)\n\t\t\t? scriptOption\n\t\t\t: [scriptOption];\n\t\tconst scriptNodes: AST.SvelteScriptElement[] = [];\n\n\t\tconst styleOption: string | null | (string | null)[] = context.options[0]?.style ?? null;\n\t\tconst allowedStyleLangs: (string | null)[] = Array.isArray(styleOption)\n\t\t\t? styleOption\n\t\t\t: [styleOption];\n\t\tconst styleNodes: AST.SvelteStyleElement[] = [];\n\n\t\treturn {\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tscriptNodes.push(node);\n\t\t\t},\n\t\t\tSvelteStyleElement(node) {\n\t\t\t\tstyleNodes.push(node);\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tif (scriptNodes.length === 0 && enforceScriptPresent) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: { line: 1, column: 1 },\n\t\t\t\t\t\tmessage: `The <script> block should be present and its lang attribute should be ${prettyPrintLangs(\n\t\t\t\t\t\t\tallowedScriptLangs\n\t\t\t\t\t\t)}.`,\n\t\t\t\t\t\tsuggest: buildAddLangSuggestions(allowedScriptLangs, 'script', context.sourceCode)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const scriptNode of scriptNodes) {\n\t\t\t\t\tif (!allowedScriptLangs.includes(getLangValue(scriptNode)?.toLowerCase() ?? null)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: scriptNode,\n\t\t\t\t\t\t\tmessage: `The lang attribute of the <script> block should be ${prettyPrintLangs(\n\t\t\t\t\t\t\t\tallowedScriptLangs\n\t\t\t\t\t\t\t)}.`,\n\t\t\t\t\t\t\tsuggest: buildReplaceLangSuggestions(allowedScriptLangs, scriptNode)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (styleNodes.length === 0 && enforceStylePresent) {\n\t\t\t\t\tconst sourceCode = context.sourceCode;\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: { line: 1, column: 1 },\n\t\t\t\t\t\tmessage: `The <style> block should be present and its lang attribute should be ${prettyPrintLangs(\n\t\t\t\t\t\t\tallowedStyleLangs\n\t\t\t\t\t\t)}.`,\n\t\t\t\t\t\tsuggest: buildAddLangSuggestions(allowedStyleLangs, 'style', sourceCode)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const styleNode of styleNodes) {\n\t\t\t\t\tif (!allowedStyleLangs.includes(getLangValue(styleNode)?.toLowerCase() ?? null)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: styleNode,\n\t\t\t\t\t\t\tmessage: `The lang attribute of the <style> block should be ${prettyPrintLangs(\n\t\t\t\t\t\t\t\tallowedStyleLangs\n\t\t\t\t\t\t\t)}.`,\n\t\t\t\t\t\t\tsuggest: buildReplaceLangSuggestions(allowedStyleLangs, styleNode)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\nfunction buildAddLangSuggestions(\n\tlangs: (string | null)[],\n\ttagName: 'script' | 'style',\n\tsourceCode: SourceCode\n): SuggestionReportDescriptor[] {\n\treturn langs\n\t\t.filter((lang) => lang != null && lang !== '')\n\t\t.map((lang) => {\n\t\t\treturn {\n\t\t\t\tdesc: `Add a lang attribute to a <${tagName}> block with the value \"${lang}\".`,\n\t\t\t\tfix: (fixer) => {\n\t\t\t\t\tconst langAttributeText = getLangAttributeText(lang ?? '', true);\n\t\t\t\t\treturn fixer.insertTextAfterRange(\n\t\t\t\t\t\ttagName === 'script' ? [0, 0] : [sourceCode.text.length, sourceCode.text.length],\n\t\t\t\t\t\t`<${tagName}${langAttributeText}>\\n</${tagName}>\\n\\n`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t});\n}\n\nfunction buildReplaceLangSuggestions(\n\tlangs: (string | null)[],\n\tnode: AST.SvelteScriptElement | AST.SvelteStyleElement\n): SuggestionReportDescriptor[] {\n\tconst tagName = node.name.name;\n\tconst langAttribute = findAttribute(node, 'lang');\n\tconst filteredLangs = langs.filter((lang) => lang != null && lang !== '');\n\n\tif (filteredLangs.length === 0 && langs.includes(null) && langAttribute !== null) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdesc: `Replace a <${tagName}> block with the lang attribute omitted.`,\n\t\t\t\tfix: (fixer) => {\n\t\t\t\t\treturn fixer.remove({\n\t\t\t\t\t\ttype: langAttribute.type,\n\t\t\t\t\t\trange: [langAttribute.range[0] - 1, langAttribute.range[1]]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t}\n\treturn filteredLangs.map((lang) => {\n\t\tconst langAttributeText = getLangAttributeText(lang ?? '', true);\n\t\tif (langAttribute) {\n\t\t\treturn {\n\t\t\t\tdesc: `Replace a <${tagName}> block with the lang attribute set to \"${lang}\".`,\n\t\t\t\tfix: (fixer) => {\n\t\t\t\t\treturn fixer.replaceText(langAttribute, langAttributeText.trim());\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tdesc: `Add lang attribute to a <${tagName}> block with the value \"${lang}\".`,\n\t\t\tfix: (fixer) => {\n\t\t\t\treturn fixer.insertTextBeforeRange(\n\t\t\t\t\t[node.startTag.range[0] + tagName.length + 1, 0],\n\t\t\t\t\tlangAttributeText\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t});\n}\n\n/**\n * Prints the list of allowed languages, with special handling of the `null` option.\n */\nfunction prettyPrintLangs(langs: (string | null)[]): string {\n\tconst hasNull = langs.includes(null);\n\tconst nonNullLangs = langs.filter((lang) => lang !== null).map((lang) => `\"${lang}\"`);\n\tif (nonNullLangs.length === 0) {\n\t\t// No special behavior for `hasNull`, because that can never happen.\n\t\treturn 'omitted';\n\t}\n\tconst hasNullText = hasNull ? 'either omitted or ' : '';\n\tconst nonNullText =\n\t\tnonNullLangs.length === 1 ? nonNullLangs[0] : `one of ${nonNullLangs.join(', ')}`;\n\treturn hasNullText + nonNullText;\n}\n\n/**\n * Returns the lang attribute text, with special handling of the `null` lang option with respect to the `prependWhitespace` argument.\n */\nfunction getLangAttributeText(lang: string, prependWhitespace: boolean): string {\n\treturn `${prependWhitespace ? ' ' : ''}lang=\"${lang}\"`;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/button-has-type.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport {\n\tfindAttribute,\n\tfindShorthandAttribute,\n\tfindBindDirective,\n\tgetStaticAttributeValue\n} from '../utils/ast-utils.js';\n\ntype Options = {\n\tbutton: boolean;\n\tsubmit: boolean;\n\treset: boolean;\n};\n\nexport default createRule('button-has-type', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow usage of button without an explicit type attribute',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tbutton: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tsubmit: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\treset: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tmissingTypeAttribute: 'Missing an explicit type attribute for button.',\n\t\t\tinvalidTypeAttribute: '{{value}} is an invalid value for button type attribute.',\n\t\t\tforbiddenTypeAttribute: '{{value}} is a forbidden value for button type attribute.',\n\t\t\temptyTypeAttribute: 'A value must be set for button type attribute.'\n\t\t},\n\t\ttype: 'suggestion' // \"problem\",\n\t},\n\tcreate(context) {\n\t\tconst configuration: Options = {\n\t\t\tbutton: true,\n\t\t\tsubmit: true,\n\t\t\treset: true,\n\t\t\t...(context.options[0] ?? {})\n\t\t};\n\n\t\t/**\n\t\t * Checks whether given text is known button type\n\t\t */\n\t\tfunction isButtonType(type: string): type is 'button' | 'submit' | 'reset' {\n\t\t\treturn type === 'button' || type === 'submit' || type === 'reset';\n\t\t}\n\n\t\t/**\n\t\t * Report\n\t\t */\n\t\tfunction report(\n\t\t\tnode: AST.SvelteAttribute | AST.SvelteBindingDirective | AST.SvelteStartTag,\n\t\t\tmessageId: string,\n\t\t\tdata: Record<string, string> = {}\n\t\t) {\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId,\n\t\t\t\tdata\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Validate attribute\n\t\t */\n\t\tfunction validateAttribute(attribute: AST.SvelteAttribute) {\n\t\t\tif (attribute.value.length === 0) {\n\t\t\t\treport(attribute, 'emptyTypeAttribute');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst strValue = getStaticAttributeValue(attribute);\n\t\t\tif (strValue == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isButtonType(strValue)) {\n\t\t\t\treport(attribute, 'invalidTypeAttribute', { value: strValue });\n\t\t\t} else if (!configuration[strValue]) {\n\t\t\t\treport(attribute, 'forbiddenTypeAttribute', { value: strValue });\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {VDirective} directive\n\t\t */\n\t\tfunction validateDirective(directive: AST.SvelteBindingDirective) {\n\t\t\tif (!directive.expression) {\n\t\t\t\treport(directive, 'emptyTypeAttribute');\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t\"SvelteElement[name.name='button'] > SvelteStartTag\"(node: AST.SvelteStartTag) {\n\t\t\t\tconst typeAttr = findAttribute(node, 'type');\n\t\t\t\tif (typeAttr) {\n\t\t\t\t\tvalidateAttribute(typeAttr);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst typeDir = findBindDirective(node, 'type');\n\t\t\t\tif (typeDir) {\n\t\t\t\t\tvalidateDirective(typeDir);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst typeShortAttr = findShorthandAttribute(node, 'type');\n\t\t\t\tif (typeShortAttr) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tif (attr.type === 'SvelteSpreadAttribute') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treport(node, 'missingTypeAttribute');\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/comment-directive.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { getShared } from '../shared/index.js';\nimport type { CommentDirectives } from '../shared/comment-directives.js';\nimport { createRule } from '../utils/index.js';\n\ntype RuleAndLocation = {\n\truleId: string;\n\tloc: AST.SourceLocation;\n};\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\nconst COMMENT_DIRECTIVE_B = /^\\s*(eslint-(?:en|dis)able)(?:\\s+|$)/;\nconst COMMENT_DIRECTIVE_L = /^\\s*(eslint-disable(?:-next)?-line)(?:\\s+|$)/;\n\n// eslint-disable-next-line func-style -- ignore\nconst ALL_RULES = () => true;\n\n/**\n * Remove the ignored part from a given directive comment and trim it.\n * @param {string} value The comment text to strip.\n * @returns {string} The stripped text.\n */\nfunction stripDirectiveComment(value: string) {\n\treturn value.split(/\\s-{2,}\\s/u)[0];\n}\n\nexport default createRule('comment-directive', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'support comment-directives in HTML template',\n\t\t\tcategory: 'System',\n\t\t\trecommended: 'base'\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\treportUnusedDisableDirectives: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunused: 'Unused {{kind}} directive (no problems were reported).',\n\t\t\tunusedRule: \"Unused {{kind}} directive (no problems were reported from '{{rule}}').\",\n\t\t\tunusedEnable: 'Unused {{kind}} directive (reporting is not suppressed).',\n\t\t\tunusedEnableRule: \"Unused {{kind}} directive (reporting from '{{rule}}' is not suppressed).\"\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst shared = getShared(context.filename);\n\t\tif (!shared) return {};\n\t\tconst options = context.options[0] || {};\n\t\tconst reportUnusedDisableDirectives = Boolean(options.reportUnusedDisableDirectives);\n\t\tconst directives = shared.newCommentDirectives({\n\t\t\truleId: 'svelte/comment-directive',\n\t\t\treportUnusedDisableDirectives\n\t\t});\n\n\t\tconst sourceCode = context.sourceCode;\n\n\t\t/**\n\t\t * Parse a given comment.\n\t\t */\n\t\tfunction parse(pattern: RegExp, comment: AST.SvelteHTMLComment) {\n\t\t\tconst text = stripDirectiveComment(comment.value);\n\t\t\tconst match = pattern.exec(text);\n\t\t\tif (match == null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst type = match[1];\n\n\t\t\tconst rules: RuleAndLocation[] = [];\n\n\t\t\tconst rulesRe = /([^\\s,]+)[\\s,]*/g;\n\t\t\tlet startIndex = match[0].length;\n\t\t\trulesRe.lastIndex = startIndex;\n\n\t\t\tlet res;\n\t\t\twhile ((res = rulesRe.exec(text))) {\n\t\t\t\tconst ruleId = res[1].trim();\n\n\t\t\t\tconst commentStart = comment.range[0] + 4; /* <!-- */\n\t\t\t\tconst start = sourceCode.getLocFromIndex(commentStart + startIndex);\n\t\t\t\tconst end = sourceCode.getLocFromIndex(commentStart + startIndex + ruleId.length);\n\t\t\t\trules.push({\n\t\t\t\t\truleId,\n\t\t\t\t\tloc: {\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstartIndex = rulesRe.lastIndex;\n\t\t\t}\n\n\t\t\treturn { type, rules };\n\t\t}\n\n\t\t/**\n\t\t * Process a given comment token.\n\t\t * If the comment is `eslint-disable` or `eslint-enable` then it reports the comment.\n\t\t */\n\t\tfunction processBlock(directives: CommentDirectives, comment: AST.SvelteHTMLComment) {\n\t\t\tconst parsed = parse(COMMENT_DIRECTIVE_B, comment);\n\t\t\tif (parsed != null) {\n\t\t\t\tif (parsed.type === 'eslint-disable') {\n\t\t\t\t\tif (parsed.rules.length) {\n\t\t\t\t\t\tfor (const rule of parsed.rules) {\n\t\t\t\t\t\t\tif (reportUnusedDisableDirectives) {\n\t\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\t\tloc: rule.loc,\n\t\t\t\t\t\t\t\t\tmessageId: 'unusedRule',\n\t\t\t\t\t\t\t\t\tdata: { rule: rule.ruleId, kind: parsed.type }\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdirectives.disableBlock(comment.loc.end, rule.ruleId, {\n\t\t\t\t\t\t\t\tloc: rule.loc.start\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (reportUnusedDisableDirectives) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tloc: comment.loc,\n\t\t\t\t\t\t\t\tmessageId: 'unused',\n\t\t\t\t\t\t\t\tdata: { kind: parsed.type }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdirectives.disableBlock(comment.loc.end, ALL_RULES, {\n\t\t\t\t\t\t\tloc: comment.loc.start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (parsed.rules.length) {\n\t\t\t\t\tfor (const rule of parsed.rules) {\n\t\t\t\t\t\tif (reportUnusedDisableDirectives) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tloc: rule.loc,\n\t\t\t\t\t\t\t\tmessageId: 'unusedEnableRule',\n\t\t\t\t\t\t\t\tdata: { rule: rule.ruleId, kind: parsed.type }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdirectives.enableBlock(comment.loc.start, rule.ruleId, {\n\t\t\t\t\t\t\tloc: rule.loc.start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (reportUnusedDisableDirectives) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tloc: comment.loc,\n\t\t\t\t\t\t\tmessageId: 'unusedEnable',\n\t\t\t\t\t\t\tdata: { kind: parsed.type }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tdirectives.enableBlock(comment.loc.start, ALL_RULES, {\n\t\t\t\t\t\tloc: comment.loc.start\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Process a given comment token.\n\t\t * If the comment is `eslint-disable-line` or `eslint-disable-next-line` then it reports the comment.\n\t\t */\n\t\tfunction processLine(directives: CommentDirectives, comment: AST.SvelteHTMLComment) {\n\t\t\tconst parsed = parse(COMMENT_DIRECTIVE_L, comment);\n\t\t\tif (parsed != null && comment.loc.start.line === comment.loc.end.line) {\n\t\t\t\tconst line = comment.loc.start.line + (parsed.type === 'eslint-disable-line' ? 0 : 1);\n\t\t\t\tif (parsed.rules.length) {\n\t\t\t\t\tfor (const rule of parsed.rules) {\n\t\t\t\t\t\tif (reportUnusedDisableDirectives) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tloc: rule.loc,\n\t\t\t\t\t\t\t\tmessageId: 'unusedRule',\n\t\t\t\t\t\t\t\tdata: { rule: rule.ruleId, kind: parsed.type }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdirectives.disableLine(line, rule.ruleId, {\n\t\t\t\t\t\t\tloc: rule.loc.start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (reportUnusedDisableDirectives) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tloc: comment.loc,\n\t\t\t\t\t\t\tmessageId: 'unused',\n\t\t\t\t\t\t\tdata: { kind: parsed.type }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tdirectives.disableLine(line, ALL_RULES, {\n\t\t\t\t\t\tloc: comment.loc.start\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteHTMLComment(node) {\n\t\t\t\tprocessBlock(directives, node);\n\t\t\t\tprocessLine(directives, node);\n\t\t\t},\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tdirectives.enableBlock(node.startTag.loc.end, ALL_RULES, {\n\t\t\t\t\tloc: node.loc.start\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/consistent-selector-style.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { AnyNode } from 'postcss';\nimport type {\n\tClassName as SelectorClass,\n\tIdentifier as SelectorIdentifier,\n\tNode as SelectorNode,\n\tTag as SelectorTag\n} from 'postcss-selector-parser';\nimport { findClassesInAttribute } from '../utils/ast-utils.js';\nimport {\n\textractExpressionPrefixLiteral,\n\textractExpressionSuffixLiteral\n} from '../utils/expression-affixes.js';\nimport { createRule } from '../utils/index.js';\nimport { ElementOccurenceCount, elementOccurrenceCount } from '../utils/element-occurences.js';\n\ninterface Selections {\n\texact: Map<string, AST.SvelteHTMLElement[]>;\n\t// [prefix, suffix]\n\taffixes: Map<[string | null, string | null], AST.SvelteHTMLElement[]>;\n\tuniversalSelector: boolean;\n}\n\nexport default createRule('consistent-selector-style', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce a consistent style for CSS selectors',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tcheckGlobal: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tenum: ['class', 'id', 'type']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmaxItems: 3,\n\t\t\t\t\t\tuniqueItems: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tclassShouldBeId: 'Selector should select by ID instead of class',\n\t\t\tclassShouldBeType: 'Selector should select by element type instead of class',\n\t\t\tidShouldBeClass: 'Selector should select by class instead of ID',\n\t\t\tidShouldBeType: 'Selector should select by element type instead of ID',\n\t\t\ttypeShouldBeClass: 'Selector should select by class instead of element type',\n\t\t\ttypeShouldBeId: 'Selector should select by ID instead of element type'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tif (\n\t\t\t!sourceCode.parserServices.isSvelte ||\n\t\t\tsourceCode.parserServices.getStyleSelectorAST === undefined ||\n\t\t\tsourceCode.parserServices.styleSelectorNodeLoc === undefined\n\t\t) {\n\t\t\treturn {};\n\t\t}\n\t\tconst getStyleSelectorAST = sourceCode.parserServices.getStyleSelectorAST;\n\t\tconst styleSelectorNodeLoc = sourceCode.parserServices.styleSelectorNodeLoc;\n\n\t\tconst checkGlobal = context.options[0]?.checkGlobal ?? false;\n\t\tconst style = context.options[0]?.style ?? ['type', 'id', 'class'];\n\n\t\tconst whitelistedClasses: string[] = [];\n\n\t\tconst selections: {\n\t\t\tclass: Selections;\n\t\t\tid: Selections;\n\t\t\ttype: Map<string, AST.SvelteHTMLElement[]>;\n\t\t} = {\n\t\t\tclass: {\n\t\t\t\texact: new Map(),\n\t\t\t\taffixes: new Map(),\n\t\t\t\tuniversalSelector: false\n\t\t\t},\n\t\t\tid: {\n\t\t\t\texact: new Map(),\n\t\t\t\taffixes: new Map(),\n\t\t\t\tuniversalSelector: false\n\t\t\t},\n\t\t\ttype: new Map()\n\t\t};\n\n\t\t/**\n\t\t * Checks selectors in a given PostCSS node\n\t\t */\n\t\tfunction checkSelectorsInPostCSSNode(node: AnyNode): void {\n\t\t\tif (node.type === 'rule') {\n\t\t\t\tcheckSelector(getStyleSelectorAST(node));\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(node.type === 'root' ||\n\t\t\t\t\t(node.type === 'rule' && (node.selector !== ':global' || checkGlobal)) ||\n\t\t\t\t\tnode.type === 'atrule') &&\n\t\t\t\tnode.nodes !== undefined\n\t\t\t) {\n\t\t\t\tnode.nodes.flatMap((node) => checkSelectorsInPostCSSNode(node));\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks an individual selector\n\t\t */\n\t\tfunction checkSelector(node: SelectorNode): void {\n\t\t\tif (node.type === 'class') {\n\t\t\t\tcheckClassSelector(node);\n\t\t\t}\n\t\t\tif (node.type === 'id') {\n\t\t\t\tcheckIdSelector(node);\n\t\t\t}\n\t\t\tif (node.type === 'tag') {\n\t\t\t\tcheckTypeSelector(node);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(node.type === 'pseudo' && (node.value !== ':global' || checkGlobal)) ||\n\t\t\t\tnode.type === 'root' ||\n\t\t\t\tnode.type === 'selector'\n\t\t\t) {\n\t\t\t\tnode.nodes.flatMap((node) => checkSelector(node));\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks a class selector\n\t\t */\n\t\tfunction checkClassSelector(node: SelectorClass): void {\n\t\t\tif (selections.class.universalSelector || whitelistedClasses.includes(node.value)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selection = matchSelection(selections.class, node.value);\n\t\t\tfor (const styleValue of style) {\n\t\t\t\tif (styleValue === 'class') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (styleValue === 'id' && canUseIdSelector(selection.map(([elem]) => elem))) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tmessageId: 'classShouldBeId',\n\t\t\t\t\t\tloc: styleSelectorNodeLoc(node) as AST.SourceLocation\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (styleValue === 'type' && canUseTypeSelector(selection, selections.type)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tmessageId: 'classShouldBeType',\n\t\t\t\t\t\tloc: styleSelectorNodeLoc(node) as AST.SourceLocation\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks an ID selector\n\t\t */\n\t\tfunction checkIdSelector(node: SelectorIdentifier): void {\n\t\t\tif (selections.id.universalSelector) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selection = matchSelection(selections.id, node.value);\n\t\t\tfor (const styleValue of style) {\n\t\t\t\tif (styleValue === 'class') {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tmessageId: 'idShouldBeClass',\n\t\t\t\t\t\tloc: styleSelectorNodeLoc(node) as AST.SourceLocation\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (styleValue === 'id') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (styleValue === 'type' && canUseTypeSelector(selection, selections.type)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tmessageId: 'idShouldBeType',\n\t\t\t\t\t\tloc: styleSelectorNodeLoc(node) as AST.SourceLocation\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks a type selector\n\t\t */\n\t\tfunction checkTypeSelector(node: SelectorTag): void {\n\t\t\tconst selection = selections.type.get(node.value) ?? [];\n\t\t\tfor (const styleValue of style) {\n\t\t\t\tif (styleValue === 'class') {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tmessageId: 'typeShouldBeClass',\n\t\t\t\t\t\tloc: styleSelectorNodeLoc(node) as AST.SourceLocation\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (styleValue === 'id' && canUseIdSelector(selection)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tmessageId: 'typeShouldBeId',\n\t\t\t\t\t\tloc: styleSelectorNodeLoc(node) as AST.SourceLocation\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (styleValue === 'type') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteElement(node) {\n\t\t\t\tif (node.kind !== 'html') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\taddToArrayMap(selections.type, node.name.name, node);\n\t\t\t\tfor (const attribute of node.startTag.attributes) {\n\t\t\t\t\tif (attribute.type === 'SvelteDirective' && attribute.kind === 'Class') {\n\t\t\t\t\t\twhitelistedClasses.push(attribute.key.name.name);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const className of findClassesInAttribute(attribute)) {\n\t\t\t\t\t\taddToArrayMap(selections.class.exact, className, node);\n\t\t\t\t\t}\n\t\t\t\t\tif (attribute.type !== 'SvelteAttribute') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const value of attribute.value) {\n\t\t\t\t\t\tif (attribute.key.name === 'class' && value.type === 'SvelteMustacheTag') {\n\t\t\t\t\t\t\tconst prefix = extractExpressionPrefixLiteral(context, value.expression);\n\t\t\t\t\t\t\tconst suffix = extractExpressionSuffixLiteral(context, value.expression);\n\t\t\t\t\t\t\tif (prefix === null && suffix === null) {\n\t\t\t\t\t\t\t\tselections.class.universalSelector = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\taddToArrayMap(selections.class.affixes, [prefix, suffix], node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (attribute.key.name === 'id') {\n\t\t\t\t\t\t\tif (value.type === 'SvelteLiteral') {\n\t\t\t\t\t\t\t\taddToArrayMap(selections.id.exact, value.value, node);\n\t\t\t\t\t\t\t} else if (value.type === 'SvelteMustacheTag') {\n\t\t\t\t\t\t\t\tconst prefix = extractExpressionPrefixLiteral(context, value.expression);\n\t\t\t\t\t\t\t\tconst suffix = extractExpressionSuffixLiteral(context, value.expression);\n\t\t\t\t\t\t\t\tif (prefix === null && suffix === null) {\n\t\t\t\t\t\t\t\t\tselections.id.universalSelector = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\taddToArrayMap(selections.id.affixes, [prefix, suffix], node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tconst styleContext = sourceCode.parserServices.getStyleContext!();\n\t\t\t\tif (\n\t\t\t\t\tstyleContext.status !== 'success' ||\n\t\t\t\t\tsourceCode.parserServices.getStyleSelectorAST === undefined\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcheckSelectorsInPostCSSNode(styleContext.sourceAst);\n\t\t\t}\n\t\t};\n\t}\n});\n\n/**\n * Helper function to add a value to a Map of arrays\n */\nfunction addToArrayMap<T>(\n\tmap: Map<T, AST.SvelteHTMLElement[]>,\n\tkey: T,\n\tvalue: AST.SvelteHTMLElement\n): void {\n\tmap.set(key, (map.get(key) ?? []).concat(value));\n}\n\n/**\n * Finds all nodes in selections that could be matched by key\n */\nfunction matchSelection(selections: Selections, key: string): [AST.SvelteHTMLElement, boolean][] {\n\tconst selection = (selections.exact.get(key) ?? []).map<[AST.SvelteHTMLElement, boolean]>(\n\t\t(elem) => [elem, true]\n\t);\n\tselections.affixes.forEach((nodes, [prefix, suffix]) => {\n\t\tif ((prefix === null || key.startsWith(prefix)) && (suffix === null || key.endsWith(suffix))) {\n\t\t\tselection.push(...nodes.map<[AST.SvelteHTMLElement, boolean]>((elem) => [elem, false]));\n\t\t}\n\t});\n\treturn selection;\n}\n\n/**\n * Checks whether a given selection could be obtained using an ID selector\n */\nfunction canUseIdSelector(selection: AST.SvelteHTMLElement[]): boolean {\n\treturn (\n\t\tselection.length === 0 ||\n\t\t(selection.length === 1 &&\n\t\t\telementOccurrenceCount(selection[0]) !== ElementOccurenceCount.ZeroToInf)\n\t);\n}\n\n/**\n * Checks whether a given selection could be obtained using a type selector\n */\nfunction canUseTypeSelector(\n\tselection: [AST.SvelteHTMLElement, boolean][],\n\ttypeSelections: Map<string, AST.SvelteHTMLElement[]>\n): boolean {\n\tconst types = new Set(selection.map(([node]) => node.name.name));\n\tif (types.size > 1) {\n\t\treturn false;\n\t}\n\tif (types.size < 1) {\n\t\treturn true;\n\t}\n\tif (\n\t\tselection.some(\n\t\t\t([elem, exact]) => !exact && elementOccurrenceCount(elem) === ElementOccurenceCount.ZeroToInf\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\tconst type = [...types][0];\n\tconst typeSelection = typeSelections.get(type);\n\treturn (\n\t\ttypeSelection !== undefined &&\n\t\tarrayEquals(\n\t\t\ttypeSelection,\n\t\t\tselection.map(([elem]) => elem)\n\t\t)\n\t);\n}\n\n/**\n * Compares two arrays for item equality\n */\nfunction arrayEquals(array1: AST.SvelteHTMLElement[], array2: AST.SvelteHTMLElement[]): boolean {\n\treturn array1.length === array2.length && array1.every((e) => array2.includes(e));\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { Variable } from '@typescript-eslint/scope-manager';\nimport { createRule } from '../utils/index.js';\nimport type { RuleContext, RuleFixer } from '../types.js';\nimport { extractStoreReferences } from './reference-helpers/svelte-store.js';\nimport { findVariableForReplacement } from '../utils/ast-utils.js';\n\nfunction createFixer(node: TSESTree.Node, variable: Variable | null, name: string) {\n\treturn function* fix(fixer: RuleFixer) {\n\t\tyield fixer.replaceText(node, name);\n\n\t\tif (variable) {\n\t\t\tfor (const ref of variable.references) {\n\t\t\t\tyield fixer.replaceText(ref.identifier, name);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport default createRule('derived-has-same-inputs-outputs', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'derived store should use same variable names between values and callback',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: \"The argument name should be '{{name}}'.\",\n\t\t\trenameParam: 'Rename the parameter from {{oldName}} to {{newName}}.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\t/** check node type */\n\t\tfunction isIdentifierOrArrayExpression(\n\t\t\tnode: TSESTree.SpreadElement | TSESTree.Expression\n\t\t): node is TSESTree.Identifier | TSESTree.ArrayExpression {\n\t\t\treturn ['Identifier', 'ArrayExpression'].includes(node.type);\n\t\t}\n\n\t\ttype ArrowFunctionExpressionOrFunctionExpression =\n\t\t\t| TSESTree.ArrowFunctionExpression\n\t\t\t| TSESTree.FunctionExpression;\n\n\t\t/** check node type */\n\t\tfunction isFunctionExpression(\n\t\t\tnode: TSESTree.SpreadElement | TSESTree.Expression\n\t\t): node is ArrowFunctionExpressionOrFunctionExpression {\n\t\t\treturn ['ArrowFunctionExpression', 'FunctionExpression'].includes(node.type);\n\t\t}\n\n\t\t/**\n\t\t * Check for identifier type.\n\t\t * e.g. derived(a, ($a) => {});\n\t\t */\n\t\tfunction checkIdentifier(\n\t\t\tcontext: RuleContext,\n\t\t\targs: TSESTree.Identifier,\n\t\t\tfn: ArrowFunctionExpressionOrFunctionExpression\n\t\t) {\n\t\t\tconst fnParam = fn.params[0];\n\t\t\tif (fnParam.type !== 'Identifier') return;\n\t\t\tconst expectedName = `$${args.name}`;\n\t\t\tif (expectedName !== fnParam.name) {\n\t\t\t\tconst { hasConflict, variable } = findVariableForReplacement(\n\t\t\t\t\tcontext,\n\t\t\t\t\tfn.body,\n\t\t\t\t\tfnParam.name,\n\t\t\t\t\texpectedName\n\t\t\t\t);\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: fn,\n\t\t\t\t\tloc: fnParam.loc,\n\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\tdata: { name: expectedName },\n\t\t\t\t\tsuggest: hasConflict\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmessageId: 'renameParam',\n\t\t\t\t\t\t\t\t\tdata: { oldName: fnParam.name, newName: expectedName },\n\t\t\t\t\t\t\t\t\tfix: createFixer(fnParam, variable, expectedName)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Check for array type.\n\t\t * e.g. derived([ a, b ], ([ $a, $b ]) => {})\n\t\t */\n\t\tfunction checkArrayExpression(\n\t\t\tcontext: RuleContext,\n\t\t\targs: TSESTree.ArrayExpression,\n\t\t\tfn: ArrowFunctionExpressionOrFunctionExpression\n\t\t) {\n\t\t\tconst fnParam = fn.params[0];\n\t\t\tif (fnParam.type !== 'ArrayPattern') return;\n\t\t\tconst argNames = args.elements.map((element) => {\n\t\t\t\treturn element && element.type === 'Identifier' ? element.name : null;\n\t\t\t});\n\t\t\tfnParam.elements.forEach((element, index) => {\n\t\t\t\tconst argName = argNames[index];\n\t\t\t\tif (element && element.type === 'Identifier' && argName) {\n\t\t\t\t\tconst expectedName = `$${argName}`;\n\t\t\t\t\tif (expectedName !== element.name) {\n\t\t\t\t\t\tconst { hasConflict, variable } = findVariableForReplacement(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tfn.body,\n\t\t\t\t\t\t\telement.name,\n\t\t\t\t\t\t\texpectedName\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: fn,\n\t\t\t\t\t\t\tloc: element.loc,\n\t\t\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\t\t\tdata: { name: expectedName },\n\t\t\t\t\t\t\tsuggest: hasConflict\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 'renameParam',\n\t\t\t\t\t\t\t\t\t\t\tdata: { oldName: element.name, newName: expectedName },\n\t\t\t\t\t\t\t\t\t\t\tfix: createFixer(element, variable, expectedName)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tfor (const { node } of extractStoreReferences(context, ['derived'])) {\n\t\t\t\t\tconst [args, fn] = node.arguments;\n\t\t\t\t\tif (!args || !isIdentifierOrArrayExpression(args)) continue;\n\t\t\t\t\tif (!fn || !isFunctionExpression(fn)) continue;\n\t\t\t\t\tif (!fn.params || fn.params.length === 0) continue;\n\t\t\t\t\tif (args.type === 'Identifier') checkIdentifier(context, args, fn);\n\t\t\t\t\telse checkArrayExpression(context, args, fn);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/experimental-require-slot-types.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { getLangValue } from '../utils/ast-utils.js';\n\nconst SLOTS_TYPE_NAME = '$$Slots';\n\nexport default createRule('experimental-require-slot-types', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require slot type declaration using the `$$Slots` interface',\n\t\t\tcategory: 'Experimental',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tmissingSlotsInterface: `The component must define the $$Slots interface.`\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tlet isTs = false;\n\t\tlet hasSlot = false;\n\t\tlet hasDeclaredSlots = false;\n\t\treturn {\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tconst lang = getLangValue(node)?.toLowerCase();\n\t\t\t\tisTs = lang === 'ts' || lang === 'typescript';\n\t\t\t},\n\t\t\tSvelteElement(node) {\n\t\t\t\tif (node.name.type === 'SvelteName' && node.name.name === 'slot') {\n\t\t\t\t\thasSlot = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\tTSInterfaceDeclaration(node) {\n\t\t\t\tif (node.id.name === SLOTS_TYPE_NAME) {\n\t\t\t\t\thasDeclaredSlots = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\tTSTypeAliasDeclaration(node) {\n\t\t\t\tif (node.id.name === SLOTS_TYPE_NAME) {\n\t\t\t\t\thasDeclaredSlots = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tif (isTs && hasSlot && !hasDeclaredSlots) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tline: 1,\n\t\t\t\t\t\t\tcolumn: 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessageId: 'missingSlotsInterface'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/experimental-require-strict-events.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\n\nimport { createRule } from '../utils/index.js';\nimport { findAttribute, getLangValue } from '../utils/ast-utils.js';\n\nconst EVENTS_TYPE_NAME = '$$Events';\n\nexport default createRule('experimental-require-strict-events', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require the strictEvents attribute on `<script>` tags',\n\t\t\tcategory: 'Experimental',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tmissingStrictEvents: `The component must have the strictEvents attribute on its <script> tag or it must define the $$Events interface.`\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tlet isTs = false;\n\t\tlet hasAttribute = false;\n\t\tlet hasDeclaredEvents = false;\n\t\tlet scriptNode: AST.SvelteScriptElement;\n\t\treturn {\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tconst lang = getLangValue(node)?.toLowerCase();\n\t\t\t\tisTs = lang === 'ts' || lang === 'typescript';\n\t\t\t\thasAttribute = findAttribute(node, 'strictEvents') !== null;\n\t\t\t\tscriptNode = node;\n\t\t\t},\n\t\t\tTSInterfaceDeclaration(node) {\n\t\t\t\tif (node.id.name === EVENTS_TYPE_NAME) {\n\t\t\t\t\thasDeclaredEvents = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\tTSTypeAliasDeclaration(node) {\n\t\t\t\tif (node.id.name === EVENTS_TYPE_NAME) {\n\t\t\t\t\thasDeclaredEvents = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tif (isTs && !hasAttribute && !hasDeclaredEvents) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: scriptNode,\n\t\t\t\t\t\tmessageId: 'missingStrictEvents'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/first-attribute-linebreak.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('first-attribute-linebreak', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce the location of first attribute',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'whitespace',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tmultiline: { enum: ['below', 'beside'] },\n\t\t\t\t\tsingleline: { enum: ['below', 'beside'] }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpected: 'Expected a linebreak before this attribute.',\n\t\t\tunexpected: 'Expected no linebreak before this attribute.'\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(context) {\n\t\tconst multiline: 'below' | 'beside' = context.options[0]?.multiline || 'below';\n\t\tconst singleline: 'below' | 'beside' = context.options[0]?.singleline || 'beside';\n\t\tconst sourceCode = context.sourceCode;\n\n\t\t/**\n\t\t * Report attribute\n\t\t */\n\t\tfunction report(\n\t\t\tfirstAttribute: AST.SvelteStartTag['attributes'][number],\n\t\t\tlocation: 'below' | 'beside'\n\t\t) {\n\t\t\tcontext.report({\n\t\t\t\tnode: firstAttribute,\n\t\t\t\tmessageId: location === 'beside' ? 'unexpected' : 'expected',\n\t\t\t\tfix(fixer) {\n\t\t\t\t\tconst prevToken = sourceCode.getTokenBefore(firstAttribute, {\n\t\t\t\t\t\tincludeComments: true\n\t\t\t\t\t})!;\n\t\t\t\t\treturn fixer.replaceTextRange(\n\t\t\t\t\t\t[prevToken.range[1], firstAttribute.range[0]],\n\t\t\t\t\t\tlocation === 'beside' ? ' ' : '\\n'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteStartTag(node) {\n\t\t\t\tconst firstAttribute = node.attributes[0];\n\t\t\t\tif (!firstAttribute) return;\n\n\t\t\t\tconst lastAttribute = node.attributes[node.attributes.length - 1];\n\n\t\t\t\tconst location =\n\t\t\t\t\tfirstAttribute.loc.start.line === lastAttribute.loc.end.line ? singleline : multiline;\n\n\t\t\t\tif (location === 'beside') {\n\t\t\t\t\tif (node.parent.name.loc.end.line === firstAttribute.loc.start.line) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else if (node.parent.name.loc.end.line < firstAttribute.loc.start.line) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treport(firstAttribute, location);\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/html-closing-bracket-new-line.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport type { SourceCode } from '../types.js';\n\ntype ExpectedNode = AST.SvelteStartTag | AST.SvelteEndTag;\ntype OptionValue = 'always' | 'never';\ntype RuleOptions = {\n\tsingleline: OptionValue;\n\tmultiline: OptionValue;\n\tselfClosingTag?: Omit<RuleOptions, 'selfClosingTag'>;\n};\n\nfunction getPhrase(lineBreaks: number) {\n\tswitch (lineBreaks) {\n\t\tcase 0: {\n\t\t\treturn 'no line breaks';\n\t\t}\n\t\tcase 1: {\n\t\t\treturn '1 line break';\n\t\t}\n\t\tdefault: {\n\t\t\treturn `${lineBreaks} line breaks`;\n\t\t}\n\t}\n}\n\nfunction getExpectedLineBreaks(\n\tnode: ExpectedNode,\n\toptions: RuleOptions,\n\ttype: keyof Omit<RuleOptions, 'selfClosingTag'>\n) {\n\tconst isSelfClosingTag = node.type === 'SvelteStartTag' && node.selfClosing;\n\tif (isSelfClosingTag && options.selfClosingTag && options.selfClosingTag[type]) {\n\t\treturn options.selfClosingTag[type] === 'always' ? 1 : 0;\n\t}\n\n\treturn options[type] === 'always' ? 1 : 0;\n}\n\ntype NodeData = {\n\tactualLineBreaks: number;\n\texpectedLineBreaks: number;\n\tstartToken: AST.Token;\n\tendToken: AST.Token;\n};\n\nfunction getSelfClosingData(\n\tsourceCode: SourceCode,\n\tnode: AST.SvelteStartTag,\n\toptions: RuleOptions\n): NodeData | null {\n\tconst tokens = sourceCode.getTokens(node);\n\tconst closingToken = tokens[tokens.length - 2];\n\tif (closingToken.value !== '/') {\n\t\treturn null;\n\t}\n\n\tconst prevToken = sourceCode.getTokenBefore(closingToken)!;\n\tconst type = node.loc.start.line === prevToken.loc.end.line ? 'singleline' : 'multiline';\n\n\tconst expectedLineBreaks = getExpectedLineBreaks(node, options, type);\n\tconst actualLineBreaks = closingToken.loc.start.line - prevToken.loc.end.line;\n\n\treturn { actualLineBreaks, expectedLineBreaks, startToken: prevToken, endToken: closingToken };\n}\n\nfunction getNodeData(\n\tsourceCode: SourceCode,\n\tnode: ExpectedNode,\n\toptions: RuleOptions\n): NodeData | null {\n\tconst closingToken = sourceCode.getLastToken(node);\n\tif (closingToken.value !== '>') {\n\t\treturn null;\n\t}\n\n\tconst prevToken = sourceCode.getTokenBefore(closingToken)!;\n\tconst type = node.loc.start.line === prevToken.loc.end.line ? 'singleline' : 'multiline';\n\n\tconst expectedLineBreaks = getExpectedLineBreaks(node, options, type);\n\tconst actualLineBreaks = closingToken.loc.start.line - prevToken.loc.end.line;\n\n\treturn { actualLineBreaks, expectedLineBreaks, startToken: prevToken, endToken: closingToken };\n}\n\nexport default createRule('html-closing-bracket-new-line', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"Require or disallow a line break before tag's closing brackets\",\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tsingleline: { enum: ['always', 'never'] },\n\t\t\t\t\tmultiline: { enum: ['always', 'never'] },\n\t\t\t\t\tselfClosingTag: {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tsingleline: { enum: ['always', 'never'] },\n\t\t\t\t\t\t\tmultiline: { enum: ['always', 'never'] }\n\t\t\t\t\t\t},\n\t\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\t\tminProperties: 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedBeforeClosingBracket:\n\t\t\t\t'Expected {{expected}} before closing bracket, but {{actual}} found.'\n\t\t},\n\t\tfixable: 'code',\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst options: RuleOptions = { ...(context.options[0] ?? {}) };\n\t\toptions.singleline ??= 'never';\n\t\toptions.multiline ??= 'always';\n\n\t\tconst sourceCode = context.sourceCode;\n\n\t\treturn {\n\t\t\t'SvelteStartTag, SvelteEndTag'(node: ExpectedNode) {\n\t\t\t\tconst data =\n\t\t\t\t\tnode.type === 'SvelteStartTag' && node.selfClosing\n\t\t\t\t\t\t? getSelfClosingData(sourceCode, node, options)\n\t\t\t\t\t\t: getNodeData(sourceCode, node, options);\n\t\t\t\tif (!data) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { actualLineBreaks, expectedLineBreaks, startToken, endToken } = data;\n\t\t\t\tif (actualLineBreaks !== expectedLineBreaks) {\n\t\t\t\t\t// For SvelteEndTag, does not make sense to add a line break, so we only fix if there are extra line breaks\n\t\t\t\t\tif (node.type === 'SvelteEndTag' && expectedLineBreaks !== 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tloc: { start: startToken.loc.end, end: endToken.loc.start },\n\t\t\t\t\t\tmessageId: 'expectedBeforeClosingBracket',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\texpected: getPhrase(expectedLineBreaks),\n\t\t\t\t\t\t\tactual: getPhrase(actualLineBreaks)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\tconst range: AST.Range = [startToken.range[1], endToken.range[0]];\n\t\t\t\t\t\t\tconst text = '\\n'.repeat(expectedLineBreaks);\n\t\t\t\t\t\t\treturn fixer.replaceTextRange(range, text);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/html-closing-bracket-spacing.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport type { AST } from 'svelte-eslint-parser';\n\nexport default createRule('html-closing-bracket-spacing', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"require or disallow a space before tag's closing brackets\",\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\tconflictWithPrettier: true,\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tstartTag: {\n\t\t\t\t\t\tenum: ['always', 'never', 'ignore']\n\t\t\t\t\t},\n\t\t\t\t\tendTag: {\n\t\t\t\t\t\tenum: ['always', 'never', 'ignore']\n\t\t\t\t\t},\n\t\t\t\t\tselfClosingTag: {\n\t\t\t\t\t\tenum: ['always', 'never', 'ignore']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedSpace: \"Expected space before '>', but not found.\",\n\t\t\tunexpectedSpace: \"Expected no space before '>', but found.\"\n\t\t},\n\t\tfixable: 'whitespace',\n\t\ttype: 'layout'\n\t},\n\tcreate(ctx) {\n\t\tconst options = {\n\t\t\tstartTag: 'never',\n\t\t\tendTag: 'never',\n\t\t\tselfClosingTag: 'always',\n\t\t\t...ctx.options[0]\n\t\t};\n\t\tconst src = ctx.sourceCode;\n\n\t\t/**\n\t\t * Returns true if string contains newline characters\n\t\t */\n\t\tfunction containsNewline(string: string): boolean {\n\t\t\treturn string.includes('\\n');\n\t\t}\n\n\t\t/**\n\t\t * Report\n\t\t */\n\t\tfunction report(node: AST.SvelteStartTag | AST.SvelteEndTag, shouldHave: boolean) {\n\t\t\tconst tagSrc = src.getText(node);\n\t\t\tconst match = /(\\s*)\\/?>$/.exec(tagSrc);\n\n\t\t\tconst end = node.range[1];\n\t\t\tconst start = node.range[1] - match![0].length;\n\t\t\tconst loc = {\n\t\t\t\tstart: src.getLocFromIndex(start),\n\t\t\t\tend: src.getLocFromIndex(end)\n\t\t\t};\n\n\t\t\tctx.report({\n\t\t\t\tloc,\n\t\t\t\tmessageId: shouldHave ? 'expectedSpace' : 'unexpectedSpace',\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tif (shouldHave) {\n\t\t\t\t\t\tyield fixer.insertTextBeforeRange([start, end], ' ');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst spaces = match![1];\n\n\t\t\t\t\t\tyield fixer.removeRange([start, start + spaces.length]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t'SvelteStartTag, SvelteEndTag'(node: AST.SvelteStartTag | AST.SvelteEndTag) {\n\t\t\t\tconst tagType =\n\t\t\t\t\tnode.type === 'SvelteEndTag'\n\t\t\t\t\t\t? 'endTag'\n\t\t\t\t\t\t: node.selfClosing\n\t\t\t\t\t\t\t? 'selfClosingTag'\n\t\t\t\t\t\t\t: 'startTag';\n\n\t\t\t\tif (options[tagType] === 'ignore') return;\n\n\t\t\t\tconst tagSrc = src.getText(node);\n\t\t\t\tconst match = /(\\s*)\\/?>$/.exec(tagSrc);\n\t\t\t\tif (containsNewline(match![1])) return;\n\n\t\t\t\tif (options[tagType] === 'always' && !match![1]) {\n\t\t\t\t\treport(node, true);\n\t\t\t\t} else if (options[tagType] === 'never' && match![1]) {\n\t\t\t\t\treport(node, false);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/html-quotes.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport type { QuoteAndRange } from '../utils/ast-utils.js';\nimport { getMustacheTokens } from '../utils/ast-utils.js';\nimport { getAttributeValueQuoteAndRange } from '../utils/ast-utils.js';\n\nconst QUOTE_CHARS = {\n\tdouble: '\"',\n\tsingle: \"'\"\n};\nconst QUOTE_NAMES = {\n\tdouble: 'double quotes',\n\tsingle: 'single quotes',\n\tunquoted: 'unquoted'\n};\n\nexport default createRule('html-quotes', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce quotes style of HTML attributes',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tprefer: { enum: ['double', 'single'] },\n\t\t\t\t\tdynamic: {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tquoted: { type: 'boolean' },\n\t\t\t\t\t\t\tavoidInvalidUnquotedInHTML: { type: 'boolean' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\tadditionalProperties: false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedEnclosed: 'Expected to be enclosed by quotes.',\n\t\t\texpectedEnclosedBy: 'Expected to be enclosed by {{kind}}.',\n\t\t\tunexpectedEnclosed: 'Unexpected to be enclosed by any quotes.'\n\t\t},\n\t\ttype: 'layout' // \"problem\",\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst preferQuote: 'double' | 'single' = context.options[0]?.prefer ?? 'double';\n\t\tconst dynamicQuote = context.options[0]?.dynamic?.quoted ? preferQuote : 'unquoted';\n\t\tconst avoidInvalidUnquotedInHTML = Boolean(\n\t\t\tcontext.options[0]?.dynamic?.avoidInvalidUnquotedInHTML\n\t\t);\n\n\t\t/** Checks whether the given text can remove quotes in HTML. */\n\t\tfunction canBeUnquotedInHTML(text: string) {\n\t\t\treturn !/[\\s\"'<=>`]/u.test(text);\n\t\t}\n\n\t\t/** Verify quote */\n\t\tfunction verifyQuote(\n\t\t\tprefer: 'double' | 'single' | 'unquoted',\n\t\t\tquoteAndRange: QuoteAndRange | null\n\t\t) {\n\t\t\tif (!quoteAndRange) {\n\t\t\t\t// invalid\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (quoteAndRange.quote === prefer) {\n\t\t\t\t// valid\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet messageId: string;\n\t\t\tlet expectedQuote = prefer;\n\t\t\tif (quoteAndRange.quote !== 'unquoted') {\n\t\t\t\tif (expectedQuote === 'unquoted') {\n\t\t\t\t\tmessageId = 'unexpectedEnclosed';\n\t\t\t\t} else {\n\t\t\t\t\tconst contentText = sourceCode.text.slice(\n\t\t\t\t\t\tquoteAndRange.range[0] + 1,\n\t\t\t\t\t\tquoteAndRange.range[1] - 1\n\t\t\t\t\t);\n\t\t\t\t\tconst needEscape = contentText.includes(QUOTE_CHARS[expectedQuote]);\n\t\t\t\t\tif (needEscape) {\n\t\t\t\t\t\t// avoid escape\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmessageId = 'expectedEnclosedBy';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst contentText = sourceCode.text.slice(...quoteAndRange.range);\n\t\t\t\tconst needEscapeDoubleQuote = contentText.includes('\"');\n\t\t\t\tconst needEscapeSingleQuote = contentText.includes(\"'\");\n\t\t\t\tif (needEscapeDoubleQuote && needEscapeSingleQuote) {\n\t\t\t\t\t// avoid escape\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (needEscapeDoubleQuote && expectedQuote === 'double') {\n\t\t\t\t\texpectedQuote = 'single';\n\t\t\t\t\tmessageId = 'expectedEnclosed';\n\t\t\t\t} else if (needEscapeSingleQuote && expectedQuote === 'single') {\n\t\t\t\t\texpectedQuote = 'double';\n\t\t\t\t\tmessageId = 'expectedEnclosed';\n\t\t\t\t} else {\n\t\t\t\t\tmessageId = 'expectedEnclosedBy';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.report({\n\t\t\t\tloc: {\n\t\t\t\t\tstart: sourceCode.getLocFromIndex(quoteAndRange.range[0]),\n\t\t\t\t\tend: sourceCode.getLocFromIndex(quoteAndRange.range[1])\n\t\t\t\t},\n\t\t\t\tmessageId,\n\t\t\t\tdata: { kind: QUOTE_NAMES[expectedQuote] },\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tif (expectedQuote !== 'unquoted') {\n\t\t\t\t\t\tyield fixer.insertTextBeforeRange(\n\t\t\t\t\t\t\t[quoteAndRange.range[0], quoteAndRange.range[0]],\n\t\t\t\t\t\t\tQUOTE_CHARS[expectedQuote]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (quoteAndRange.quote !== 'unquoted') {\n\t\t\t\t\t\tyield fixer.removeRange([quoteAndRange.range[0], quoteAndRange.range[0] + 1]);\n\t\t\t\t\t\tyield fixer.removeRange([quoteAndRange.range[1] - 1, quoteAndRange.range[1]]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (expectedQuote !== 'unquoted') {\n\t\t\t\t\t\tyield fixer.insertTextAfterRange(\n\t\t\t\t\t\t\t[quoteAndRange.range[1], quoteAndRange.range[1]],\n\t\t\t\t\t\t\tQUOTE_CHARS[expectedQuote]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/** Verify for standard attribute */\n\t\tfunction verifyForValues(attr: AST.SvelteAttribute | AST.SvelteStyleDirective) {\n\t\t\tconst quoteAndRange = getAttributeValueQuoteAndRange(attr, sourceCode);\n\t\t\tverifyQuote(preferQuote, quoteAndRange);\n\t\t}\n\n\t\t/** Verify for dynamic attribute */\n\t\tfunction verifyForDynamicMustacheTag(\n\t\t\tattr: AST.SvelteAttribute | AST.SvelteStyleDirective,\n\t\t\tvalueNode: AST.SvelteMustacheTagText\n\t\t) {\n\t\t\tconst quoteAndRange = getAttributeValueQuoteAndRange(attr, sourceCode);\n\t\t\tconst text = sourceCode.text.slice(...valueNode.range);\n\t\t\tverifyQuote(\n\t\t\t\tavoidInvalidUnquotedInHTML && !canBeUnquotedInHTML(text) ? preferQuote : dynamicQuote,\n\t\t\t\tquoteAndRange\n\t\t\t);\n\t\t}\n\n\t\t/** Verify for directive value */\n\t\tfunction verifyForDirective(attr: AST.SvelteDirective | AST.SvelteSpecialDirective) {\n\t\t\tconst mustacheTokens = getMustacheTokens(attr, sourceCode);\n\t\t\tif (!mustacheTokens) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst quoteAndRange = getAttributeValueQuoteAndRange(attr, sourceCode);\n\t\t\tconst text = sourceCode.text.slice(\n\t\t\t\tmustacheTokens.openToken.range[0],\n\t\t\t\tmustacheTokens.closeToken.range[1]\n\t\t\t);\n\t\t\tverifyQuote(\n\t\t\t\tavoidInvalidUnquotedInHTML && !canBeUnquotedInHTML(text) ? preferQuote : dynamicQuote,\n\t\t\t\tquoteAndRange\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\t'SvelteAttribute, SvelteStyleDirective'(\n\t\t\t\tnode: AST.SvelteAttribute | AST.SvelteStyleDirective\n\t\t\t) {\n\t\t\t\tif (node.value.length === 1 && node.value[0].type === 'SvelteMustacheTag') {\n\t\t\t\t\tverifyForDynamicMustacheTag(node, node.value[0]);\n\t\t\t\t} else if (node.value.length >= 1) {\n\t\t\t\t\tverifyForValues(node);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'SvelteDirective, SvelteSpecialDirective'(\n\t\t\t\tnode: AST.SvelteDirective | AST.SvelteSpecialDirective\n\t\t\t) {\n\t\t\t\tif (node.expression == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tnode.key.range[0] <= node.expression.range[0] &&\n\t\t\t\t\tnode.expression.range[1] <= node.key.range[1]\n\t\t\t\t) {\n\t\t\t\t\t// shorthand\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tverifyForDirective(node);\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/html-self-closing.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport {\n\tgetNodeName,\n\tisVoidHtmlElement,\n\tisSvgElement,\n\tisMathMLElement\n} from '../utils/ast-utils.js';\n\nconst TYPE_MESSAGES = {\n\tnormal: 'HTML elements',\n\tvoid: 'HTML void elements',\n\tsvg: 'SVG elements',\n\tmath: 'MathML elements',\n\tcomponent: 'Svelte custom components',\n\tsvelte: 'Svelte special elements'\n};\n\ntype ElementTypes = 'normal' | 'void' | 'svg' | 'math' | 'component' | 'svelte';\n\nexport default createRule('html-self-closing', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce self-closing style',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\ttype: 'layout',\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\trequireClosing: 'Require self-closing on {{type}}.',\n\t\t\tdisallowClosing: 'Disallow self-closing on {{type}}.'\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tvoid: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'ignore']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'ignore']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsvg: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'ignore']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmath: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'ignore']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcomponent: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'ignore']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsvelte: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'ignore']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tadditionalProperties: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tenum: ['all', 'html', 'none']\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\t// default\n\t\tlet options = {\n\t\t\tvoid: 'always',\n\t\t\tnormal: 'never',\n\t\t\tsvg: 'always',\n\t\t\tmath: 'never',\n\t\t\tcomponent: 'always',\n\t\t\tsvelte: 'always'\n\t\t};\n\n\t\tconst option = context.options?.[0];\n\t\tswitch (option) {\n\t\t\tcase 'all':\n\t\t\t\toptions = {\n\t\t\t\t\tvoid: 'always',\n\t\t\t\t\tnormal: 'always',\n\t\t\t\t\tsvg: 'always',\n\t\t\t\t\tmath: 'always',\n\t\t\t\t\tcomponent: 'always',\n\t\t\t\t\tsvelte: 'always'\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'html':\n\t\t\t\toptions = {\n\t\t\t\t\tvoid: 'always',\n\t\t\t\t\tnormal: 'never',\n\t\t\t\t\tsvg: 'always',\n\t\t\t\t\tmath: 'never',\n\t\t\t\t\tcomponent: 'never',\n\t\t\t\t\tsvelte: 'always'\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'none':\n\t\t\t\toptions = {\n\t\t\t\t\tvoid: 'never',\n\t\t\t\t\tnormal: 'never',\n\t\t\t\t\tsvg: 'never',\n\t\t\t\t\tmath: 'never',\n\t\t\t\t\tcomponent: 'never',\n\t\t\t\t\tsvelte: 'never'\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (typeof option !== 'object' || option === null) break;\n\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...option\n\t\t\t\t};\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\t/**\n\t\t * Get SvelteElement type.\n\t\t * If element is custom component \"component\" is returned\n\t\t * If element is svelte special element such as svelte:self \"svelte\" is returned\n\t\t * If element is void element \"void\" is returned\n\t\t * otherwise \"normal\" is returned\n\t\t */\n\t\tfunction getElementType(node: AST.SvelteElement): ElementTypes {\n\t\t\tif (node.kind === 'component') return 'component';\n\t\t\tif (node.kind === 'special') return 'svelte';\n\t\t\tif (isVoidHtmlElement(node)) return 'void';\n\t\t\tif (isSvgElement(node)) return 'svg';\n\t\t\tif (isMathMLElement(node)) return 'math';\n\t\t\treturn 'normal';\n\t\t}\n\n\t\t/**\n\t\t * Returns true if element has no children, or has only whitespace text\n\t\t */\n\t\tfunction isElementEmpty(node: AST.SvelteElement): boolean {\n\t\t\tif (node.children.length <= 0) return true;\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (child.type !== 'SvelteText') return false;\n\t\t\t\tif (!/^\\s*$/.test(child.value)) return false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Report\n\t\t */\n\t\tfunction report(node: AST.SvelteElement, shouldBeClosed: boolean) {\n\t\t\tconst elementType = getElementType(node);\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tloc: {\n\t\t\t\t\tstart: context.sourceCode.getLocFromIndex(\n\t\t\t\t\t\tnode.startTag.range[1] - (node.startTag.selfClosing ? 2 : 1)\n\t\t\t\t\t),\n\t\t\t\t\tend: node.loc.end\n\t\t\t\t},\n\t\t\t\tmessageId: shouldBeClosed ? 'requireClosing' : 'disallowClosing',\n\t\t\t\tdata: {\n\t\t\t\t\ttype: TYPE_MESSAGES[elementType]\n\t\t\t\t},\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tif (shouldBeClosed) {\n\t\t\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\t\t\tyield fixer.removeRange(child.range);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tyield fixer.insertTextBeforeRange(\n\t\t\t\t\t\t\t[node.startTag.range[1] - 1, node.startTag.range[1]],\n\t\t\t\t\t\t\t'/'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (node.endTag) yield fixer.removeRange(node.endTag.range);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield fixer.removeRange([node.startTag.range[1] - 2, node.startTag.range[1] - 1]);\n\n\t\t\t\t\t\tif (!isVoidHtmlElement(node))\n\t\t\t\t\t\t\tyield fixer.insertTextAfter(node, `</${getNodeName(node)}>`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteElement(node: AST.SvelteElement) {\n\t\t\t\tif (!isElementEmpty(node)) return;\n\n\t\t\t\tconst elementType = getElementType(node);\n\n\t\t\t\tconst elementTypeOptions = options[elementType];\n\t\t\t\tif (elementTypeOptions === 'ignore') return;\n\t\t\t\tconst shouldBeClosed = elementTypeOptions === 'always';\n\n\t\t\t\tif (shouldBeClosed && !node.startTag.selfClosing) {\n\t\t\t\t\treport(node, true);\n\t\t\t\t} else if (!shouldBeClosed && node.startTag.selfClosing) {\n\t\t\t\t\treport(node, false);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/ast.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\ntype AnyToken = AST.Token | AST.Comment;\n/**\n * Check whether the given token is a whitespace.\n */\nexport function isWhitespace(token: AnyToken | TSESTree.Comment | null | undefined): boolean {\n\treturn (\n\t\ttoken != null &&\n\t\t((token.type === 'HTMLText' && !token.value.trim()) ||\n\t\t\t(token.type === 'JSXText' && !token.value.trim()))\n\t);\n}\n\n/**\n * Check whether the given token is a not whitespace.\n */\nexport function isNotWhitespace(token: AnyToken | TSESTree.Comment | null | undefined): boolean {\n\treturn (\n\t\ttoken != null &&\n\t\t(token.type !== 'HTMLText' || Boolean(token.value.trim())) &&\n\t\t(token.type !== 'JSXText' || Boolean(token.value.trim()))\n\t);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/commons.ts",
    "content": "import type { ASTNode, SourceCode } from '../../types.js';\nimport type { AST } from 'svelte-eslint-parser';\nimport { isOpeningParenToken, isClosingParenToken } from '@eslint-community/eslint-utils';\nimport { isNotWhitespace, isWhitespace } from './ast.js';\nimport type { OffsetContext } from './offset-context.js';\n\nexport type AnyToken = AST.Token | AST.Comment;\nexport type MaybeNode = {\n\ttype: string;\n\trange: [number, number];\n\tloc: AST.SourceLocation;\n};\n\nexport type IndentOptions = {\n\tindentChar: ' ' | '\\t';\n\tindentScript: boolean;\n\tindentSize: number;\n\tswitchCase: number;\n\talignAttributesVertically: boolean;\n\tignoredNodes: string[];\n};\n\nexport type IndentContext = {\n\tsourceCode: SourceCode;\n\toptions: IndentOptions;\n\toffsets: OffsetContext;\n};\n\n/**\n * Get the first and last tokens of the given node.\n * If the node is parenthesized, this gets the outermost parentheses.\n * If the node have whitespace at the start and the end, they will be skipped.\n */\nexport function getFirstAndLastTokens(\n\tsourceCode: SourceCode,\n\tnode: ASTNode | AnyToken | MaybeNode,\n\tborderOffset = 0\n): { firstToken: AST.Token; lastToken: AST.Token } {\n\tlet firstToken = sourceCode.getFirstToken(node);\n\tlet lastToken = sourceCode.getLastToken(node);\n\n\t// Get the outermost left parenthesis if it's parenthesized.\n\tlet left: AST.Token | null, right: AST.Token | null;\n\twhile (\n\t\t(left = sourceCode.getTokenBefore(firstToken)) != null &&\n\t\t(right = sourceCode.getTokenAfter(lastToken)) != null &&\n\t\tisOpeningParenToken(left) &&\n\t\tisClosingParenToken(right) &&\n\t\tborderOffset <= left.range[0]\n\t) {\n\t\tfirstToken = left;\n\t\tlastToken = right;\n\t}\n\n\twhile (isWhitespace(firstToken) && firstToken.range[0] < lastToken.range[0]) {\n\t\tfirstToken = sourceCode.getTokenAfter(firstToken) as AST.Token;\n\t}\n\twhile (isWhitespace(lastToken) && firstToken.range[0] < lastToken.range[0]) {\n\t\tlastToken = sourceCode.getTokenBefore(lastToken) as AST.Token;\n\t}\n\n\treturn { firstToken, lastToken };\n}\n\n/**\n * Check whether the given node or token is the beginning of a line.\n */\nexport function isBeginningOfLine(\n\tsourceCode: SourceCode,\n\tnode: ASTNode | AnyToken | MaybeNode\n): boolean {\n\tconst prevToken = sourceCode.getTokenBefore(node, {\n\t\tincludeComments: false,\n\t\tfilter: isNotWhitespace\n\t});\n\n\treturn !prevToken || prevToken.loc.end.line < node.loc.start.line;\n}\n\n/**\n * Check whether the given node is the beginning of element.\n */\nexport function isBeginningOfElement(node: AST.SvelteText): boolean {\n\tif (\n\t\tnode.parent.type === 'SvelteElement' ||\n\t\tnode.parent.type === 'SvelteAwaitCatchBlock' ||\n\t\tnode.parent.type === 'SvelteAwaitPendingBlock' ||\n\t\tnode.parent.type === 'SvelteAwaitThenBlock' ||\n\t\tnode.parent.type === 'SvelteEachBlock' ||\n\t\tnode.parent.type === 'SvelteElseBlock' ||\n\t\tnode.parent.type === 'SvelteIfBlock' ||\n\t\tnode.parent.type === 'SvelteKeyBlock' ||\n\t\tnode.parent.type === 'SvelteSnippetBlock' ||\n\t\tnode.parent.type === 'SvelteStyleElement'\n\t) {\n\t\treturn node.parent.children[0] === node;\n\t}\n\tif (node.parent.type === 'Program') {\n\t\treturn node.parent.body[0] === node;\n\t}\n\treturn assertNever(node.parent);\n}\n\n/**\n * Throws an error when invoked.\n */\nfunction assertNever(value: never): never {\n\tthrow new Error(`This part of the code should never be reached but ${value} made it through.`);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/es.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { IndentContext } from './commons.js';\nimport { getFirstAndLastTokens } from './commons.js';\nimport {\n\tisArrowToken,\n\tisClosingBraceToken,\n\tisClosingBracketToken,\n\tisClosingParenToken,\n\tisNotClosingParenToken,\n\tisNotOpeningParenToken,\n\tisNotSemicolonToken,\n\tisOpeningBraceToken,\n\tisOpeningBracketToken,\n\tisOpeningParenToken,\n\tisSemicolonToken\n} from '@eslint-community/eslint-utils';\nimport type { ESNodeListener } from '../../types-for-node.js';\nimport { getParent } from '../../utils/ast-utils.js';\n\ntype NodeListener = ESNodeListener;\n\n/**\n * Creates AST event handlers for ES nodes.\n *\n * @param context The rule context.\n * @returns AST event handlers.\n */\nexport function defineVisitor(context: IndentContext): NodeListener {\n\tconst { sourceCode, offsets, options } = context;\n\n\t/**\n\t * Find the head of chaining nodes.\n\t */\n\tfunction getChainHeadNode(\n\t\tnode:\n\t\t\t| TSESTree.AssignmentExpression\n\t\t\t| TSESTree.AssignmentPattern\n\t\t\t| TSESTree.BinaryExpression\n\t\t\t| TSESTree.LogicalExpression\n\t) {\n\t\tlet target = node;\n\t\tlet parent = getParent(target);\n\t\twhile (\n\t\t\tparent &&\n\t\t\t(parent.type === 'AssignmentExpression' ||\n\t\t\t\tparent.type === 'AssignmentPattern' ||\n\t\t\t\tparent.type === 'BinaryExpression' ||\n\t\t\t\tparent.type === 'LogicalExpression')\n\t\t) {\n\t\t\tconst prevToken = sourceCode.getTokenBefore(target);\n\t\t\tconst nextToken = sourceCode.getTokenAfter(target);\n\t\t\tif (\n\t\t\t\tprevToken &&\n\t\t\t\tisOpeningParenToken(prevToken) &&\n\t\t\t\tnextToken &&\n\t\t\t\tisClosingParenToken(nextToken)\n\t\t\t) {\n\t\t\t\t// The chain is broken because it is enclosed in parentheses.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttarget = parent;\n\t\t\tparent = getParent(target);\n\t\t}\n\t\treturn target;\n\t}\n\n\tconst visitor = {\n\t\tProgram(node: AST.SvelteProgram) {\n\t\t\tfor (const body of node.body) {\n\t\t\t\tif (body.type === 'SvelteText' && !body.value.trim()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\toffsets.setStartOffsetToken(sourceCode.getFirstToken(body), 0);\n\t\t\t}\n\t\t},\n\t\tArrayExpression(node: TSESTree.ArrayExpression | TSESTree.ArrayPattern) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst rightToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.elements[node.elements.length - 1] || firstToken,\n\t\t\t\t{ filter: isClosingBracketToken, includeComments: false }\n\t\t\t);\n\t\t\toffsets.setOffsetElementList(node.elements, firstToken, rightToken, 1);\n\t\t},\n\t\tArrayPattern(node: TSESTree.ArrayPattern) {\n\t\t\tvisitor.ArrayExpression(node);\n\t\t},\n\t\tArrowFunctionExpression(node: TSESTree.ArrowFunctionExpression) {\n\t\t\tconst [firstToken, secondToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\tconst leftToken = node.async ? secondToken : firstToken;\n\t\t\tconst arrowToken = sourceCode.getTokenBefore(node.body, {\n\t\t\t\tfilter: isArrowToken,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\n\t\t\tif (node.async) {\n\t\t\t\toffsets.setOffsetToken(secondToken, 1, firstToken);\n\t\t\t}\n\t\t\tif (isOpeningParenToken(leftToken)) {\n\t\t\t\tconst rightToken = sourceCode.getTokenAfter(\n\t\t\t\t\tnode.params[node.params.length - 1] || leftToken,\n\t\t\t\t\t{ filter: isClosingParenToken, includeComments: false }\n\t\t\t\t);\n\t\t\t\toffsets.setOffsetElementList(node.params, leftToken, rightToken, 1);\n\t\t\t}\n\n\t\t\toffsets.setOffsetToken(arrowToken, 1, firstToken);\n\n\t\t\tconst bodyFirstToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\tbodyFirstToken,\n\t\t\t\tisOpeningBraceToken(bodyFirstToken) ? 0 : 1,\n\t\t\t\tfirstToken\n\t\t\t);\n\t\t},\n\t\tAssignmentExpression(\n\t\t\tnode:\n\t\t\t\t| TSESTree.AssignmentExpression\n\t\t\t\t| TSESTree.AssignmentPattern\n\t\t\t\t| TSESTree.BinaryExpression\n\t\t\t\t| TSESTree.LogicalExpression\n\t\t) {\n\t\t\tconst baseNode = getChainHeadNode(node);\n\t\t\tconst opToken = sourceCode.getTokenAfter(node.left, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst baseToken =\n\t\t\t\tbaseNode.type === 'AssignmentExpression' || baseNode.type === 'AssignmentPattern'\n\t\t\t\t\t? sourceCode.getFirstToken(baseNode)\n\t\t\t\t\t: getFirstAndLastTokens(sourceCode, baseNode).firstToken;\n\t\t\tconst leftToken = getFirstAndLastTokens(sourceCode, node.left).firstToken;\n\t\t\tconst rightToken = getFirstAndLastTokens(sourceCode, node.right).firstToken;\n\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[leftToken === baseToken ? null : leftToken, opToken, rightToken],\n\t\t\t\t1,\n\t\t\t\tbaseToken\n\t\t\t);\n\t\t},\n\t\tAssignmentPattern(node: TSESTree.AssignmentPattern) {\n\t\t\tvisitor.AssignmentExpression(node);\n\t\t},\n\t\tBinaryExpression(node: TSESTree.BinaryExpression) {\n\t\t\tvisitor.AssignmentExpression(node);\n\t\t},\n\t\tLogicalExpression(node: TSESTree.LogicalExpression) {\n\t\t\tvisitor.AssignmentExpression(node);\n\t\t},\n\t\tAwaitExpression(\n\t\t\tnode:\n\t\t\t\t| TSESTree.AwaitExpression\n\t\t\t\t| TSESTree.RestElement\n\t\t\t\t| TSESTree.SpreadElement\n\t\t\t\t| TSESTree.UnaryExpression\n\t\t) {\n\t\t\t// `await`, `...`, or UnaryOperator\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst nextToken = sourceCode.getTokenAfter(firstToken);\n\n\t\t\toffsets.setOffsetToken(nextToken, 1, firstToken);\n\t\t},\n\t\tRestElement(node: TSESTree.RestElement) {\n\t\t\tvisitor.AwaitExpression(node);\n\t\t},\n\t\tSpreadElement(node: TSESTree.SpreadElement) {\n\t\t\tvisitor.AwaitExpression(node);\n\t\t},\n\t\tUnaryExpression(node: TSESTree.UnaryExpression) {\n\t\t\tvisitor.AwaitExpression(node);\n\t\t},\n\t\tBlockStatement(node: TSESTree.BlockStatement | TSESTree.ClassBody) {\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.body,\n\t\t\t\tsourceCode.getFirstToken(node),\n\t\t\t\tsourceCode.getLastToken(node),\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t\tClassBody(node: TSESTree.ClassBody) {\n\t\t\tvisitor.BlockStatement(node);\n\t\t},\n\t\tBreakStatement(node: TSESTree.BreakStatement | TSESTree.ContinueStatement) {\n\t\t\tif (node.label) {\n\t\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst nextToken = sourceCode.getTokenAfter(firstToken);\n\n\t\t\t\toffsets.setOffsetToken(nextToken, 1, firstToken);\n\t\t\t}\n\t\t},\n\t\tContinueStatement(node: TSESTree.ContinueStatement) {\n\t\t\tvisitor.BreakStatement(node);\n\t\t},\n\t\tCallExpression(node: TSESTree.CallExpression) {\n\t\t\tconst typeArguments =\n\t\t\t\tnode.typeArguments ??\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t(node as any).typeParameters;\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(typeArguments || node.callee, {\n\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst rightParenToken = sourceCode.getLastToken(node);\n\n\t\t\tif (typeArguments) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);\n\t\t\t}\n\n\t\t\tfor (const optionalToken of sourceCode.getTokensBetween(\n\t\t\t\tsourceCode.getLastToken(typeArguments || node.callee),\n\t\t\t\tleftParenToken,\n\t\t\t\t{ filter: isOptionalToken, includeComments: false }\n\t\t\t)) {\n\t\t\t\toffsets.setOffsetToken(optionalToken, 1, firstToken);\n\t\t\t}\n\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, firstToken);\n\t\t\toffsets.setOffsetElementList(node.arguments, leftParenToken, rightParenToken, 1);\n\t\t},\n\t\tCatchClause(node: TSESTree.CatchClause) {\n\t\t\tconst catchToken = sourceCode.getFirstToken(node);\n\n\t\t\tif (node.param != null) {\n\t\t\t\tconst leftParenToken = sourceCode.getTokenBefore(node.param)!;\n\t\t\t\tconst rightParenToken = sourceCode.getTokenAfter(node.param);\n\n\t\t\t\toffsets.setOffsetToken(leftParenToken, 1, catchToken);\n\t\t\t\toffsets.setOffsetElementList([node.param], leftParenToken, rightParenToken, 1);\n\t\t\t}\n\t\t\tconst bodyToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyToken, 0, catchToken);\n\t\t},\n\t\tClassDeclaration(node: TSESTree.ClassDeclaration | TSESTree.ClassExpression) {\n\t\t\tconst classToken = sourceCode.getFirstToken(node);\n\n\t\t\tif (node.id != null) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.id), 1, classToken);\n\t\t\t}\n\t\t\tif (node.superClass != null) {\n\t\t\t\tconst extendsToken = sourceCode.getTokenBefore(node.superClass)!;\n\t\t\t\tconst superClassToken = sourceCode.getTokenAfter(extendsToken);\n\t\t\t\toffsets.setOffsetToken(extendsToken, 1, classToken);\n\t\t\t\toffsets.setOffsetToken(superClassToken, 1, extendsToken);\n\t\t\t}\n\t\t\tconst bodyToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyToken, 0, classToken);\n\t\t},\n\t\tClassExpression(node: TSESTree.ClassExpression) {\n\t\t\tvisitor.ClassDeclaration(node);\n\t\t},\n\t\tConditionalExpression(node: TSESTree.ConditionalExpression) {\n\t\t\tconst questionToken = sourceCode.getTokenAfter(node.test, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\n\t\t\tconst consequentToken = sourceCode.getTokenAfter(questionToken);\n\t\t\tconst colonToken = sourceCode.getTokenAfter(node.consequent, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst alternateToken = sourceCode.getTokenAfter(colonToken);\n\n\t\t\tlet baseNode = node;\n\t\t\tlet parent = getParent(baseNode);\n\t\t\twhile (parent && parent.type === 'ConditionalExpression' && parent.alternate === baseNode) {\n\t\t\t\tbaseNode = parent;\n\t\t\t\tparent = getParent(baseNode);\n\t\t\t}\n\t\t\tconst baseToken = sourceCode.getFirstToken(baseNode);\n\n\t\t\toffsets.setOffsetToken([questionToken, colonToken], 1, baseToken);\n\t\t\toffsets.setOffsetToken(consequentToken, 1, questionToken);\n\t\t\toffsets.setOffsetToken(alternateToken, 1, colonToken);\n\t\t},\n\t\tDoWhileStatement(node: TSESTree.DoWhileStatement) {\n\t\t\tconst doToken = sourceCode.getFirstToken(node);\n\t\t\tconst whileToken = sourceCode.getTokenAfter(node.body, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(whileToken)!;\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(node.test)!;\n\n\t\t\tconst bodyFirstToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyFirstToken, isOpeningBraceToken(bodyFirstToken) ? 0 : 1, doToken);\n\n\t\t\toffsets.setOffsetToken(whileToken, 0, doToken);\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, whileToken);\n\t\t\toffsets.setOffsetElementList([node.test], leftParenToken, rightParenToken, 1);\n\t\t},\n\t\tExportAllDeclaration(node: TSESTree.ExportAllDeclaration) {\n\t\t\tconst exportToken = sourceCode.getFirstToken(node);\n\t\t\tconst tokens = sourceCode.getTokensBetween(exportToken, node.source);\n\t\t\tconst fromIndex = tokens.findIndex((t) => t.value === 'from');\n\t\t\tconst fromToken = tokens[fromIndex];\n\t\t\tconst beforeTokens = tokens.slice(0, fromIndex);\n\t\t\tconst afterTokens = [...tokens.slice(fromIndex + 1), sourceCode.getFirstToken(node.source)];\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- type bug?\n\t\t\tif (!(node as any).exported) {\n\t\t\t\t// export * from \"mod\"\n\t\t\t\toffsets.setOffsetToken(beforeTokens, 1, exportToken);\n\t\t\t} else {\n\t\t\t\t// export * as foo from \"mod\"\n\t\t\t\tconst asIndex = beforeTokens.findIndex((t) => t.value === 'as');\n\t\t\t\toffsets.setOffsetToken(beforeTokens.slice(0, asIndex), 1, exportToken);\n\t\t\t\toffsets.setOffsetToken(beforeTokens.slice(asIndex), 1, beforeTokens[asIndex - 1]);\n\t\t\t}\n\t\t\toffsets.setOffsetToken(fromToken, 0, exportToken);\n\t\t\toffsets.setOffsetToken(afterTokens, 1, fromToken);\n\n\t\t\t// assertions\n\t\t\tconst lastToken = sourceCode.getLastToken(node, {\n\t\t\t\tfilter: isNotSemicolonToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst assertionTokens = sourceCode.getTokensBetween(node.source, lastToken);\n\t\t\tif (assertionTokens.length) {\n\t\t\t\tconst assertToken = assertionTokens.shift()!;\n\t\t\t\toffsets.setOffsetToken(assertToken, 0, exportToken);\n\t\t\t\tconst assertionOpen = assertionTokens.shift();\n\t\t\t\tif (assertionOpen) {\n\t\t\t\t\toffsets.setOffsetToken(assertionOpen, 1, assertToken);\n\t\t\t\t\toffsets.setOffsetElementList(assertionTokens, assertionOpen, lastToken, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tExportDefaultDeclaration(node: TSESTree.ExportDefaultDeclaration) {\n\t\t\tconst exportToken = sourceCode.getFirstToken(node);\n\t\t\tconst declarationToken = getFirstAndLastTokens(sourceCode, node.declaration).firstToken;\n\t\t\tconst defaultTokens = sourceCode.getTokensBetween(exportToken, declarationToken);\n\t\t\toffsets.setOffsetToken([...defaultTokens, declarationToken], 1, exportToken);\n\t\t},\n\t\tExportNamedDeclaration(node: TSESTree.ExportNamedDeclaration) {\n\t\t\tconst exportToken = sourceCode.getFirstToken(node);\n\t\t\tif (node.declaration) {\n\t\t\t\t// export var foo = 1;\n\t\t\t\tconst declarationToken = sourceCode.getFirstToken(node.declaration);\n\t\t\t\toffsets.setOffsetToken(declarationToken, 1, exportToken);\n\t\t\t} else {\n\t\t\t\tconst firstSpecifier = node.specifiers[0];\n\t\t\t\tif (!firstSpecifier || firstSpecifier.type === 'ExportSpecifier') {\n\t\t\t\t\t// export {foo, bar}; or export {foo, bar} from \"mod\";\n\t\t\t\t\tconst leftBraceTokens = firstSpecifier\n\t\t\t\t\t\t? sourceCode.getTokensBetween(exportToken, firstSpecifier)\n\t\t\t\t\t\t: [sourceCode.getTokenAfter(exportToken)!];\n\t\t\t\t\tconst rightBraceToken = node.source\n\t\t\t\t\t\t? sourceCode.getTokenBefore(node.source, {\n\t\t\t\t\t\t\t\tfilter: isClosingBraceToken,\n\t\t\t\t\t\t\t\tincludeComments: false\n\t\t\t\t\t\t\t})!\n\t\t\t\t\t\t: sourceCode.getLastToken(node, {\n\t\t\t\t\t\t\t\tfilter: isClosingBraceToken,\n\t\t\t\t\t\t\t\tincludeComments: false\n\t\t\t\t\t\t\t})!;\n\t\t\t\t\toffsets.setOffsetToken(leftBraceTokens, 0, exportToken);\n\t\t\t\t\toffsets.setOffsetElementList(\n\t\t\t\t\t\tnode.specifiers,\n\t\t\t\t\t\tleftBraceTokens[leftBraceTokens.length - 1],\n\t\t\t\t\t\trightBraceToken,\n\t\t\t\t\t\t1\n\t\t\t\t\t);\n\n\t\t\t\t\tif (node.source) {\n\t\t\t\t\t\tconst [fromToken, ...tokens] = sourceCode.getTokensBetween(\n\t\t\t\t\t\t\trightBraceToken,\n\t\t\t\t\t\t\tnode.source\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\toffsets.setOffsetToken(fromToken, 0, exportToken);\n\t\t\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t\t\t[...tokens, sourceCode.getFirstToken(node.source)],\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\tfromToken\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// assertions\n\t\t\t\t\t\tconst lastToken = sourceCode.getLastToken(node, {\n\t\t\t\t\t\t\tfilter: isNotSemicolonToken,\n\t\t\t\t\t\t\tincludeComments: false\n\t\t\t\t\t\t})!;\n\t\t\t\t\t\tconst assertionTokens = sourceCode.getTokensBetween(node.source, lastToken);\n\t\t\t\t\t\tif (assertionTokens.length) {\n\t\t\t\t\t\t\tconst assertToken = assertionTokens.shift()!;\n\t\t\t\t\t\t\toffsets.setOffsetToken(assertToken, 0, exportToken);\n\t\t\t\t\t\t\tconst assertionOpen = assertionTokens.shift();\n\t\t\t\t\t\t\tif (assertionOpen) {\n\t\t\t\t\t\t\t\toffsets.setOffsetToken(assertionOpen, 1, assertToken);\n\t\t\t\t\t\t\t\toffsets.setOffsetElementList(assertionTokens, assertionOpen, lastToken, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// maybe babel-eslint\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tExportSpecifier(node: TSESTree.ExportSpecifier | TSESTree.ImportSpecifier) {\n\t\t\tconst tokens = sourceCode.getTokens(node);\n\t\t\tlet firstToken = tokens.shift()!;\n\t\t\tif (firstToken.value === 'type') {\n\t\t\t\tconst typeToken = firstToken;\n\t\t\t\tfirstToken = tokens.shift()!;\n\t\t\t\toffsets.setOffsetToken(firstToken, 0, typeToken);\n\t\t\t}\n\t\t\toffsets.setOffsetToken(tokens, 1, firstToken);\n\t\t},\n\t\tForInStatement(node: TSESTree.ForInStatement | TSESTree.ForOfStatement) {\n\t\t\tconst forToken = sourceCode.getFirstToken(node);\n\t\t\tconst awaitToken =\n\t\t\t\t(node.type === 'ForOfStatement' && node.await && sourceCode.getTokenAfter(forToken)) ||\n\t\t\t\tnull;\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(awaitToken || forToken)!;\n\t\t\tconst leftToken = sourceCode.getFirstToken(node.left);\n\t\t\tconst inOrOfToken = sourceCode.getTokenAfter(node.left, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst rightToken = sourceCode.getTokenAfter(inOrOfToken);\n\t\t\tconst rightParenToken = sourceCode.getTokenBefore(node.body, {\n\t\t\t\tfilter: isNotOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\n\t\t\tif (awaitToken != null) {\n\t\t\t\toffsets.setOffsetToken(awaitToken, 0, forToken);\n\t\t\t}\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, forToken);\n\t\t\toffsets.setOffsetToken(leftToken, 1, leftParenToken);\n\t\t\toffsets.setOffsetToken([inOrOfToken, rightToken], 1, leftToken);\n\t\t\toffsets.setOffsetToken(rightParenToken, 0, leftParenToken);\n\n\t\t\tconst bodyFirstToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyFirstToken, isOpeningBraceToken(bodyFirstToken) ? 0 : 1, forToken);\n\t\t},\n\t\tForOfStatement(node: TSESTree.ForOfStatement) {\n\t\t\tvisitor.ForInStatement(node);\n\t\t},\n\t\tForStatement(node: TSESTree.ForStatement) {\n\t\t\tconst forToken = sourceCode.getFirstToken(node);\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(forToken)!;\n\t\t\tconst rightParenToken = sourceCode.getTokenBefore(node.body, {\n\t\t\t\tfilter: isNotOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, forToken);\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\t[node.init, node.test, node.update],\n\t\t\t\tleftParenToken,\n\t\t\t\trightParenToken,\n\t\t\t\t1\n\t\t\t);\n\n\t\t\tconst bodyFirstToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyFirstToken, isOpeningBraceToken(bodyFirstToken) ? 0 : 1, forToken);\n\t\t},\n\t\tFunctionDeclaration(node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\n\t\t\tconst leftParenToken = sourceCode.getTokenBefore(\n\t\t\t\tnode.params[0] ||\n\t\t\t\t\t(node as TSESTree.FunctionExpression).returnType ||\n\t\t\t\t\tsourceCode.getTokenBefore(node.body),\n\t\t\t\t{\n\t\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t}\n\t\t\t)!;\n\t\t\tlet bodyBaseToken: AST.Token | null = null;\n\t\t\tif (firstToken.type === 'Punctuator') {\n\t\t\t\t// method\n\t\t\t\tbodyBaseToken = sourceCode.getFirstToken(getParent(node)!);\n\t\t\t} else {\n\t\t\t\tlet tokenOffset = 0;\n\t\t\t\tfor (const token of sourceCode.getTokensBetween(firstToken, leftParenToken)) {\n\t\t\t\t\tif (token.value === '<') {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (token.value === '*' || (node.id && token.range[0] === node.id.range[0])) {\n\t\t\t\t\t\ttokenOffset = 1;\n\t\t\t\t\t}\n\t\t\t\t\toffsets.setOffsetToken(token, tokenOffset, firstToken);\n\t\t\t\t}\n\n\t\t\t\tbodyBaseToken = firstToken;\n\t\t\t}\n\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.params[node.params.length - 1] || leftParenToken,\n\t\t\t\t{ filter: isClosingParenToken, includeComments: false }\n\t\t\t)!;\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, bodyBaseToken);\n\t\t\toffsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1);\n\n\t\t\tconst bodyToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyToken, 0, bodyBaseToken);\n\t\t},\n\t\tFunctionExpression(node: TSESTree.FunctionExpression) {\n\t\t\tvisitor.FunctionDeclaration(node);\n\t\t},\n\t\tIfStatement(node: TSESTree.IfStatement) {\n\t\t\tconst [ifToken, ifLeftParenToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\tconst ifRightParenToken = sourceCode.getTokenBefore(node.consequent, {\n\t\t\t\tfilter: isClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\n\t\t\toffsets.setOffsetToken(ifLeftParenToken, 1, ifToken);\n\t\t\toffsets.setOffsetToken(ifRightParenToken, 0, ifLeftParenToken);\n\n\t\t\tconst consequentFirstToken = sourceCode.getFirstToken(node.consequent);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\tconsequentFirstToken,\n\t\t\t\tisOpeningBraceToken(consequentFirstToken) ? 0 : 1,\n\t\t\t\tifToken\n\t\t\t);\n\n\t\t\tif (node.alternate != null) {\n\t\t\t\tconst elseToken = sourceCode.getTokenAfter(node.consequent, {\n\t\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t})!;\n\n\t\t\t\toffsets.setOffsetToken(elseToken, 0, ifToken);\n\n\t\t\t\tconst alternateFirstToken = sourceCode.getFirstToken(node.alternate);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\talternateFirstToken,\n\t\t\t\t\tisOpeningBraceToken(alternateFirstToken) ? 0 : 1,\n\t\t\t\t\telseToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tImportDeclaration(node: TSESTree.ImportDeclaration) {\n\t\t\tconst importToken = sourceCode.getFirstToken(node);\n\t\t\tconst tokens = sourceCode.getTokensBetween(importToken, node.source);\n\t\t\tconst fromIndex = tokens.map((t) => t.value).lastIndexOf('from');\n\t\t\tconst { fromToken, beforeTokens, afterTokens } =\n\t\t\t\tfromIndex >= 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tfromToken: tokens[fromIndex],\n\t\t\t\t\t\t\tbeforeTokens: tokens.slice(0, fromIndex),\n\t\t\t\t\t\t\tafterTokens: [...tokens.slice(fromIndex + 1), sourceCode.getFirstToken(node.source)]\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tfromToken: null,\n\t\t\t\t\t\t\tbeforeTokens: [...tokens, sourceCode.getFirstToken(node.source)],\n\t\t\t\t\t\t\tafterTokens: []\n\t\t\t\t\t\t};\n\n\t\t\tconst namedSpecifiers: TSESTree.ImportSpecifier[] = [];\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tif (specifier.type === 'ImportSpecifier') {\n\t\t\t\t\tnamedSpecifiers.push(specifier);\n\t\t\t\t} else {\n\t\t\t\t\tconst removeTokens = sourceCode.getTokens(specifier);\n\t\t\t\t\tremoveTokens.shift();\n\t\t\t\t\tfor (const token of removeTokens) {\n\t\t\t\t\t\tconst i = beforeTokens.indexOf(token);\n\t\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\t\tbeforeTokens.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (namedSpecifiers.length) {\n\t\t\t\tconst leftBrace = sourceCode.getTokenBefore(namedSpecifiers[0])!;\n\t\t\t\tconst rightBrace = sourceCode.getTokenAfter(namedSpecifiers[namedSpecifiers.length - 1], {\n\t\t\t\t\tfilter: isClosingBraceToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t})!;\n\t\t\t\toffsets.setOffsetElementList(namedSpecifiers, leftBrace, rightBrace, 1);\n\t\t\t\tfor (const token of [...sourceCode.getTokensBetween(leftBrace, rightBrace), rightBrace]) {\n\t\t\t\t\tconst i = beforeTokens.indexOf(token);\n\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\tbeforeTokens.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (beforeTokens.every((t) => isOpeningBraceToken(t) || isClosingBraceToken(t))) {\n\t\t\t\toffsets.setOffsetToken(beforeTokens, 0, importToken);\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(beforeTokens, 1, importToken);\n\t\t\t}\n\t\t\tif (fromToken) {\n\t\t\t\toffsets.setOffsetToken(fromToken, 0, importToken);\n\t\t\t\toffsets.setOffsetToken(afterTokens, 1, fromToken);\n\t\t\t}\n\n\t\t\t// assertions\n\t\t\tconst lastToken = sourceCode.getLastToken(node, {\n\t\t\t\tfilter: isNotSemicolonToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst assertionTokens = sourceCode.getTokensBetween(node.source, lastToken);\n\t\t\tif (assertionTokens.length) {\n\t\t\t\tconst assertToken = assertionTokens.shift()!;\n\t\t\t\toffsets.setOffsetToken(assertToken, 0, importToken);\n\t\t\t\tconst assertionOpen = assertionTokens.shift();\n\t\t\t\tif (assertionOpen) {\n\t\t\t\t\toffsets.setOffsetToken(assertionOpen, 1, assertToken);\n\t\t\t\t\toffsets.setOffsetElementList(assertionTokens, assertionOpen, lastToken, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tImportExpression(node: TSESTree.ImportExpression) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst rightToken = sourceCode.getLastToken(node);\n\t\t\tconst leftToken = sourceCode.getTokenAfter(firstToken, {\n\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\n\t\t\toffsets.setOffsetToken(leftToken, 1, firstToken);\n\t\t\toffsets.setOffsetElementList([node.source], leftToken, rightToken, 1);\n\t\t},\n\t\tImportNamespaceSpecifier(node: TSESTree.ImportNamespaceSpecifier) {\n\t\t\tconst tokens = sourceCode.getTokens(node);\n\t\t\tconst firstToken = tokens.shift()!;\n\t\t\toffsets.setOffsetToken(tokens, 1, firstToken);\n\t\t},\n\t\tImportSpecifier(node: TSESTree.ImportSpecifier) {\n\t\t\tvisitor.ExportSpecifier(node);\n\t\t},\n\t\tLabeledStatement(node: TSESTree.LabeledStatement | AST.SvelteReactiveStatement) {\n\t\t\tconst labelToken = sourceCode.getFirstToken(node);\n\t\t\tconst colonToken = sourceCode.getTokenAfter(labelToken)!;\n\t\t\tconst bodyToken = sourceCode.getTokenAfter(colonToken);\n\n\t\t\toffsets.setOffsetToken([colonToken, bodyToken], 1, labelToken);\n\t\t},\n\t\tSvelteReactiveStatement(node: AST.SvelteReactiveStatement) {\n\t\t\tvisitor.LabeledStatement(node);\n\t\t},\n\t\tMemberExpression(node: TSESTree.MemberExpression | TSESTree.MetaProperty) {\n\t\t\tconst objectToken = sourceCode.getFirstToken(node);\n\t\t\tif (node.type === 'MemberExpression' && node.computed) {\n\t\t\t\tconst leftBracketToken = sourceCode.getTokenBefore(node.property, {\n\t\t\t\t\tfilter: isOpeningBracketToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t})!;\n\t\t\t\tconst rightBracketToken = sourceCode.getTokenAfter(node.property, {\n\t\t\t\t\tfilter: isClosingBracketToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t});\n\n\t\t\t\tfor (const optionalToken of sourceCode.getTokensBetween(\n\t\t\t\t\tsourceCode.getLastToken(node.object),\n\t\t\t\t\tleftBracketToken,\n\t\t\t\t\t{ filter: isOptionalToken, includeComments: false }\n\t\t\t\t)) {\n\t\t\t\t\toffsets.setOffsetToken(optionalToken, 1, objectToken);\n\t\t\t\t}\n\n\t\t\t\toffsets.setOffsetToken(leftBracketToken, 1, objectToken);\n\t\t\t\toffsets.setOffsetElementList([node.property], leftBracketToken, rightBracketToken, 1);\n\t\t\t} else {\n\t\t\t\tconst dotToken = sourceCode.getTokenBefore(node.property)!;\n\t\t\t\tconst propertyToken = sourceCode.getTokenAfter(dotToken);\n\n\t\t\t\toffsets.setOffsetToken([dotToken, propertyToken], 1, objectToken);\n\t\t\t}\n\t\t},\n\t\tMetaProperty(node: TSESTree.MetaProperty) {\n\t\t\tvisitor.MemberExpression(node);\n\t\t},\n\t\tMethodDefinition(\n\t\t\tnode: TSESTree.MethodDefinition | TSESTree.Property | TSESTree.PropertyDefinition\n\t\t) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst keyTokens = getFirstAndLastTokens(sourceCode, node.key);\n\t\t\tconst prefixTokens = sourceCode.getTokensBetween(firstToken, keyTokens.firstToken);\n\t\t\tif (node.computed) {\n\t\t\t\tprefixTokens.pop(); // pop [\n\t\t\t}\n\t\t\toffsets.setOffsetToken(prefixTokens, 0, firstToken);\n\n\t\t\tlet lastKeyToken: AST.Token | null;\n\t\t\tif (node.computed) {\n\t\t\t\tconst leftBracketToken = sourceCode.getTokenBefore(keyTokens.firstToken)!;\n\t\t\t\tconst rightBracketToken = (lastKeyToken = sourceCode.getTokenAfter(keyTokens.lastToken)!);\n\t\t\t\toffsets.setOffsetToken(leftBracketToken, 0, firstToken);\n\t\t\t\toffsets.setOffsetElementList([node.key], leftBracketToken, rightBracketToken, 1);\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(keyTokens.firstToken, 0, firstToken);\n\t\t\t\tlastKeyToken = keyTokens.lastToken;\n\t\t\t}\n\n\t\t\tif (node.value) {\n\t\t\t\tconst initToken = sourceCode.getFirstToken(node.value);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(lastKeyToken, initToken), initToken],\n\t\t\t\t\t1,\n\t\t\t\t\tlastKeyToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tProperty(node: TSESTree.Property) {\n\t\t\tvisitor.MethodDefinition(node);\n\t\t},\n\t\tNewExpression(node: TSESTree.NewExpression) {\n\t\t\tconst typeArguments =\n\t\t\t\tnode.typeArguments ??\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t(node as any).typeParameters;\n\t\t\tconst newToken = sourceCode.getFirstToken(node);\n\t\t\tconst calleeTokens = getFirstAndLastTokens(sourceCode, node.callee);\n\t\t\toffsets.setOffsetToken(calleeTokens.firstToken, 1, newToken);\n\n\t\t\tif (typeArguments) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, calleeTokens.firstToken);\n\t\t\t}\n\t\t\tconst leftParenBefore = typeArguments || calleeTokens.lastToken;\n\t\t\tif (node.arguments.length || leftParenBefore.range[1] < node.range[1]) {\n\t\t\t\tconst rightParenToken = sourceCode.getLastToken(node);\n\t\t\t\tconst leftParenToken = sourceCode.getTokenAfter(leftParenBefore)!;\n\n\t\t\t\toffsets.setOffsetToken(leftParenToken, 1, calleeTokens.firstToken);\n\t\t\t\toffsets.setOffsetElementList(node.arguments, leftParenToken, rightParenToken, 1);\n\t\t\t}\n\t\t},\n\t\tObjectExpression(node: TSESTree.ObjectExpression | TSESTree.ObjectPattern) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst rightToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.properties[node.properties.length - 1] || firstToken,\n\t\t\t\t{ filter: isClosingBraceToken, includeComments: false }\n\t\t\t);\n\t\t\toffsets.setOffsetElementList(node.properties, firstToken, rightToken, 1);\n\t\t},\n\t\tObjectPattern(node: TSESTree.ObjectPattern) {\n\t\t\tvisitor.ObjectExpression(node);\n\t\t},\n\t\tPropertyDefinition(node: TSESTree.PropertyDefinition) {\n\t\t\tvisitor.MethodDefinition(node);\n\t\t},\n\t\tReturnStatement(node: TSESTree.ReturnStatement | TSESTree.ThrowStatement) {\n\t\t\tif (node.argument) {\n\t\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst nextToken = sourceCode.getTokenAfter(firstToken);\n\n\t\t\t\toffsets.setOffsetToken(nextToken, 1, firstToken);\n\t\t\t}\n\t\t},\n\t\tThrowStatement(node: TSESTree.ThrowStatement) {\n\t\t\tvisitor.ReturnStatement(node);\n\t\t},\n\t\tSequenceExpression(node: TSESTree.SequenceExpression) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\toffsets.setOffsetElementList(node.expressions, firstToken, null, 0);\n\t\t},\n\t\tSwitchCase(node: TSESTree.SwitchCase) {\n\t\t\tconst caseToken = sourceCode.getFirstToken(node);\n\t\t\tif (node.test != null) {\n\t\t\t\tconst testTokens = getFirstAndLastTokens(sourceCode, node.test);\n\t\t\t\tconst colonToken = sourceCode.getTokenAfter(testTokens.lastToken);\n\t\t\t\toffsets.setOffsetToken([testTokens.firstToken, colonToken], 1, caseToken);\n\t\t\t} else {\n\t\t\t\tconst colonToken = sourceCode.getTokenAfter(caseToken);\n\t\t\t\toffsets.setOffsetToken(colonToken, 1, caseToken);\n\t\t\t}\n\n\t\t\tif (node.consequent.length === 1 && node.consequent[0].type === 'BlockStatement') {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.consequent[0]), 0, caseToken);\n\t\t\t} else {\n\t\t\t\tfor (const statement of node.consequent) {\n\t\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t\tgetFirstAndLastTokens(sourceCode, statement).firstToken,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tcaseToken\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tSwitchStatement(node: TSESTree.SwitchStatement) {\n\t\t\tconst switchToken = sourceCode.getFirstToken(node);\n\t\t\tconst { firstToken: leftParenToken, lastToken: rightParenToken } = getFirstAndLastTokens(\n\t\t\t\tsourceCode,\n\t\t\t\tnode.discriminant\n\t\t\t);\n\t\t\tconst leftBraceToken = sourceCode.getTokenAfter(rightParenToken)!;\n\t\t\tconst rightBraceToken = sourceCode.getLastToken(node);\n\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, switchToken);\n\t\t\toffsets.setOffsetElementList([node.discriminant], leftParenToken, rightParenToken, 1);\n\t\t\toffsets.setOffsetToken(leftBraceToken, 0, switchToken);\n\t\t\toffsets.setOffsetElementList(node.cases, leftBraceToken, rightBraceToken, options.switchCase);\n\t\t},\n\t\tTaggedTemplateExpression(node: TSESTree.TaggedTemplateExpression) {\n\t\t\tconst tagTokens = getFirstAndLastTokens(sourceCode, node.tag);\n\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.quasi), 1, tagTokens.firstToken);\n\t\t},\n\t\tTemplateLiteral(node: TSESTree.TemplateLiteral) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst quasiTokens = node.quasis.slice(1).map((n) => sourceCode.getFirstToken(n));\n\t\t\tconst expressionToken = node.quasis.slice(0, -1).map((n) => sourceCode.getTokenAfter(n));\n\n\t\t\toffsets.setOffsetToken(quasiTokens, 0, firstToken);\n\t\t\toffsets.setOffsetToken(expressionToken, 1, firstToken);\n\t\t},\n\t\tTryStatement(node: TSESTree.TryStatement) {\n\t\t\tconst tryToken = sourceCode.getFirstToken(node);\n\t\t\tconst tryBlockToken = sourceCode.getFirstToken(node.block);\n\n\t\t\toffsets.setOffsetToken(tryBlockToken, 0, tryToken);\n\n\t\t\tif (node.handler != null) {\n\t\t\t\tconst catchToken = sourceCode.getFirstToken(node.handler);\n\t\t\t\toffsets.setOffsetToken(catchToken, 0, tryToken);\n\t\t\t}\n\n\t\t\tif (node.finalizer != null) {\n\t\t\t\tconst finallyToken = sourceCode.getTokenBefore(node.finalizer);\n\t\t\t\tconst finallyBlockToken = sourceCode.getFirstToken(node.finalizer);\n\t\t\t\toffsets.setOffsetToken([finallyToken, finallyBlockToken], 0, tryToken);\n\t\t\t}\n\t\t},\n\t\tUpdateExpression(node: TSESTree.UpdateExpression) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst nextToken = sourceCode.getTokenAfter(firstToken);\n\t\t\toffsets.setOffsetToken(nextToken, 1, firstToken);\n\t\t},\n\t\tVariableDeclaration(node: TSESTree.VariableDeclaration) {\n\t\t\toffsets.setOffsetElementList(node.declarations, sourceCode.getFirstToken(node), null, 1);\n\t\t},\n\t\tVariableDeclarator(node: TSESTree.VariableDeclarator) {\n\t\t\tif (node.init != null) {\n\t\t\t\tconst idToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst eqToken = sourceCode.getTokenAfter(node.id)!;\n\t\t\t\tconst initToken = sourceCode.getTokenAfter(eqToken);\n\n\t\t\t\toffsets.setOffsetToken([eqToken, initToken], 1, idToken);\n\t\t\t}\n\t\t},\n\t\tWhileStatement(node: TSESTree.WhileStatement | TSESTree.WithStatement) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(firstToken)!;\n\t\t\tconst rightParenToken = sourceCode.getTokenBefore(node.body, {\n\t\t\t\tfilter: isClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, firstToken);\n\t\t\toffsets.setOffsetToken(rightParenToken, 0, leftParenToken);\n\n\t\t\tconst bodyFirstToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\tbodyFirstToken,\n\t\t\t\tisOpeningBraceToken(bodyFirstToken) ? 0 : 1,\n\t\t\t\tfirstToken\n\t\t\t);\n\t\t},\n\t\tWithStatement(node: TSESTree.WithStatement) {\n\t\t\tvisitor.WhileStatement(node);\n\t\t},\n\t\tYieldExpression(node: TSESTree.YieldExpression) {\n\t\t\tif (node.argument != null) {\n\t\t\t\tconst [yieldToken, secondToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\t\tcount: 2,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t});\n\n\t\t\t\toffsets.setOffsetToken(secondToken, 1, yieldToken);\n\t\t\t\tif (node.delegate) {\n\t\t\t\t\toffsets.setOffsetToken(sourceCode.getTokenAfter(secondToken), 1, yieldToken);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// ----------------------------------------------------------------------\n\t\t// SINGLE TOKEN NODES\n\t\t// ----------------------------------------------------------------------\n\t\tDebuggerStatement() {\n\t\t\t// noop\n\t\t},\n\t\tIdentifier() {\n\t\t\t// noop\n\t\t},\n\t\tImportDefaultSpecifier() {\n\t\t\t// noop\n\t\t},\n\t\tLiteral() {\n\t\t\t// noop\n\t\t},\n\t\tPrivateIdentifier() {\n\t\t\t// noop\n\t\t},\n\t\tSuper() {\n\t\t\t// noop\n\t\t},\n\t\tTemplateElement() {\n\t\t\t// noop\n\t\t},\n\t\tThisExpression() {\n\t\t\t// noop\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// WRAPPER NODES\n\t\t// ----------------------------------------------------------------------\n\t\tExpressionStatement() {\n\t\t\t// noop\n\t\t},\n\t\tChainExpression() {\n\t\t\t// noop\n\t\t},\n\t\tEmptyStatement() {\n\t\t\t// noop\n\t\t}\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\tconst commonVisitor: any = {\n\t\t':statement, PropertyDefinition'(node: TSESTree.Statement) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst lastToken = sourceCode.getLastToken(node);\n\t\t\tif (isSemicolonToken(lastToken) && firstToken !== lastToken) {\n\t\t\t\tconst next = sourceCode.getTokenAfter(lastToken);\n\t\t\t\tif (!next || lastToken.loc.start.line < next.loc.start.line) {\n\t\t\t\t\t// End of line semicolons\n\t\t\t\t\toffsets.setOffsetToken(lastToken, 0, firstToken);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t':expression'(node: TSESTree.Expression) {\n\t\t\t// Proc parentheses.\n\t\t\tlet leftToken = sourceCode.getTokenBefore(node);\n\t\t\tlet rightToken = sourceCode.getTokenAfter(node);\n\t\t\tlet firstToken = sourceCode.getFirstToken(node);\n\n\t\t\twhile (\n\t\t\t\tleftToken &&\n\t\t\t\tisOpeningParenToken(leftToken) &&\n\t\t\t\trightToken &&\n\t\t\t\tisClosingParenToken(rightToken)\n\t\t\t) {\n\t\t\t\toffsets.setOffsetToken(firstToken, 1, leftToken);\n\t\t\t\toffsets.setOffsetToken(rightToken, 0, leftToken);\n\n\t\t\t\tfirstToken = leftToken;\n\t\t\t\tleftToken = sourceCode.getTokenBefore(leftToken);\n\t\t\t\trightToken = sourceCode.getTokenAfter(rightToken);\n\t\t\t}\n\t\t}\n\t};\n\tconst v: NodeListener = visitor;\n\n\treturn {\n\t\t...v,\n\t\t...commonVisitor\n\t};\n}\n\n/**\n * Checks whether given text is known button type\n */\nfunction isOptionalToken(token: { type: string; value: string }): boolean {\n\treturn token.type === 'Punctuator' && token.value === '?.';\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/index.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { ASTNode, RuleContext, RuleListener } from '../../types.js';\nimport * as SV from './svelte.js';\nimport * as ES from './es.js';\nimport * as TS from './ts.js';\nimport { isNotWhitespace } from './ast.js';\nimport { isCommentToken } from '@eslint-community/eslint-utils';\nimport type { AnyToken, IndentOptions } from './commons.js';\nimport type { OffsetCalculator } from './offset-context.js';\nimport { OffsetContext } from './offset-context.js';\n\ntype IndentUserOptions = {\n\tindent?: number | 'tab';\n\tindentScript?: boolean;\n\tswitchCase?: number;\n\talignAttributesVertically?: boolean;\n\tignoredNodes?: string[];\n};\n\n/**\n * Normalize options.\n * @param type The type of indentation.\n * @param options Other options.\n * @param defaultOptions The default value of options.\n * @returns Normalized options.\n */\nfunction parseOptions(\n\toptions: IndentUserOptions,\n\tdefaultOptions: Partial<IndentOptions>\n): IndentOptions {\n\tconst ret: IndentOptions = {\n\t\tindentChar: ' ',\n\t\tindentScript: true,\n\t\tindentSize: 2,\n\t\tswitchCase: 1,\n\t\talignAttributesVertically: false,\n\t\tignoredNodes: [],\n\t\t...defaultOptions\n\t};\n\n\tif (Number.isSafeInteger(options.indent)) {\n\t\tret.indentSize = Number(options.indent);\n\t} else if (options.indent === 'tab') {\n\t\tret.indentChar = '\\t';\n\t\tret.indentSize = 1;\n\t}\n\n\tif (typeof options.indentScript === 'boolean') {\n\t\tret.indentScript = options.indentScript;\n\t}\n\n\tif (options.switchCase != null && Number.isSafeInteger(options.switchCase)) {\n\t\tret.switchCase = options.switchCase;\n\t}\n\n\tif (options.ignoredNodes != null) {\n\t\tret.ignoredNodes = options.ignoredNodes;\n\t}\n\n\tif (options.alignAttributesVertically && ret.indentChar === ' ') {\n\t\tret.alignAttributesVertically = true;\n\t} else if (ret.indentChar !== ' ') {\n\t\tret.alignAttributesVertically = false;\n\t}\n\n\treturn ret;\n}\n\n/**\n * Creates AST event handlers for html-indent.\n *\n * @param context The rule context.\n * @param defaultOptions The default value of options.\n * @returns AST event handlers.\n */\nexport function defineVisitor(\n\tcontext: RuleContext,\n\tdefaultOptions: Partial<IndentOptions>\n): RuleListener {\n\tif (!context.filename.endsWith('.svelte')) return {};\n\n\tconst options = parseOptions(context.options[0] || {}, defaultOptions);\n\tconst sourceCode = context.sourceCode;\n\tconst offsets = new OffsetContext({ sourceCode, options });\n\n\t/**\n\t * Get the text of the indentation part of the given location.\n\t */\n\tfunction getIndentText({ line, column }: { line: number; column: number }) {\n\t\treturn sourceCode.lines[line - 1].slice(0, column);\n\t}\n\n\t/**\n\t * Validate the given token with the pre-calculated expected indentation.\n\t */\n\tfunction validateToken(token: AnyToken, expectedIndent: number) {\n\t\tconst line = token.loc.start.line;\n\t\tconst indentText = getIndentText(token.loc.start);\n\n\t\t// `indentText` contains non-whitespace characters.\n\t\tif (indentText.trim() !== '') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst actualIndent = token.loc.start.column;\n\n\t\tconst mismatchCharIndexes: number[] = [];\n\t\tfor (let i = 0; i < indentText.length; ++i) {\n\t\t\tif (indentText[i] !== options.indentChar) {\n\t\t\t\tmismatchCharIndexes.push(i);\n\t\t\t}\n\t\t}\n\t\tif (actualIndent !== expectedIndent) {\n\t\t\tconst loc = {\n\t\t\t\tstart: { line, column: 0 },\n\t\t\t\tend: { line, column: actualIndent }\n\t\t\t};\n\t\t\tcontext.report({\n\t\t\t\tloc,\n\t\t\t\tmessageId: 'unexpectedIndentation',\n\t\t\t\tdata: {\n\t\t\t\t\texpectedIndent: String(expectedIndent),\n\t\t\t\t\tactualIndent: String(actualIndent),\n\t\t\t\t\texpectedUnit: options.indentChar === '\\t' ? 'tab' : 'space',\n\t\t\t\t\tactualUnit: mismatchCharIndexes.length\n\t\t\t\t\t\t? 'whitespace'\n\t\t\t\t\t\t: options.indentChar === '\\t'\n\t\t\t\t\t\t\t? 'tab'\n\t\t\t\t\t\t\t: 'space',\n\t\t\t\t\texpectedIndentPlural: expectedIndent === 1 ? '' : 's',\n\t\t\t\t\tactualIndentPlural: actualIndent === 1 ? '' : 's'\n\t\t\t\t},\n\t\t\t\tfix(fixer) {\n\t\t\t\t\treturn fixer.replaceTextRange(\n\t\t\t\t\t\t[sourceCode.getIndexFromLoc(loc.start), sourceCode.getIndexFromLoc(loc.end)],\n\t\t\t\t\t\toptions.indentChar.repeat(expectedIndent)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const i of mismatchCharIndexes) {\n\t\t\tconst loc = {\n\t\t\t\tstart: { line, column: i },\n\t\t\t\tend: { line, column: i + 1 }\n\t\t\t};\n\t\t\tcontext.report({\n\t\t\t\tloc,\n\t\t\t\tmessageId: 'unexpectedChar',\n\t\t\t\tdata: {\n\t\t\t\t\texpected: JSON.stringify(options.indentChar),\n\t\t\t\t\tactual: JSON.stringify(indentText[i])\n\t\t\t\t},\n\t\t\t\tfix(fixer) {\n\t\t\t\t\treturn fixer.replaceTextRange(\n\t\t\t\t\t\t[sourceCode.getIndexFromLoc(loc.start), sourceCode.getIndexFromLoc(loc.end)],\n\t\t\t\t\t\toptions.indentChar\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Process line tokens */\n\tfunction processLine(\n\t\ttokens: AnyToken[],\n\t\tprevComments: AST.Comment[],\n\t\tprevToken: AnyToken | null,\n\t\tcalculator: OffsetCalculator\n\t) {\n\t\tconst firstToken = tokens[0];\n\t\tconst actualIndent = firstToken.loc.start.column;\n\t\tconst expectedIndent = calculator.getExpectedIndentFromTokens(tokens);\n\t\tif (expectedIndent == null) {\n\t\t\tcalculator.saveExpectedIndent(tokens, actualIndent);\n\t\t\treturn;\n\t\t}\n\t\tcalculator.saveExpectedIndent(\n\t\t\ttokens,\n\t\t\tMath.min(\n\t\t\t\t...tokens\n\t\t\t\t\t.map((t) => calculator.getExpectedIndentFromToken(t))\n\t\t\t\t\t.filter((i): i is number => i != null)\n\t\t\t)\n\t\t);\n\n\t\tlet prev = prevToken;\n\t\tif (prevComments.length) {\n\t\t\tif (prev && prev.loc.end.line < prevComments[0].loc.start.line) {\n\t\t\t\tvalidateToken(prevComments[0], expectedIndent);\n\t\t\t}\n\t\t\tprev = prevComments[prevComments.length - 1];\n\t\t}\n\t\tif (prev && prev.loc.end.line < tokens[0].loc.start.line) {\n\t\t\tvalidateToken(tokens[0], expectedIndent);\n\t\t}\n\t}\n\n\tconst indentContext = {\n\t\tsourceCode,\n\t\toptions,\n\t\toffsets\n\t};\n\tconst nodesVisitor = {\n\t\t...ES.defineVisitor(indentContext),\n\t\t...SV.defineVisitor(indentContext),\n\t\t...TS.defineVisitor(indentContext)\n\t};\n\tconst knownNodes = new Set(Object.keys(nodesVisitor));\n\n\t/**\n\t * Build a visitor combined with a visitor to handle the given ignore selector.\n\t */\n\tfunction compositingIgnoresVisitor(visitor: RuleListener): RuleListener {\n\t\tfor (const ignoreSelector of options.ignoredNodes) {\n\t\t\tconst key = `${ignoreSelector}:exit`;\n\n\t\t\tif (visitor[key]) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\t\t\t\tconst handler = visitor[key] as any;\n\t\t\t\tvisitor[key] = function (node: never, ...args: never[]) {\n\t\t\t\t\tconst ret = handler.call(this, node, ...args);\n\t\t\t\t\toffsets.ignore(node);\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tvisitor[key] = (node: never) => offsets.ignore(node);\n\t\t\t}\n\t\t}\n\n\t\treturn visitor;\n\t}\n\n\treturn compositingIgnoresVisitor({\n\t\t...nodesVisitor,\n\t\t'*:exit'(node: ASTNode) {\n\t\t\t// Ignore tokens of unknown nodes.\n\t\t\tif (!knownNodes.has(node.type)) {\n\t\t\t\t// debugger\n\t\t\t\t// console.log(node.type, node.loc!.start.line)\n\t\t\t\toffsets.ignore(node);\n\t\t\t}\n\t\t},\n\t\t'Program:exit'(node: AST.SvelteProgram) {\n\t\t\tconst calculator = offsets.getOffsetCalculator();\n\n\t\t\tlet prevToken: AnyToken | null = null;\n\t\t\tfor (const { prevComments, tokens } of iterateLineTokens()) {\n\t\t\t\tprocessLine(tokens, prevComments, prevToken, calculator);\n\t\t\t\tprevToken = tokens[tokens.length - 1];\n\t\t\t}\n\n\t\t\t/** Iterate line tokens */\n\t\t\tfunction* iterateLineTokens() {\n\t\t\t\tlet line = 0;\n\t\t\t\tlet prevComments: AST.Comment[] = [];\n\t\t\t\tlet bufferTokens: AnyToken[] = [];\n\t\t\t\tfor (const token of sourceCode.getTokens(node, {\n\t\t\t\t\tincludeComments: true,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t})) {\n\t\t\t\t\tconst thisLine = token.loc.start.line;\n\t\t\t\t\tif (line === thisLine || bufferTokens.length === 0) {\n\t\t\t\t\t\tbufferTokens.push(token);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (isCommentToken(bufferTokens[0]) && bufferTokens.every(isCommentToken)) {\n\t\t\t\t\t\t\tprevComments.push(bufferTokens[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\tprevComments,\n\t\t\t\t\t\t\t\ttokens: bufferTokens\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tprevComments = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbufferTokens = [token];\n\t\t\t\t\t}\n\t\t\t\t\tline = thisLine;\n\t\t\t\t}\n\t\t\t\tif (bufferTokens.length && !bufferTokens.every(isCommentToken)) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tprevComments,\n\t\t\t\t\t\ttokens: bufferTokens\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/offset-context.ts",
    "content": "import type { ASTNode, SourceCode } from '../../types.js';\nimport { isNotWhitespace } from './ast.js';\nimport type { AnyToken, IndentOptions, MaybeNode } from './commons.js';\nimport { isBeginningOfLine } from './commons.js';\nimport { getFirstAndLastTokens } from './commons.js';\nconst enum OffsetDataType {\n\tnormal,\n\talign,\n\tstart\n}\ntype OffsetData =\n\t| {\n\t\t\ttype: OffsetDataType.normal;\n\t\t\tbase: number;\n\t\t\toffset: number;\n\t\t\texpectedIndent?: number;\n\t  }\n\t| {\n\t\t\ttype: OffsetDataType.align;\n\t\t\tbase: number;\n\t\t\talignIndent: number;\n\t\t\texpectedIndent?: number;\n\t  }\n\t| {\n\t\t\ttype: OffsetDataType.start;\n\t\t\toffset: number;\n\t\t\texpectedIndent?: number;\n\t  };\n\nexport class OffsetContext {\n\tprivate readonly sourceCode: SourceCode;\n\n\tprivate readonly options: IndentOptions;\n\n\tprivate readonly offsets = new Map<number, OffsetData>();\n\n\tprivate readonly ignoreRanges = new Map<number, number>();\n\n\tpublic constructor(arg: { sourceCode: SourceCode; options: IndentOptions }) {\n\t\tthis.sourceCode = arg.sourceCode;\n\t\tthis.options = arg.options;\n\t}\n\n\t/**\n\t * Set offset to the given index.\n\t */\n\tpublic setOffsetIndex(index: number, offset: number, base: number): void {\n\t\tif (index === base) {\n\t\t\treturn;\n\t\t}\n\t\tthis.offsets.set(index, {\n\t\t\ttype: OffsetDataType.normal,\n\t\t\tbase,\n\t\t\toffset\n\t\t});\n\t}\n\n\t/**\n\t * Set align indent to the given index.\n\t */\n\tprivate setAlignIndent(index: number, alignIndent: number, base: number): void {\n\t\tif (index === base) {\n\t\t\treturn;\n\t\t}\n\t\tthis.offsets.set(index, {\n\t\t\ttype: OffsetDataType.align,\n\t\t\tbase,\n\t\t\talignIndent\n\t\t});\n\t}\n\n\t/**\n\t * Set offset to the given tokens.\n\t */\n\tpublic setOffsetToken(\n\t\ttoken: AnyToken | null | undefined | (AnyToken | null | undefined)[],\n\t\toffset: number,\n\t\tbaseToken: AnyToken\n\t): void {\n\t\tif (!token) {\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(token)) {\n\t\t\tfor (const t of token) {\n\t\t\t\tthis.setOffsetToken(t, offset, baseToken);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.setOffsetIndex(token.range[0], offset, baseToken.range[0]);\n\t}\n\n\t/**\n\t * Copy offset to the given index from srcIndex.\n\t */\n\tpublic copyOffset(index: number, srcIndex: number): void {\n\t\tconst offsetData = this.offsets.get(srcIndex);\n\t\tif (!offsetData) {\n\t\t\treturn;\n\t\t}\n\t\tif (offsetData.type === OffsetDataType.start) {\n\t\t\tthis.setStartOffsetIndex(index, offsetData.offset);\n\t\t} else if (offsetData.type === OffsetDataType.align) {\n\t\t\tthis.setAlignIndent(index, offsetData.alignIndent, offsetData.base);\n\t\t} else {\n\t\t\tthis.setOffsetIndex(index, offsetData.offset, offsetData.base);\n\t\t}\n\t}\n\n\t/**\n\t * Set start offset to the given index.\n\t */\n\tpublic setStartOffsetIndex(index: number, offset: number): void {\n\t\tthis.offsets.set(index, {\n\t\t\ttype: OffsetDataType.start,\n\t\t\toffset\n\t\t});\n\t}\n\n\t/**\n\t * Set start offset to the given token.\n\t */\n\tpublic setStartOffsetToken(\n\t\ttoken: AnyToken | null | undefined | (AnyToken | null | undefined)[],\n\t\toffset: number\n\t): void {\n\t\tif (!token) {\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(token)) {\n\t\t\tfor (const t of token) {\n\t\t\t\tthis.setStartOffsetToken(t, offset);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.setStartOffsetIndex(token.range[0], offset);\n\t}\n\n\tpublic setOffsetElementList(\n\t\tnodes: (ASTNode | AnyToken | MaybeNode | null | undefined)[],\n\t\tbaseNodeOrToken: ASTNode | AnyToken | MaybeNode,\n\t\tlastNodeOrToken: ASTNode | AnyToken | MaybeNode | null,\n\t\toffset: number,\n\t\talign?: boolean\n\t): void {\n\t\tlet setIndent: (token: AnyToken, baseToken: AnyToken) => void = (token, baseToken) =>\n\t\t\tthis.setOffsetToken(token, offset, baseToken);\n\t\tif (align) {\n\t\t\tfor (const n of nodes) {\n\t\t\t\tif (n) {\n\t\t\t\t\tif (!isBeginningOfLine(this.sourceCode, n)) {\n\t\t\t\t\t\tconst startLoc = n.loc.start;\n\t\t\t\t\t\tconst alignIndent =\n\t\t\t\t\t\t\tstartLoc.column - /^\\s*/u.exec(this.sourceCode.lines[startLoc.line - 1])![0].length;\n\t\t\t\t\t\tsetIndent = (token, baseToken) =>\n\t\t\t\t\t\t\tthis.setAlignIndent(token.range[0], alignIndent, baseToken.range[0]);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._setOffsetElementList(nodes, baseNodeOrToken, lastNodeOrToken, setIndent);\n\t}\n\n\tprivate _setOffsetElementList(\n\t\tnodes: (ASTNode | AnyToken | MaybeNode | null | undefined)[],\n\t\tbaseNodeOrToken: ASTNode | AnyToken | MaybeNode,\n\t\tlastNodeOrToken: ASTNode | AnyToken | MaybeNode | null,\n\t\tsetIndent: (token: AnyToken, baseToken: AnyToken) => void\n\t): void {\n\t\tconst baseToken = this.sourceCode.getFirstToken(baseNodeOrToken);\n\n\t\tlet prevToken = this.sourceCode.getLastToken(baseNodeOrToken);\n\t\tfor (const node of nodes) {\n\t\t\tif (node == null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst elementTokens = getFirstAndLastTokens(this.sourceCode, node, prevToken.range[1]);\n\n\t\t\tlet t: AnyToken | null = prevToken;\n\t\t\twhile (\n\t\t\t\t(t = this.sourceCode.getTokenAfter(t, {\n\t\t\t\t\tincludeComments: true,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t})) != null &&\n\t\t\t\tt.range[1] <= elementTokens.firstToken.range[0]\n\t\t\t) {\n\t\t\t\tsetIndent(t, baseToken);\n\t\t\t}\n\t\t\tsetIndent(elementTokens.firstToken, baseToken);\n\n\t\t\tprevToken = elementTokens.lastToken;\n\t\t}\n\n\t\tif (lastNodeOrToken) {\n\t\t\tconst lastToken = this.sourceCode.getFirstToken(lastNodeOrToken);\n\t\t\tlet t: AnyToken | null = prevToken;\n\t\t\twhile (\n\t\t\t\t(t = this.sourceCode.getTokenAfter(t, {\n\t\t\t\t\tincludeComments: true,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t})) != null &&\n\t\t\t\tt.range[1] <= lastToken.range[0]\n\t\t\t) {\n\t\t\t\tsetIndent(t, baseToken);\n\t\t\t}\n\t\t\tthis.setOffsetToken(lastToken, 0, baseToken);\n\t\t}\n\t}\n\n\t/**\n\t * Ignore range of the given node.\n\t */\n\tpublic ignore(node: ASTNode): void {\n\t\tconst range = node.range;\n\t\tconst n = this.ignoreRanges.get(range[0]) ?? 0;\n\t\tthis.ignoreRanges.set(range[0], Math.max(n, range[1]));\n\t}\n\n\tpublic getOffsetCalculator(): OffsetCalculator {\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define -- ignore\n\t\treturn new OffsetCalculator({\n\t\t\toffsets: this.offsets,\n\t\t\toptions: this.options,\n\t\t\tignoreRanges: [...this.ignoreRanges]\n\t\t});\n\t}\n}\n\nexport class OffsetCalculator {\n\tprivate readonly options: IndentOptions;\n\n\tprivate readonly offsets: Map<number, OffsetData>;\n\n\tprivate readonly ignoreRanges: [number, number][];\n\n\tpublic constructor(arg: {\n\t\toffsets: Map<number, OffsetData>;\n\t\toptions: IndentOptions;\n\t\tignoreRanges: [number, number][];\n\t}) {\n\t\tthis.offsets = arg.offsets;\n\t\tthis.options = arg.options;\n\t\tthis.ignoreRanges = arg.ignoreRanges;\n\t}\n\n\t/**\n\t * Calculate correct indentation of the given index.\n\t */\n\tprivate getExpectedIndentFromIndex(index: number): number | null {\n\t\tconst offsetInfo = this.offsets.get(index);\n\t\tif (offsetInfo == null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (offsetInfo.expectedIndent != null) {\n\t\t\treturn offsetInfo.expectedIndent;\n\t\t}\n\t\tif (offsetInfo.type === OffsetDataType.start) {\n\t\t\treturn offsetInfo.offset * this.options.indentSize;\n\t\t}\n\t\tconst baseIndent = this.getExpectedIndentFromIndex(offsetInfo.base);\n\t\tif (baseIndent == null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (offsetInfo.type === OffsetDataType.align) {\n\t\t\treturn baseIndent + offsetInfo.alignIndent;\n\t\t}\n\t\treturn baseIndent + offsetInfo.offset * this.options.indentSize;\n\t}\n\n\t/**\n\t * Calculate correct indentation of the given token.\n\t */\n\tpublic getExpectedIndentFromToken(token: AnyToken): number | null {\n\t\treturn this.getExpectedIndentFromIndex(token.range[0]);\n\t}\n\n\t/**\n\t * Calculate correct indentation of the line of the given tokens.\n\t */\n\tpublic getExpectedIndentFromTokens(tokens: AnyToken[]): null | number {\n\t\tfor (const token of tokens) {\n\t\t\tconst index = token.range[0];\n\t\t\tif (this.ignoreRanges.some(([f, t]) => f <= index && index < t)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst expectedIndent = this.getExpectedIndentFromIndex(index);\n\t\t\tif (expectedIndent != null) {\n\t\t\t\treturn expectedIndent;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Save expected indent to give tokens */\n\tpublic saveExpectedIndent(tokens: AnyToken[], expectedIndent: number): void {\n\t\tfor (const token of tokens) {\n\t\t\tconst offsetInfo = this.offsets.get(token.range[0]);\n\t\t\tif (offsetInfo == null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toffsetInfo.expectedIndent = offsetInfo.expectedIndent ?? expectedIndent;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { ASTNode } from '../../types.js';\nimport type { SvelteNodeListener } from '../../types-for-node.js';\nimport { isNotWhitespace } from './ast.js';\nimport type { IndentContext } from './commons.js';\nimport { isBeginningOfElement } from './commons.js';\nimport { isBeginningOfLine } from './commons.js';\nimport { getFirstAndLastTokens } from './commons.js';\nimport { isClosingParenToken, isOpeningParenToken } from '@eslint-community/eslint-utils';\n\ntype NodeListener = SvelteNodeListener;\nconst PREFORMATTED_ELEMENT_NAMES = ['pre', 'textarea', 'template'];\n\n/**\n * Creates AST event handlers for svelte nodes.\n *\n * @param context The rule context.\n * @returns AST event handlers.\n */\nexport function defineVisitor(context: IndentContext): NodeListener {\n\tconst { sourceCode, offsets, options } = context;\n\tconst visitor = {\n\t\t// ----------------------------------------------------------------------\n\t\t// ELEMENTS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteScriptElement(node: AST.SvelteScriptElement) {\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.body,\n\t\t\t\tnode.startTag,\n\t\t\t\tnode.endTag,\n\t\t\t\toptions.indentScript ? 1 : 0\n\t\t\t);\n\t\t},\n\t\tSvelteStyleElement(node: AST.SvelteStyleElement) {\n\t\t\tnode.children.forEach((n) => offsets.ignore(n));\n\t\t},\n\t\tSvelteElement(node: AST.SvelteElement) {\n\t\t\tif (node.name.type === 'Identifier' || node.name.type === 'SvelteName') {\n\t\t\t\tif (PREFORMATTED_ELEMENT_NAMES.includes(node.name.name)) {\n\t\t\t\t\tconst startTagToken = sourceCode.getFirstToken(node);\n\t\t\t\t\tconst endTagToken = node.endTag && sourceCode.getFirstToken(node.endTag);\n\t\t\t\t\toffsets.setOffsetToken(endTagToken, 0, startTagToken);\n\t\t\t\t\tnode.children.forEach((n) => offsets.ignore(n));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (node.name.name === 'style') {\n\t\t\t\t\t// Inline style tag\n\t\t\t\t\tnode.children.forEach((n) => offsets.ignore(n));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.endTag) {\n\t\t\t\toffsets.setOffsetElementList(\n\t\t\t\t\tnode.children.filter(isNotEmptyTextNode),\n\t\t\t\t\tnode.startTag,\n\t\t\t\t\tnode.endTag,\n\t\t\t\t\t1\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// TAGS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteStartTag(node: AST.SvelteStartTag) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst closeToken = sourceCode.getLastToken(node);\n\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.attributes,\n\t\t\t\topenToken,\n\t\t\t\tcloseToken,\n\t\t\t\t1,\n\t\t\t\toptions.alignAttributesVertically\n\t\t\t);\n\t\t\tif (node.selfClosing) {\n\t\t\t\tconst slash = sourceCode.getTokenBefore(closeToken)!;\n\t\t\t\tif (slash.value === '/') {\n\t\t\t\t\toffsets.setOffsetToken(slash, 0, openToken);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tSvelteEndTag(node: AST.SvelteEndTag) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst closeToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetElementList([], openToken, closeToken, 1);\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// ATTRIBUTES\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteAttribute(\n\t\t\tnode:\n\t\t\t\t| AST.SvelteAttribute\n\t\t\t\t| AST.SvelteDirective\n\t\t\t\t| AST.SvelteStyleDirective\n\t\t\t\t| AST.SvelteSpecialDirective\n\t\t) {\n\t\t\tconst keyToken = sourceCode.getFirstToken(node);\n\t\t\tconst eqToken = sourceCode.getTokenAfter(node.key);\n\n\t\t\tif (eqToken != null && eqToken.range[1] <= node.range[1]) {\n\t\t\t\toffsets.setOffsetToken(eqToken, 1, keyToken);\n\n\t\t\t\tconst valueStartToken = sourceCode.getTokenAfter(eqToken);\n\t\t\t\tif (valueStartToken != null && valueStartToken.range[1] <= node.range[1]) {\n\t\t\t\t\toffsets.setOffsetToken(valueStartToken, 1, keyToken);\n\n\t\t\t\t\tconst values =\n\t\t\t\t\t\tnode.type === 'SvelteAttribute' || node.type === 'SvelteStyleDirective'\n\t\t\t\t\t\t\t? node.value\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t// process quoted\n\t\t\t\t\tlet processedValues = false;\n\t\t\t\t\tif (valueStartToken.type === 'Punctuator') {\n\t\t\t\t\t\tconst quoted = ['\"', \"'\"].includes(valueStartToken.value);\n\t\t\t\t\t\tconst mustache = !quoted && valueStartToken.value === '{';\n\t\t\t\t\t\tif (quoted || mustache) {\n\t\t\t\t\t\t\tconst last = sourceCode.getLastToken(node);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tlast.type === 'Punctuator' &&\n\t\t\t\t\t\t\t\t((quoted && last.value === valueStartToken.value) ||\n\t\t\t\t\t\t\t\t\t(mustache && last.value === '}'))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\toffsets.setOffsetToken(last, 0, valueStartToken);\n\n\t\t\t\t\t\t\t\toffsets.setOffsetElementList(values, valueStartToken, last, 1);\n\t\t\t\t\t\t\t\tprocessedValues = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!processedValues) {\n\t\t\t\t\t\tfor (const val of values) {\n\t\t\t\t\t\t\tconst token = sourceCode.getFirstToken(val);\n\t\t\t\t\t\t\toffsets.setOffsetToken(token, 0, valueStartToken);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tSvelteDirective(node: AST.SvelteDirective) {\n\t\t\tvisitor.SvelteAttribute(node);\n\t\t},\n\t\tSvelteStyleDirective(node: AST.SvelteStyleDirective) {\n\t\t\tvisitor.SvelteAttribute(node);\n\t\t},\n\t\tSvelteSpecialDirective(node: AST.SvelteSpecialDirective) {\n\t\t\tvisitor.SvelteAttribute(node);\n\t\t},\n\t\tSvelteShorthandAttribute(node: AST.SvelteShorthandAttribute | AST.SvelteSpreadAttribute) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst closeToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetElementList([], openToken, closeToken, 1);\n\t\t},\n\t\tSvelteSpreadAttribute(node: AST.SvelteSpreadAttribute) {\n\t\t\tvisitor.SvelteShorthandAttribute(node);\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// ATTRIBUTE KEYS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteDirectiveKey(_node: AST.SvelteDirectiveKey) {\n\t\t\t// noop\n\t\t},\n\t\tSvelteSpecialDirectiveKey(_node: AST.SvelteSpecialDirectiveKey) {\n\t\t\t// noop\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// CONTENTS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteText(node: AST.SvelteText) {\n\t\t\tconst tokens = sourceCode.getTokens(node, {\n\t\t\t\tfilter: isNotWhitespace,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\tconst first = tokens.shift();\n\t\t\tif (!first) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toffsets.setOffsetToken(\n\t\t\t\ttokens,\n\t\t\t\tisBeginningOfLine(sourceCode, first) ? 0 : isBeginningOfElement(node) ? 1 : 0,\n\t\t\t\tfirst\n\t\t\t);\n\t\t},\n\t\tSvelteLiteral(node: AST.SvelteLiteral) {\n\t\t\tconst tokens = sourceCode.getTokens(node, {\n\t\t\t\tfilter: isNotWhitespace,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\tconst first = tokens.shift();\n\t\t\tif (!first) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toffsets.setOffsetToken(tokens, isBeginningOfLine(sourceCode, first) ? 0 : 1, first);\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// MUSTACHE TAGS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteMustacheTag(node: AST.SvelteMustacheTag) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst closeToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetElementList([node.expression], openToken, closeToken, 1);\n\t\t},\n\t\tSvelteDebugTag(node: AST.SvelteDebugTag) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst closeToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetElementList(node.identifiers, openToken, closeToken, 1);\n\t\t},\n\t\tSvelteConstTag(node: AST.SvelteConstTag) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst constToken = sourceCode.getTokenAfter(openToken);\n\t\t\tconst declarationToken = sourceCode.getFirstToken(node.declaration);\n\t\t\tconst closeToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetToken(constToken, 1, openToken);\n\t\t\toffsets.setOffsetToken(declarationToken, 1, openToken);\n\t\t\toffsets.setOffsetToken(closeToken, 0, openToken);\n\t\t},\n\t\tSvelteRenderTag(node: AST.SvelteRenderTag) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tconst renderToken = sourceCode.getTokenAfter(openToken)!;\n\t\t\toffsets.setOffsetToken(renderToken, 1, openToken);\n\t\t\toffsets.setOffsetToken(node.expression, 1, renderToken);\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// BLOCKS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteIfBlock(node: AST.SvelteIfBlock) {\n\t\t\tconst [openToken, ...ifTokens] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: node.elseif ? 3 : 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(ifTokens, 1, openToken);\n\t\t\tconst exp = getFirstAndLastTokens(sourceCode, node.expression);\n\t\t\toffsets.setOffsetToken(exp.firstToken, 1, ifTokens[0]);\n\n\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(exp.lastToken);\n\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\n\t\t\tif (node.else) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.else), 0, openToken);\n\t\t\t\tif (node.else.elseif) {\n\t\t\t\t\t// else if\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst [openCloseTagToken, endIfToken, closeCloseTagToken] = sourceCode.getLastTokens(node, {\n\t\t\t\tcount: 3,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(openCloseTagToken, 0, openToken);\n\t\t\toffsets.setOffsetToken(endIfToken, 1, openCloseTagToken);\n\t\t\toffsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken);\n\t\t},\n\t\tSvelteElseBlock(node: AST.SvelteElseBlock) {\n\t\t\tif (node.elseif) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [openToken, elseToken, closeToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 3,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(elseToken, 1, openToken);\n\t\t\toffsets.setOffsetToken(closeToken, 0, openToken);\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\t\t},\n\t\tSvelteEachBlock(node: AST.SvelteEachBlock) {\n\t\t\tconst [openToken, eachToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(eachToken, 1, openToken);\n\t\t\toffsets.setOffsetElementList([node.expression, node.context, node.index], eachToken, null, 1);\n\t\t\tif (node.key) {\n\t\t\t\tconst key = getFirstAndLastTokens(sourceCode, node.key);\n\t\t\t\toffsets.setOffsetToken(key.firstToken, 1, eachToken);\n\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(key.lastToken);\n\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\t\t\t} else {\n\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(\n\t\t\t\t\tnode.index || node.context || node.expression\n\t\t\t\t);\n\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\t\t\t}\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\t\t\tif (node.else) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.else), 0, openToken);\n\t\t\t}\n\n\t\t\tconst [openCloseTagToken, endEachToken, closeCloseTagToken] = sourceCode.getLastTokens(node, {\n\t\t\t\tcount: 3,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(openCloseTagToken, 0, openToken);\n\t\t\toffsets.setOffsetToken(endEachToken, 1, openCloseTagToken);\n\t\t\toffsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken);\n\t\t},\n\t\tSvelteAwaitBlock(node: AST.SvelteAwaitBlock) {\n\t\t\tconst [openToken, awaitToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(awaitToken, 1, openToken);\n\t\t\tconst exp = getFirstAndLastTokens(sourceCode, node.expression);\n\t\t\toffsets.setOffsetToken(exp.firstToken, 1, awaitToken);\n\n\t\t\tif (node.pending) {\n\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(exp.lastToken);\n\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\tsourceCode.getFirstToken(node.pending, {\n\t\t\t\t\t\tincludeComments: false,\n\t\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t\topenToken\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (node.then) {\n\t\t\t\tif (node.kind === 'await-then') {\n\t\t\t\t\t// {#await expression then value}\n\t\t\t\t\tconst thenToken = sourceCode.getTokenAfter(exp.lastToken)!;\n\t\t\t\t\toffsets.setOffsetToken(thenToken, 1, openToken);\n\t\t\t\t\tif (node.then.value) {\n\t\t\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.then.value), 1, thenToken);\n\t\t\t\t\t}\n\t\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(node.then.value || thenToken);\n\t\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\t\t\t\t} else {\n\t\t\t\t\t// {:then value}\n\t\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.then), 0, openToken);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.catch) {\n\t\t\t\tif (node.kind === 'await-catch') {\n\t\t\t\t\t// {#await expression catch error}\n\t\t\t\t\tconst catchToken = sourceCode.getTokenAfter(exp.lastToken)!;\n\t\t\t\t\toffsets.setOffsetToken(catchToken, 1, openToken);\n\t\t\t\t\tif (node.catch.error) {\n\t\t\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.catch.error), 1, catchToken);\n\t\t\t\t\t}\n\t\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(node.catch.error || catchToken);\n\t\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\t\t\t\t} else {\n\t\t\t\t\t// {:catch value}\n\t\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.catch), 0, openToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst [openCloseTagToken, endAwaitToken, closeCloseTagToken] = sourceCode.getLastTokens(\n\t\t\t\tnode,\n\t\t\t\t{\n\t\t\t\t\tcount: 3,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t}\n\t\t\t);\n\t\t\toffsets.setOffsetToken(openCloseTagToken, 0, openToken);\n\t\t\toffsets.setOffsetToken(endAwaitToken, 1, openCloseTagToken);\n\t\t\toffsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken);\n\t\t},\n\t\tSvelteAwaitPendingBlock(node: AST.SvelteAwaitPendingBlock) {\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\t\t},\n\t\tSvelteAwaitThenBlock(node: AST.SvelteAwaitThenBlock) {\n\t\t\tif (!node.awaitThen) {\n\t\t\t\t// {:then value}\n\t\t\t\tconst [openToken, thenToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\t\tcount: 2,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(thenToken, 1, openToken);\n\t\t\t\tif (node.value) {\n\t\t\t\t\tconst valueToken = sourceCode.getFirstToken(node.value);\n\t\t\t\t\toffsets.setOffsetToken(valueToken, 1, thenToken);\n\t\t\t\t}\n\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(node.value || thenToken);\n\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\t\t\t}\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\t\t},\n\t\tSvelteAwaitCatchBlock(node: AST.SvelteAwaitCatchBlock) {\n\t\t\tif (!node.awaitCatch) {\n\t\t\t\t// {:catch error}\n\t\t\t\tconst [openToken, catchToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\t\tcount: 2,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(catchToken, 1, openToken);\n\t\t\t\tif (node.error) {\n\t\t\t\t\tconst errorToken = sourceCode.getFirstToken(node.error);\n\t\t\t\t\toffsets.setOffsetToken(errorToken, 1, catchToken);\n\t\t\t\t}\n\t\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(node.error || catchToken);\n\t\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\t\t\t}\n\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\t\t},\n\t\tSvelteKeyBlock(node: AST.SvelteKeyBlock) {\n\t\t\tconst [openToken, keyToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(keyToken, 1, openToken);\n\t\t\tconst exp = getFirstAndLastTokens(sourceCode, node.expression);\n\t\t\toffsets.setOffsetToken(exp.firstToken, 1, keyToken);\n\n\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(exp.lastToken);\n\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\n\t\t\tconst [openCloseTagToken, endKeyToken, closeCloseTagToken] = sourceCode.getLastTokens(node, {\n\t\t\t\tcount: 3,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(openCloseTagToken, 0, openToken);\n\t\t\toffsets.setOffsetToken(endKeyToken, 1, openCloseTagToken);\n\t\t\toffsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken);\n\t\t},\n\t\tSvelteSnippetBlock(node: AST.SvelteSnippetBlock) {\n\t\t\tconst [openToken, snippetToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(snippetToken, 1, openToken);\n\t\t\tconst snippetName = sourceCode.getTokenAfter(snippetToken)!;\n\t\t\toffsets.setOffsetToken(snippetName, 1, snippetToken);\n\n\t\t\tconst leftParenToken = sourceCode.getTokenBefore(\n\t\t\t\tnode.params[0] || sourceCode.getLastToken(node),\n\t\t\t\t{\n\t\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t}\n\t\t\t)!;\n\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.params[node.params.length - 1] || leftParenToken,\n\t\t\t\t{\n\t\t\t\t\tfilter: isClosingParenToken,\n\t\t\t\t\tincludeComments: false\n\t\t\t\t}\n\t\t\t)!;\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, snippetName);\n\t\t\toffsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1);\n\n\t\t\tconst closeOpenTagToken = sourceCode.getTokenAfter(rightParenToken)!;\n\t\t\toffsets.setOffsetToken(closeOpenTagToken, 0, openToken);\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst token = sourceCode.getFirstToken(child, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isNotWhitespace\n\t\t\t\t});\n\t\t\t\toffsets.setOffsetToken(token, 1, openToken);\n\t\t\t}\n\n\t\t\tconst [openCloseTagToken, endSnippetToken, closeCloseTagToken] = sourceCode.getLastTokens(\n\t\t\t\tnode,\n\t\t\t\t{ count: 3, includeComments: false }\n\t\t\t);\n\t\t\toffsets.setOffsetToken(openCloseTagToken, 0, openToken);\n\t\t\toffsets.setOffsetToken(endSnippetToken, 1, openCloseTagToken);\n\t\t\toffsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken);\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// COMMENTS\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteHTMLComment(_node: AST.SvelteHTMLComment) {\n\t\t\t// noop\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// NAMES\n\t\t// ----------------------------------------------------------------------\n\t\tSvelteName(_node: AST.SvelteName) {\n\t\t\t// noop\n\t\t},\n\t\tSvelteMemberExpressionName(_node: AST.SvelteMemberExpressionName) {\n\t\t\t// noop\n\t\t}\n\t};\n\n\treturn visitor;\n}\n\n/**\n * Check whether the given node is not an empty text node.\n * @param node The node to check.\n * @returns `false` if the token is empty text node.\n */\nfunction isNotEmptyTextNode(node: ASTNode) {\n\treturn !(node.type === 'SvelteText' && node.value.trim() === '');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent-helpers/ts.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport {\n\tisClosingBracketToken,\n\tisClosingParenToken,\n\tisNotClosingParenToken,\n\tisNotOpeningBraceToken,\n\tisOpeningBraceToken,\n\tisOpeningBracketToken,\n\tisOpeningParenToken,\n\tisSemicolonToken\n} from '@eslint-community/eslint-utils';\nimport type { AnyToken, IndentContext } from './commons.js';\nimport { isBeginningOfLine } from './commons.js';\nimport { getFirstAndLastTokens } from './commons.js';\nimport type { TSNodeListener } from '../../types-for-node.js';\n\ntype NodeListener = TSNodeListener;\n\n/**\n * Creates AST event handlers for svelte nodes.\n *\n * @param context The rule context.\n * @returns AST event handlers.\n */\nexport function defineVisitor(context: IndentContext): NodeListener {\n\tconst { offsets, sourceCode } = context;\n\tconst visitor = {\n\t\tTSTypeAnnotation(node: TSESTree.TSTypeAnnotation) {\n\t\t\t// : Type\n\t\t\t// => Type\n\t\t\tconst [colonOrArrowToken, secondToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\tconst baseToken = sourceCode.getFirstToken(node.parent);\n\t\t\toffsets.setOffsetToken([colonOrArrowToken, secondToken], 1, baseToken);\n\n\t\t\tconst before = sourceCode.getTokenBefore(colonOrArrowToken);\n\t\t\tif (before && before.value === '?') {\n\t\t\t\toffsets.setOffsetToken(before, 1, baseToken);\n\t\t\t}\n\t\t},\n\t\tTSAsExpression(node: TSESTree.TSAsExpression | TSESTree.TSSatisfiesExpression) {\n\t\t\t// foo as T\n\t\t\t// or\n\t\t\t// foo satisfies T\n\t\t\tconst expressionTokens = getFirstAndLastTokens(sourceCode, node.expression);\n\t\t\tconst asOrSatisfiesToken = sourceCode.getTokenAfter(expressionTokens.lastToken)!;\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[asOrSatisfiesToken, getFirstAndLastTokens(sourceCode, node.typeAnnotation).firstToken],\n\t\t\t\t1,\n\t\t\t\texpressionTokens.firstToken\n\t\t\t);\n\t\t},\n\t\tTSSatisfiesExpression(node: TSESTree.TSSatisfiesExpression) {\n\t\t\t// foo satisfies T\n\t\t\tvisitor.TSAsExpression(node);\n\t\t},\n\t\tTSTypeReference(node: TSESTree.TSTypeReference | TSESTree.TSInstantiationExpression) {\n\t\t\t// T<U>\n\t\t\t// or\n\t\t\t// const ErrorMap = Map<string, Error>\n\t\t\t//                  ^^^^^^^^^^^^^^^^^^\n\t\t\tconst typeArguments =\n\t\t\t\tnode.typeArguments ??\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t(node as any).typeParameters;\n\t\t\tif (typeArguments) {\n\t\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);\n\t\t\t}\n\t\t},\n\t\tTSInstantiationExpression(node: TSESTree.TSInstantiationExpression) {\n\t\t\t// const ErrorMap = Map<string, Error>\n\t\t\t//                  ^^^^^^^^^^^^^^^^^^\n\t\t\tvisitor.TSTypeReference(node);\n\t\t},\n\t\tTSTypeParameterInstantiation(\n\t\t\tnode: TSESTree.TSTypeParameterInstantiation | TSESTree.TSTypeParameterDeclaration\n\t\t) {\n\t\t\t// <T>\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.params,\n\t\t\t\tsourceCode.getFirstToken(node),\n\t\t\t\tsourceCode.getLastToken(node),\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t\tTSTypeParameterDeclaration(node: TSESTree.TSTypeParameterDeclaration) {\n\t\t\t// <T>\n\t\t\tvisitor.TSTypeParameterInstantiation(node);\n\t\t},\n\t\tTSTypeAliasDeclaration(node: TSESTree.TSTypeAliasDeclaration) {\n\t\t\t// type T = {}\n\t\t\tconst typeToken = sourceCode.getFirstToken(node);\n\t\t\tconst idToken = sourceCode.getFirstToken(node.id);\n\t\t\toffsets.setOffsetToken(idToken, 1, typeToken);\n\n\t\t\tlet eqToken: AST.Token | null;\n\t\t\tif (node.typeParameters) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, idToken);\n\t\t\t\teqToken = sourceCode.getTokenAfter(node.typeParameters)!;\n\t\t\t} else {\n\t\t\t\teqToken = sourceCode.getTokenAfter(node.id)!;\n\t\t\t}\n\n\t\t\tconst initToken = sourceCode.getTokenAfter(eqToken);\n\n\t\t\toffsets.setOffsetToken([eqToken, initToken], 1, idToken);\n\t\t},\n\t\tTSFunctionType(node: TSESTree.TSFunctionType | TSESTree.TSConstructorType) {\n\t\t\t// ()=>void\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\t// new or < or (\n\t\t\tlet currToken = firstToken;\n\t\t\tif (node.type === 'TSConstructorType') {\n\t\t\t\t// currToken is new token\n\t\t\t\t// < or (\n\t\t\t\tcurrToken = sourceCode.getTokenAfter(currToken)!;\n\t\t\t\toffsets.setOffsetToken(currToken, 1, firstToken);\n\t\t\t}\n\t\t\tif (node.typeParameters) {\n\t\t\t\t// currToken is < token\n\t\t\t\t// (\n\t\t\t\tcurrToken = sourceCode.getTokenAfter(node.typeParameters)!;\n\t\t\t\toffsets.setOffsetToken(currToken, 1, firstToken);\n\t\t\t}\n\t\t\tconst leftParenToken = currToken;\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.params[node.params.length - 1] || leftParenToken,\n\t\t\t\t{ filter: isClosingParenToken, includeComments: false }\n\t\t\t)!;\n\t\t\toffsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1);\n\n\t\t\tconst arrowToken = sourceCode.getTokenAfter(rightParenToken);\n\t\t\toffsets.setOffsetToken(arrowToken, 1, leftParenToken);\n\t\t},\n\t\tTSConstructorType(node: TSESTree.TSConstructorType) {\n\t\t\t// new ()=>void\n\t\t\tvisitor.TSFunctionType(node);\n\t\t},\n\t\tTSTypeLiteral(node: TSESTree.TSTypeLiteral) {\n\t\t\t// {foo:any}\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.members,\n\t\t\t\tsourceCode.getFirstToken(node),\n\t\t\t\tsourceCode.getLastToken(node),\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t\tTSPropertySignature(node: TSESTree.TSPropertySignature) {\n\t\t\t// { target:any }\n\t\t\t//   ^^^^^^^^^^\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst keyTokens = getFirstAndLastTokens(sourceCode, node.key);\n\t\t\tlet keyLast;\n\t\t\tif (node.computed) {\n\t\t\t\tconst closeBracket = sourceCode.getTokenAfter(keyTokens.lastToken)!;\n\t\t\t\toffsets.setOffsetElementList([node.key], firstToken, closeBracket, 1);\n\t\t\t\tkeyLast = closeBracket;\n\t\t\t} else {\n\t\t\t\tkeyLast = keyTokens.lastToken;\n\t\t\t}\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tconst typeAnnotationToken = sourceCode.getFirstToken(node.typeAnnotation);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(keyLast, typeAnnotationToken), typeAnnotationToken],\n\t\t\t\t\t1,\n\t\t\t\t\tfirstToken\n\t\t\t\t);\n\t\t\t} else if (node.optional) {\n\t\t\t\tconst qToken = sourceCode.getLastToken(node);\n\t\t\t\toffsets.setOffsetToken(qToken, 1, firstToken);\n\t\t\t}\n\t\t},\n\t\tTSIndexSignature(node: TSESTree.TSIndexSignature) {\n\t\t\t// { [k: string ]: string[] };\n\t\t\t//   ^^^^^^^^^^^^^^^^^^^^^^\n\t\t\tconst leftBracketToken = sourceCode.getFirstToken(node);\n\t\t\tconst rightBracketToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.parameters[node.parameters.length - 1] || leftBracketToken,\n\t\t\t\t{ filter: isClosingBracketToken, includeComments: false }\n\t\t\t)!;\n\t\t\toffsets.setOffsetElementList(node.parameters, leftBracketToken, rightBracketToken, 1);\n\t\t\tconst keyLast = rightBracketToken;\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tconst typeAnnotationToken = sourceCode.getFirstToken(node.typeAnnotation);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(keyLast, typeAnnotationToken), typeAnnotationToken],\n\t\t\t\t\t1,\n\t\t\t\t\tleftBracketToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tTSArrayType(node: TSESTree.TSArrayType) {\n\t\t\t// T[]\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\tsourceCode.getLastTokens(node, { count: 2, includeComments: false }),\n\t\t\t\t0,\n\t\t\t\tfirstToken\n\t\t\t);\n\t\t},\n\t\tTSTupleType(node: TSESTree.TSTupleType) {\n\t\t\t// [T, U]\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.elementTypes,\n\t\t\t\tsourceCode.getFirstToken(node),\n\t\t\t\tsourceCode.getLastToken(node),\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t\tTSQualifiedName(node: TSESTree.TSQualifiedName) {\n\t\t\t// A.B\n\t\t\tconst objectToken = sourceCode.getFirstToken(node);\n\t\t\tconst dotToken = sourceCode.getTokenBefore(node.right)!;\n\t\t\tconst propertyToken = sourceCode.getTokenAfter(dotToken);\n\n\t\t\toffsets.setOffsetToken([dotToken, propertyToken], 1, objectToken);\n\t\t},\n\t\tTSIndexedAccessType(node: TSESTree.TSIndexedAccessType) {\n\t\t\t// A[B]\n\t\t\tconst objectToken = sourceCode.getFirstToken(node);\n\n\t\t\tconst leftBracketToken = sourceCode.getTokenBefore(node.indexType, {\n\t\t\t\tfilter: isOpeningBracketToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst rightBracketToken = sourceCode.getTokenAfter(node.indexType, {\n\t\t\t\tfilter: isClosingBracketToken,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\n\t\t\toffsets.setOffsetToken(leftBracketToken, 1, objectToken);\n\t\t\toffsets.setOffsetElementList([node.indexType], leftBracketToken, rightBracketToken, 1);\n\t\t},\n\t\tTSUnionType(node: TSESTree.TSUnionType | TSESTree.TSIntersectionType) {\n\t\t\t// A | B\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst types = [...node.types];\n\t\t\tif (getFirstAndLastTokens(sourceCode, types[0]).firstToken === firstToken) {\n\t\t\t\ttypes.shift();\n\t\t\t}\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\ttypes,\n\t\t\t\tfirstToken,\n\t\t\t\tnull,\n\t\t\t\tisBeginningOfLine(sourceCode, firstToken) ? 0 : 1\n\t\t\t);\n\t\t},\n\t\tTSIntersectionType(node: TSESTree.TSIntersectionType) {\n\t\t\t// A & B\n\t\t\tvisitor.TSUnionType(node);\n\t\t},\n\t\tTSMappedType(node: TSESTree.TSMappedType) {\n\t\t\t// {[key in foo]: bar}\n\t\t\tconst leftBraceToken = sourceCode.getFirstToken(node);\n\n\t\t\tconst leftBracketToken = sourceCode.getTokenBefore(node.key || node.typeParameter)!;\n\t\t\tconst rightBracketToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.nameType || node.constraint || node.typeParameter\n\t\t\t)!;\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[...sourceCode.getTokensBetween(leftBraceToken, leftBracketToken), leftBracketToken],\n\t\t\t\t1,\n\t\t\t\tleftBraceToken\n\t\t\t);\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\t[node.key, node.constraint, node.typeParameter, node.nameType],\n\t\t\t\tleftBracketToken,\n\t\t\t\trightBracketToken,\n\t\t\t\t1\n\t\t\t);\n\n\t\t\tif (node.key && node.constraint) {\n\t\t\t\tconst firstToken = sourceCode.getFirstToken(node.key);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[\n\t\t\t\t\t\t...sourceCode.getTokensBetween(firstToken, node.constraint),\n\t\t\t\t\t\tsourceCode.getFirstToken(node.constraint)\n\t\t\t\t\t],\n\t\t\t\t\t1,\n\t\t\t\t\tfirstToken\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst rightBraceToken = sourceCode.getLastToken(node);\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tconst typeAnnotationToken = sourceCode.getFirstToken(node.typeAnnotation);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[\n\t\t\t\t\t\t...sourceCode.getTokensBetween(rightBracketToken, typeAnnotationToken),\n\t\t\t\t\t\ttypeAnnotationToken\n\t\t\t\t\t],\n\t\t\t\t\t1,\n\t\t\t\t\tleftBraceToken\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(rightBracketToken, rightBraceToken)],\n\t\t\t\t\t1,\n\t\t\t\t\tleftBraceToken\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toffsets.setOffsetToken(rightBraceToken, 0, leftBraceToken);\n\t\t},\n\t\tTSTypeParameter(node: TSESTree.TSTypeParameter) {\n\t\t\t// {[key in foo]: bar}\n\t\t\t//   ^^^^^^^^^^\n\t\t\t// type T<U extends V = W>\n\t\t\t//        ^^^^^^^^^^^^^^^\n\t\t\tconst [firstToken, ...afterTokens] = sourceCode.getTokens(node);\n\n\t\t\tfor (const child of [node.constraint, node.default]) {\n\t\t\t\tif (!child) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst [, ...removeTokens] = sourceCode.getTokens(child);\n\t\t\t\tfor (const token of removeTokens) {\n\t\t\t\t\tconst i = afterTokens.indexOf(token);\n\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\tafterTokens.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst secondToken = afterTokens.shift();\n\t\t\tif (!secondToken) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toffsets.setOffsetToken(secondToken, 1, firstToken);\n\n\t\t\tif (secondToken.value === 'extends') {\n\t\t\t\tlet prevToken: AnyToken | null = null;\n\t\t\t\tlet token = afterTokens.shift();\n\t\t\t\twhile (token) {\n\t\t\t\t\tif (token.value === '=') {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\toffsets.setOffsetToken(token, 1, secondToken);\n\t\t\t\t\tprevToken = token;\n\t\t\t\t\ttoken = afterTokens.shift();\n\t\t\t\t}\n\t\t\t\twhile (token) {\n\t\t\t\t\toffsets.setOffsetToken(token, 1, prevToken || secondToken);\n\t\t\t\t\ttoken = afterTokens.shift();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(afterTokens, 1, firstToken);\n\t\t\t}\n\t\t},\n\t\tTSConditionalType(node: TSESTree.TSConditionalType) {\n\t\t\t// T extends Foo ? T : U\n\t\t\tconst checkTypeToken = sourceCode.getFirstToken(node);\n\t\t\tconst extendsToken = sourceCode.getTokenAfter(node.checkType)!;\n\t\t\tconst extendsTypeToken = sourceCode.getFirstToken(node.extendsType);\n\n\t\t\toffsets.setOffsetToken(extendsToken, 1, checkTypeToken);\n\t\t\toffsets.setOffsetToken(extendsTypeToken, 1, extendsToken);\n\n\t\t\tconst questionToken = sourceCode.getTokenAfter(node.extendsType, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\n\t\t\tconst consequentToken = sourceCode.getTokenAfter(questionToken);\n\t\t\tconst colonToken = sourceCode.getTokenAfter(node.trueType, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst alternateToken = sourceCode.getTokenAfter(colonToken);\n\n\t\t\tlet baseNode = node;\n\t\t\tlet parent = baseNode.parent;\n\t\t\twhile (parent && parent.type === 'TSConditionalType' && parent.falseType === baseNode) {\n\t\t\t\tbaseNode = parent;\n\t\t\t\tparent = baseNode.parent;\n\t\t\t}\n\t\t\tconst baseToken = sourceCode.getFirstToken(baseNode);\n\n\t\t\toffsets.setOffsetToken([questionToken, colonToken], 1, baseToken);\n\t\t\toffsets.setOffsetToken(consequentToken, 1, questionToken);\n\t\t\toffsets.setOffsetToken(alternateToken, 1, colonToken);\n\t\t},\n\t\tTSInterfaceDeclaration(node: TSESTree.TSInterfaceDeclaration) {\n\t\t\t// interface I {}\n\t\t\tconst interfaceToken = sourceCode.getFirstToken(node);\n\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(node.id), 1, interfaceToken);\n\t\t\tif (node.typeParameters != null) {\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\tsourceCode.getFirstToken(node.typeParameters),\n\t\t\t\t\t1,\n\t\t\t\t\tsourceCode.getFirstToken(node.id)\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (node.extends != null && node.extends.length) {\n\t\t\t\tconst extendsToken = sourceCode.getTokenBefore(node.extends[0])!;\n\t\t\t\toffsets.setOffsetToken(extendsToken, 1, interfaceToken);\n\t\t\t\toffsets.setOffsetElementList(node.extends, extendsToken, null, 1);\n\t\t\t}\n\t\t\t// It may not calculate the correct location because the visitor key is not provided.\n\t\t\t// if (node.implements != null && node.implements.length) {\n\t\t\t//   const implementsToken = sourceCode.getTokenBefore(node.implements[0])!\n\t\t\t//  offsets.setOffsetToken(implementsToken, 1, interfaceToken)\n\t\t\t//  offsets.setOffsetElementList( node.implements, implementsToken, null, 1)\n\t\t\t// }\n\t\t\tconst bodyToken = sourceCode.getFirstToken(node.body);\n\t\t\toffsets.setOffsetToken(bodyToken, 0, interfaceToken);\n\t\t},\n\t\tTSInterfaceBody(node: TSESTree.TSInterfaceBody | TSESTree.TSModuleBlock) {\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\tnode.body,\n\t\t\t\tsourceCode.getFirstToken(node),\n\t\t\t\tsourceCode.getLastToken(node),\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t\tTSClassImplements(node: TSESTree.TSClassImplements | TSESTree.TSInterfaceHeritage) {\n\t\t\t// class C implements T {}\n\t\t\t//                    ^\n\t\t\tconst typeArguments =\n\t\t\t\tnode.typeArguments ??\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t(node as any).typeParameters;\n\t\t\tif (typeArguments) {\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\tsourceCode.getFirstToken(typeArguments),\n\t\t\t\t\t1,\n\t\t\t\t\tsourceCode.getFirstToken(node)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tTSInterfaceHeritage(node: TSESTree.TSInterfaceHeritage) {\n\t\t\t// interface I extends E implements T {}\n\t\t\t//                     ^            ^\n\t\t\tvisitor.TSClassImplements(node);\n\t\t},\n\t\tTSEnumDeclaration(node: TSESTree.TSEnumDeclaration) {\n\t\t\t// enum E {}\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst idTokens = getFirstAndLastTokens(sourceCode, node.id);\n\t\t\tconst prefixTokens = sourceCode.getTokensBetween(firstToken, idTokens.firstToken);\n\t\t\toffsets.setOffsetToken(prefixTokens, 0, firstToken);\n\t\t\toffsets.setOffsetToken(idTokens.firstToken, 1, firstToken);\n\n\t\t\tconst leftBraceToken = sourceCode.getTokenAfter(idTokens.lastToken)!;\n\t\t\tconst rightBraceToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetToken(leftBraceToken, 0, firstToken);\n\t\t\tif (node.members)\n\t\t\t\toffsets.setOffsetElementList(node.members, leftBraceToken, rightBraceToken, 1);\n\t\t},\n\t\tTSEnumBody(node: TSESTree.TSEnumBody) {\n\t\t\t// enum E {...}\n\t\t\t//        ^^^^^\n\t\t\tconst leftBraceToken = sourceCode.getFirstToken(node);\n\t\t\tconst rightBraceToken = sourceCode.getLastToken(node);\n\t\t\toffsets.setOffsetElementList(node.members, leftBraceToken, rightBraceToken, 1);\n\t\t},\n\t\tTSModuleDeclaration(node: TSESTree.TSModuleDeclaration) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst idTokens = getFirstAndLastTokens(sourceCode, node.id);\n\t\t\tconst prefixTokens = sourceCode.getTokensBetween(firstToken, idTokens.firstToken);\n\t\t\toffsets.setOffsetToken(prefixTokens, 0, firstToken);\n\t\t\toffsets.setOffsetToken(idTokens.firstToken, 1, firstToken);\n\n\t\t\tif (node.body) {\n\t\t\t\tconst bodyFirstToken = sourceCode.getFirstToken(node.body);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\tbodyFirstToken,\n\t\t\t\t\tisOpeningBraceToken(bodyFirstToken) ? 0 : 1,\n\t\t\t\t\tfirstToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tTSModuleBlock(node: TSESTree.TSModuleBlock) {\n\t\t\tvisitor.TSInterfaceBody(node);\n\t\t},\n\t\tTSMethodSignature(node: TSESTree.TSMethodSignature) {\n\t\t\t// fn(arg: A): R | null;\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst keyTokens = getFirstAndLastTokens(sourceCode, node.key);\n\t\t\tlet keyLast: AST.Token;\n\t\t\tif (node.computed) {\n\t\t\t\tconst closeBracket = sourceCode.getTokenAfter(keyTokens.lastToken)!;\n\t\t\t\toffsets.setOffsetElementList([node.key], firstToken, closeBracket, 1);\n\t\t\t\tkeyLast = closeBracket;\n\t\t\t} else {\n\t\t\t\tkeyLast = keyTokens.lastToken;\n\t\t\t}\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(keyLast, {\n\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[...sourceCode.getTokensBetween(keyLast, leftParenToken), leftParenToken],\n\t\t\t\t1,\n\t\t\t\tfirstToken\n\t\t\t);\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.params[node.params.length - 1] || leftParenToken,\n\t\t\t\t{ filter: isClosingParenToken, includeComments: false }\n\t\t\t)!;\n\t\t\toffsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1);\n\t\t\tif (node.returnType) {\n\t\t\t\tconst typeAnnotationToken = sourceCode.getFirstToken(node.returnType);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(keyLast, typeAnnotationToken), typeAnnotationToken],\n\t\t\t\t\t1,\n\t\t\t\t\tfirstToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tTSCallSignatureDeclaration(\n\t\t\tnode: TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructSignatureDeclaration\n\t\t) {\n\t\t\t// interface A { <T> (e: E): R }\n\t\t\t//               ^^^^^^^^^^^^^\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\t// new or < or (\n\t\t\tlet currToken = firstToken;\n\t\t\tif (node.type === 'TSConstructSignatureDeclaration') {\n\t\t\t\t// currToken is new token\n\t\t\t\t// < or (\n\t\t\t\tcurrToken = sourceCode.getTokenAfter(currToken)!;\n\t\t\t\toffsets.setOffsetToken(currToken, 1, firstToken);\n\t\t\t}\n\t\t\tif (node.typeParameters) {\n\t\t\t\t// currToken is < token\n\t\t\t\t// (\n\t\t\t\tcurrToken = sourceCode.getTokenAfter(node.typeParameters)!;\n\t\t\t\toffsets.setOffsetToken(currToken, 1, firstToken);\n\t\t\t}\n\t\t\tconst leftParenToken = currToken;\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.params[node.params.length - 1] || leftParenToken,\n\t\t\t\t{ filter: isClosingParenToken, includeComments: false }\n\t\t\t)!;\n\t\t\toffsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1);\n\n\t\t\tif (node.returnType) {\n\t\t\t\tconst typeAnnotationToken = sourceCode.getFirstToken(node.returnType);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[\n\t\t\t\t\t\t...sourceCode.getTokensBetween(rightParenToken, typeAnnotationToken),\n\t\t\t\t\t\ttypeAnnotationToken\n\t\t\t\t\t],\n\t\t\t\t\t1,\n\t\t\t\t\tfirstToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tTSConstructSignatureDeclaration(node: TSESTree.TSConstructSignatureDeclaration) {\n\t\t\t// interface A { new <T> (e: E): R }\n\t\t\t//               ^^^^^^^^^^^^^^^^^\n\t\t\tvisitor.TSCallSignatureDeclaration(node);\n\t\t},\n\t\tTSEmptyBodyFunctionExpression(\n\t\t\tnode: TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSDeclareFunction\n\t\t) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tlet leftParenToken: AST.Token, bodyBaseToken: AST.Token;\n\t\t\tif (firstToken.type === 'Punctuator') {\n\t\t\t\t// method\n\t\t\t\tleftParenToken = firstToken;\n\t\t\t\tbodyBaseToken = sourceCode.getFirstToken(node.parent);\n\t\t\t} else {\n\t\t\t\tlet nextToken = sourceCode.getTokenAfter(firstToken);\n\t\t\t\tlet nextTokenOffset = 0;\n\t\t\t\twhile (nextToken && !isOpeningParenToken(nextToken) && nextToken.value !== '<') {\n\t\t\t\t\tif (nextToken.value === '*' || (node.id && nextToken.range[0] === node.id.range[0])) {\n\t\t\t\t\t\tnextTokenOffset = 1;\n\t\t\t\t\t}\n\t\t\t\t\toffsets.setOffsetToken(nextToken, nextTokenOffset, firstToken);\n\t\t\t\t\tnextToken = sourceCode.getTokenAfter(nextToken);\n\t\t\t\t}\n\n\t\t\t\tleftParenToken = nextToken!;\n\t\t\t\tbodyBaseToken = firstToken;\n\t\t\t}\n\n\t\t\tif (!isOpeningParenToken(leftParenToken) && node.typeParameters) {\n\t\t\t\tleftParenToken = sourceCode.getTokenAfter(node.typeParameters)!;\n\t\t\t}\n\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(\n\t\t\t\tnode.params[node.params.length - 1] || leftParenToken,\n\t\t\t\t{ filter: isClosingParenToken, includeComments: false }\n\t\t\t)!;\n\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, bodyBaseToken);\n\t\t\toffsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1);\n\t\t},\n\t\tTSDeclareFunction(node: TSESTree.TSDeclareFunction) {\n\t\t\t// function fn(): void;\n\t\t\tvisitor.TSEmptyBodyFunctionExpression(node);\n\t\t},\n\t\tTSTypeOperator(node: TSESTree.TSTypeOperator | TSESTree.TSTypeQuery | TSESTree.TSInferType) {\n\t\t\t// keyof T\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst nextToken = sourceCode.getTokenAfter(firstToken);\n\n\t\t\toffsets.setOffsetToken(nextToken, 1, firstToken);\n\t\t},\n\t\tTSTypeQuery(node: TSESTree.TSTypeQuery) {\n\t\t\t// type T = typeof a\n\t\t\tvisitor.TSTypeOperator(node);\n\t\t},\n\t\tTSInferType(node: TSESTree.TSInferType) {\n\t\t\t// infer U\n\t\t\tvisitor.TSTypeOperator(node);\n\t\t},\n\t\tTSTypePredicate(node: TSESTree.TSTypePredicate) {\n\t\t\t// v is T\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst opToken = sourceCode.getTokenAfter(node.parameterName, {\n\t\t\t\tfilter: isNotClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst rightToken =\n\t\t\t\tnode.typeAnnotation && getFirstAndLastTokens(sourceCode, node.typeAnnotation).firstToken;\n\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[opToken, rightToken],\n\t\t\t\t1,\n\t\t\t\tgetFirstAndLastTokens(sourceCode, firstToken).firstToken\n\t\t\t);\n\t\t},\n\t\tTSAbstractMethodDefinition(\n\t\t\tnode:\n\t\t\t\t| TSESTree.TSAbstractMethodDefinition\n\t\t\t\t| TSESTree.TSAbstractPropertyDefinition\n\t\t\t\t| TSESTree.TSAbstractAccessorProperty\n\t\t\t\t| TSESTree.TSEnumMember\n\t\t) {\n\t\t\tconst { keyNode, valueNode } =\n\t\t\t\tnode.type === 'TSEnumMember'\n\t\t\t\t\t? { keyNode: node.id, valueNode: node.initializer }\n\t\t\t\t\t: { keyNode: node.key, valueNode: node.value };\n\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst keyTokens = getFirstAndLastTokens(sourceCode, keyNode);\n\t\t\tconst prefixTokens = sourceCode.getTokensBetween(firstToken, keyTokens.firstToken);\n\t\t\tif (node.computed) {\n\t\t\t\tprefixTokens.pop(); // pop [\n\t\t\t}\n\t\t\toffsets.setOffsetToken(prefixTokens, 0, firstToken);\n\n\t\t\tlet lastKeyToken: AST.Token;\n\t\t\tif (node.computed) {\n\t\t\t\tconst leftBracketToken = sourceCode.getTokenBefore(keyTokens.firstToken)!;\n\t\t\t\tconst rightBracketToken = (lastKeyToken = sourceCode.getTokenAfter(keyTokens.lastToken)!);\n\t\t\t\toffsets.setOffsetToken(leftBracketToken, 0, firstToken);\n\t\t\t\toffsets.setOffsetElementList([keyNode], leftBracketToken, rightBracketToken, 1);\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(keyTokens.firstToken, 0, firstToken);\n\t\t\t\tlastKeyToken = keyTokens.lastToken;\n\t\t\t}\n\n\t\t\tif (valueNode != null) {\n\t\t\t\tconst initToken = sourceCode.getFirstToken(valueNode);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(lastKeyToken, initToken), initToken],\n\t\t\t\t\t1,\n\t\t\t\t\tlastKeyToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tTSAbstractPropertyDefinition(node: TSESTree.TSAbstractPropertyDefinition) {\n\t\t\tvisitor.TSAbstractMethodDefinition(node);\n\t\t},\n\t\tTSEnumMember(node: TSESTree.TSEnumMember) {\n\t\t\tvisitor.TSAbstractMethodDefinition(node);\n\t\t},\n\t\tTSAbstractAccessorProperty(node: TSESTree.TSAbstractAccessorProperty) {\n\t\t\tvisitor.TSAbstractMethodDefinition(node);\n\t\t},\n\t\tTSOptionalType(node: TSESTree.TSOptionalType | TSESTree.TSNonNullExpression) {\n\t\t\t// [number?]\n\t\t\t//  ^^^^^^^\n\t\t\toffsets.setOffsetToken(sourceCode.getLastToken(node), 1, sourceCode.getFirstToken(node));\n\t\t},\n\t\tTSNonNullExpression(node: TSESTree.TSNonNullExpression) {\n\t\t\t// v!\n\t\t\tvisitor.TSOptionalType(node);\n\t\t},\n\t\tTSJSDocNonNullableType(\n\t\t\t// @ts-expect-error -- Missing TSJSDocNonNullableType type\n\t\t\tnode: TSESTree.TSJSDocNonNullableType\n\t\t) {\n\t\t\t// T!\n\t\t\tvisitor.TSOptionalType(node);\n\t\t},\n\t\tTSTypeAssertion(node: TSESTree.TSTypeAssertion) {\n\t\t\t// <const>\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst expressionToken = getFirstAndLastTokens(sourceCode, node.expression).firstToken;\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\t[node.typeAnnotation],\n\t\t\t\tfirstToken,\n\t\t\t\tsourceCode.getTokenBefore(expressionToken),\n\t\t\t\t1\n\t\t\t);\n\t\t\toffsets.setOffsetToken(expressionToken, 1, firstToken);\n\t\t},\n\t\tTSImportType(node: TSESTree.TSImportType) {\n\t\t\t// import('foo').B\n\t\t\tconst typeArguments =\n\t\t\t\tnode.typeArguments ??\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t(node as any).typeParameters;\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(firstToken, {\n\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, firstToken);\n\t\t\tconst args: (TSESTree.TypeNode | TSESTree.StringLiteral | TSESTree.ObjectExpression)[] = [];\n\t\t\tif (node.source) {\n\t\t\t\targs.push(node.source);\n\t\t\t\tif (node.options) {\n\t\t\t\t\targs.push(node.options);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// typescript-eslint<v8.48 node\n\t\t\t\targs.push(\n\t\t\t\t\tnode.argument ||\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- typescript-eslint<v6 node\n\t\t\t\t\t\t(node as any).parameter\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst rightParenToken = sourceCode.getTokenAfter(args[args.length - 1], {\n\t\t\t\tfilter: isClosingParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\toffsets.setOffsetElementList(args, leftParenToken, rightParenToken, 1);\n\t\t\tif (node.qualifier) {\n\t\t\t\tconst dotToken = sourceCode.getTokenBefore(node.qualifier)!;\n\t\t\t\tconst propertyToken = sourceCode.getTokenAfter(dotToken);\n\t\t\t\toffsets.setOffsetToken([dotToken, propertyToken], 1, firstToken);\n\t\t\t}\n\t\t\tif (typeArguments) {\n\t\t\t\toffsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);\n\t\t\t}\n\t\t},\n\t\tTSParameterProperty(node: TSESTree.TSParameterProperty) {\n\t\t\t// constructor(private a)\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst parameterToken = sourceCode.getFirstToken(node.parameter);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[...sourceCode.getTokensBetween(firstToken, parameterToken), parameterToken],\n\t\t\t\t1,\n\t\t\t\tfirstToken\n\t\t\t);\n\t\t},\n\t\tTSImportEqualsDeclaration(node: TSESTree.TSImportEqualsDeclaration) {\n\t\t\t// import foo = require('foo')\n\t\t\tconst importToken = sourceCode.getFirstToken(node);\n\t\t\tconst idTokens = getFirstAndLastTokens(sourceCode, node.id);\n\t\t\toffsets.setOffsetToken(idTokens.firstToken, 1, importToken);\n\n\t\t\tconst opToken = sourceCode.getTokenAfter(idTokens.lastToken);\n\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[opToken, sourceCode.getFirstToken(node.moduleReference)],\n\t\t\t\t1,\n\t\t\t\tidTokens.lastToken\n\t\t\t);\n\t\t},\n\t\tTSExternalModuleReference(node: TSESTree.TSExternalModuleReference) {\n\t\t\t// require('foo')\n\t\t\tconst requireToken = sourceCode.getFirstToken(node);\n\t\t\tconst leftParenToken = sourceCode.getTokenAfter(requireToken, {\n\t\t\t\tfilter: isOpeningParenToken,\n\t\t\t\tincludeComments: false\n\t\t\t})!;\n\t\t\tconst rightParenToken = sourceCode.getLastToken(node);\n\n\t\t\toffsets.setOffsetToken(leftParenToken, 1, requireToken);\n\t\t\toffsets.setOffsetElementList([node.expression], leftParenToken, rightParenToken, 1);\n\t\t},\n\t\tTSExportAssignment(node: TSESTree.TSExportAssignment) {\n\t\t\t// export = foo\n\t\t\tconst exportNode = sourceCode.getFirstToken(node);\n\t\t\tconst exprTokens = getFirstAndLastTokens(sourceCode, node.expression);\n\t\t\tconst opToken = sourceCode.getTokenBefore(exprTokens.firstToken);\n\n\t\t\toffsets.setOffsetToken([opToken, exprTokens.firstToken], 1, exportNode);\n\t\t},\n\t\tTSNamedTupleMember(node: TSESTree.TSNamedTupleMember) {\n\t\t\t// [a: string, ...b: string[]]\n\t\t\t//  ^^^^^^^^^\n\t\t\tconst labelToken = sourceCode.getFirstToken(node);\n\t\t\tconst elementTokens = getFirstAndLastTokens(sourceCode, node.elementType);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[\n\t\t\t\t\t...sourceCode.getTokensBetween(labelToken, elementTokens.firstToken),\n\t\t\t\t\telementTokens.firstToken\n\t\t\t\t],\n\t\t\t\t1,\n\t\t\t\tlabelToken\n\t\t\t);\n\t\t},\n\t\tTSRestType(node: TSESTree.TSRestType) {\n\t\t\t// [a: string, ...b: string[]]\n\t\t\t//             ^^^^^^^^^^^^^^\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst nextToken = sourceCode.getTokenAfter(firstToken);\n\n\t\t\toffsets.setOffsetToken(nextToken, 1, firstToken);\n\t\t},\n\t\tTSNamespaceExportDeclaration(node: TSESTree.TSNamespaceExportDeclaration) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst idToken = sourceCode.getFirstToken(node.id);\n\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[...sourceCode.getTokensBetween(firstToken, idToken), idToken],\n\t\t\t\t1,\n\t\t\t\tfirstToken\n\t\t\t);\n\t\t},\n\t\tTSTemplateLiteralType(node: TSESTree.TSTemplateLiteralType) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst quasiTokens = node.quasis.slice(1).map((n) => sourceCode.getFirstToken(n));\n\t\t\tconst expressionToken = node.quasis.slice(0, -1).map((n) => sourceCode.getTokenAfter(n));\n\n\t\t\toffsets.setOffsetToken(quasiTokens, 0, firstToken);\n\t\t\toffsets.setOffsetToken(expressionToken, 1, firstToken);\n\t\t},\n\n\t\t// ----------------------------------------------------------------------\n\t\t// NON-STANDARD NODES\n\t\t// ----------------------------------------------------------------------\n\t\tDecorator(node: TSESTree.Decorator) {\n\t\t\t// @Decorator\n\t\t\tconst [atToken, secondToken] = sourceCode.getFirstTokens(node, {\n\t\t\t\tcount: 2,\n\t\t\t\tincludeComments: false\n\t\t\t});\n\t\t\toffsets.setOffsetToken(secondToken, 0, atToken);\n\n\t\t\tconst parent = node.parent;\n\t\t\tconst { decorators } = parent as { decorators?: TSESTree.Decorator[] };\n\t\t\tif (!decorators || decorators.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (decorators[0] === node) {\n\t\t\t\tif (parent.range[0] === node.range[0]) {\n\t\t\t\t\tconst startParentToken = sourceCode.getTokenAfter(decorators[decorators?.length - 1]);\n\t\t\t\t\toffsets.setOffsetToken(startParentToken, 0, atToken);\n\t\t\t\t} else {\n\t\t\t\t\tconst startParentToken = sourceCode.getFirstToken(\n\t\t\t\t\t\tparent.parent &&\n\t\t\t\t\t\t\t(parent.parent.type === 'ExportDefaultDeclaration' ||\n\t\t\t\t\t\t\t\tparent.parent.type === 'ExportNamedDeclaration') &&\n\t\t\t\t\t\t\tnode.range[0] < parent.parent.range[0]\n\t\t\t\t\t\t\t? parent.parent\n\t\t\t\t\t\t\t: parent\n\t\t\t\t\t);\n\t\t\t\t\toffsets.copyOffset(atToken.range[0], startParentToken.range[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(atToken, 0, sourceCode.getFirstToken(decorators[0]));\n\t\t\t}\n\t\t},\n\t\tAccessorProperty(node: TSESTree.AccessorProperty) {\n\t\t\tconst keyNode = node.key;\n\t\t\tconst valueNode = node.value;\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst keyTokens = getFirstAndLastTokens(sourceCode, keyNode);\n\t\t\tconst prefixTokens = sourceCode.getTokensBetween(firstToken, keyTokens.firstToken);\n\t\t\tif (node.computed) {\n\t\t\t\tprefixTokens.pop(); // pop [\n\t\t\t}\n\t\t\toffsets.setOffsetToken(prefixTokens, 0, firstToken);\n\t\t\tlet lastKeyToken;\n\t\t\tif (node.computed) {\n\t\t\t\tconst leftBracketToken = sourceCode.getTokenBefore(keyTokens.firstToken)!;\n\t\t\t\tconst rightBracketToken = (lastKeyToken = sourceCode.getTokenAfter(keyTokens.lastToken)!);\n\t\t\t\toffsets.setOffsetToken(leftBracketToken, 0, firstToken);\n\t\t\t\toffsets.setOffsetElementList([keyNode], leftBracketToken, rightBracketToken, 1);\n\t\t\t} else {\n\t\t\t\toffsets.setOffsetToken(keyTokens.firstToken, 0, firstToken);\n\t\t\t\tlastKeyToken = keyTokens.lastToken;\n\t\t\t}\n\n\t\t\tif (valueNode != null) {\n\t\t\t\tconst initToken = sourceCode.getFirstToken(valueNode);\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\t[...sourceCode.getTokensBetween(lastKeyToken, initToken), initToken],\n\t\t\t\t\t1,\n\t\t\t\t\tlastKeyToken\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tStaticBlock(node: TSESTree.StaticBlock) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tlet next = sourceCode.getTokenAfter(firstToken);\n\t\t\twhile (next && isNotOpeningBraceToken(next)) {\n\t\t\t\toffsets.setOffsetToken(next, 0, firstToken);\n\t\t\t\tnext = sourceCode.getTokenAfter(next);\n\t\t\t}\n\t\t\toffsets.setOffsetToken(next, 0, firstToken);\n\t\t\toffsets.setOffsetElementList(node.body, next!, sourceCode.getLastToken(node), 1);\n\t\t},\n\t\tImportAttribute(node: TSESTree.ImportAttribute) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst keyTokens = getFirstAndLastTokens(sourceCode, node.key);\n\t\t\tconst prefixTokens = sourceCode.getTokensBetween(firstToken, keyTokens.firstToken);\n\t\t\toffsets.setOffsetToken(prefixTokens, 0, firstToken);\n\n\t\t\toffsets.setOffsetToken(keyTokens.firstToken, 0, firstToken);\n\n\t\t\tconst initToken = sourceCode.getFirstToken(node.value);\n\t\t\toffsets.setOffsetToken(\n\t\t\t\t[...sourceCode.getTokensBetween(keyTokens.lastToken, initToken), initToken],\n\t\t\t\t1,\n\t\t\t\tkeyTokens.lastToken\n\t\t\t);\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// SINGLE TOKEN NODES\n\t\t// ----------------------------------------------------------------------\n\t\t// VALUES KEYWORD\n\t\tTSAnyKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSBigIntKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSBooleanKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSNeverKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSNullKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSNumberKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSObjectKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSStringKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSSymbolKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSUndefinedKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSUnknownKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSVoidKeyword() {\n\t\t\t// noop\n\t\t},\n\t\t// MODIFIERS KEYWORD\n\t\tTSAbstractKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSAsyncKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSPrivateKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSProtectedKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSPublicKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSReadonlyKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSStaticKeyword() {\n\t\t\t// noop\n\t\t},\n\t\t// OTHERS KEYWORD\n\t\tTSDeclareKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSExportKeyword() {\n\t\t\t// noop\n\t\t},\n\t\tTSIntrinsicKeyword() {\n\t\t\t// noop\n\t\t},\n\t\t// OTHERS\n\t\tTSThisType() {\n\t\t\t// noop\n\t\t},\n\t\t// ----------------------------------------------------------------------\n\t\t// WRAPPER NODES\n\t\t// ----------------------------------------------------------------------\n\t\tTSLiteralType() {\n\t\t\t// noop\n\t\t}\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\tconst commonsVisitor: any = {\n\t\t// Process semicolons.\n\t\t['TSTypeAliasDeclaration, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSImportEqualsDeclaration,' +\n\t\t\t'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, AccessorProperty,  TSAbstractAccessorProperty, TSEnumMember,' +\n\t\t\t'TSPropertySignature, TSIndexSignature, TSMethodSignature,' +\n\t\t\t'TSAbstractClassProperty, ClassProperty'](node: TSESTree.Node) {\n\t\t\tconst firstToken = sourceCode.getFirstToken(node);\n\t\t\tconst lastToken = sourceCode.getLastToken(node);\n\t\t\tif (isSemicolonToken(lastToken) && firstToken !== lastToken) {\n\t\t\t\tconst next = sourceCode.getTokenAfter(lastToken);\n\t\t\t\tif (!next || lastToken.loc.start.line < next.loc.start.line) {\n\t\t\t\t\t// End of line semicolons\n\t\t\t\t\toffsets.setOffsetToken(lastToken, 0, firstToken);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'*[type=/^TS/]'(node: TSESTree.Node) {\n\t\t\tif (\n\t\t\t\tnode.type !== 'TSAnyKeyword' &&\n\t\t\t\tnode.type !== 'TSArrayType' &&\n\t\t\t\tnode.type !== 'TSBigIntKeyword' &&\n\t\t\t\tnode.type !== 'TSBooleanKeyword' &&\n\t\t\t\tnode.type !== 'TSConditionalType' &&\n\t\t\t\tnode.type !== 'TSConstructorType' &&\n\t\t\t\tnode.type !== 'TSFunctionType' &&\n\t\t\t\tnode.type !== 'TSImportType' &&\n\t\t\t\tnode.type !== 'TSIndexedAccessType' &&\n\t\t\t\tnode.type !== 'TSInferType' &&\n\t\t\t\tnode.type !== 'TSIntersectionType' &&\n\t\t\t\tnode.type !== 'TSIntrinsicKeyword' &&\n\t\t\t\tnode.type !== 'TSLiteralType' &&\n\t\t\t\tnode.type !== 'TSMappedType' &&\n\t\t\t\tnode.type !== 'TSNamedTupleMember' &&\n\t\t\t\tnode.type !== 'TSNeverKeyword' &&\n\t\t\t\tnode.type !== 'TSNullKeyword' &&\n\t\t\t\tnode.type !== 'TSNumberKeyword' &&\n\t\t\t\tnode.type !== 'TSObjectKeyword' &&\n\t\t\t\tnode.type !== 'TSOptionalType' &&\n\t\t\t\tnode.type !== 'TSRestType' &&\n\t\t\t\tnode.type !== 'TSStringKeyword' &&\n\t\t\t\tnode.type !== 'TSSymbolKeyword' &&\n\t\t\t\tnode.type !== 'TSTemplateLiteralType' &&\n\t\t\t\tnode.type !== 'TSThisType' &&\n\t\t\t\tnode.type !== 'TSTupleType' &&\n\t\t\t\tnode.type !== 'TSTypeLiteral' &&\n\t\t\t\tnode.type !== 'TSTypeOperator' &&\n\t\t\t\tnode.type !== 'TSTypePredicate' &&\n\t\t\t\tnode.type !== 'TSTypeQuery' &&\n\t\t\t\tnode.type !== 'TSTypeReference' &&\n\t\t\t\tnode.type !== 'TSUndefinedKeyword' &&\n\t\t\t\tnode.type !== 'TSUnionType' &&\n\t\t\t\tnode.type !== 'TSUnknownKeyword' &&\n\t\t\t\tnode.type !== 'TSVoidKeyword'\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst typeNode: TSESTree.TypeNode = node;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\t\t\tif ((typeNode.parent as any).type === 'TSParenthesizedType') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process parentheses.\n\t\t\tlet leftToken = sourceCode.getTokenBefore(typeNode);\n\t\t\tlet rightToken = sourceCode.getTokenAfter(typeNode);\n\t\t\tlet firstToken = sourceCode.getFirstToken(typeNode);\n\n\t\t\twhile (\n\t\t\t\tleftToken &&\n\t\t\t\tisOpeningParenToken(leftToken) &&\n\t\t\t\trightToken &&\n\t\t\t\tisClosingParenToken(rightToken)\n\t\t\t) {\n\t\t\t\toffsets.setOffsetToken(firstToken, 1, leftToken);\n\t\t\t\toffsets.setOffsetToken(rightToken, 0, leftToken);\n\n\t\t\t\tfirstToken = leftToken;\n\t\t\t\tleftToken = sourceCode.getTokenBefore(leftToken);\n\t\t\t\trightToken = sourceCode.getTokenAfter(rightToken);\n\t\t\t}\n\t\t}\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\tconst extendsESVisitor: any = {\n\t\t['ClassDeclaration[implements], ClassDeclaration[typeParameters], ClassDeclaration[superTypeParameters],' +\n\t\t\t'ClassExpression[implements], ClassExpression[typeParameters], ClassExpression[superTypeParameters]'](\n\t\t\tnode: TSESTree.ClassDeclaration | TSESTree.ClassExpression\n\t\t) {\n\t\t\tif (node.typeParameters != null) {\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\tsourceCode.getFirstToken(node.typeParameters),\n\t\t\t\t\t1,\n\t\t\t\t\tsourceCode.getFirstToken(node.id || node)\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst superTypeArguments =\n\t\t\t\tnode.superTypeArguments ??\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t(node as any).superTypeParameters;\n\t\t\tif (superTypeArguments != null && node.superClass != null) {\n\t\t\t\toffsets.setOffsetToken(\n\t\t\t\t\tsourceCode.getFirstToken(superTypeArguments),\n\t\t\t\t\t1,\n\t\t\t\t\tsourceCode.getFirstToken(node.superClass)\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (node.implements != null && node.implements.length) {\n\t\t\t\tconst classToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst implementsToken = sourceCode.getTokenBefore(node.implements[0])!;\n\t\t\t\toffsets.setOffsetToken(implementsToken, 1, classToken);\n\n\t\t\t\toffsets.setOffsetElementList(node.implements, implementsToken, null, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\tconst deprecatedVisitor: any = {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\t\tTSParenthesizedType(node: any) {\n\t\t\t// (T)\n\t\t\toffsets.setOffsetElementList(\n\t\t\t\t[node.typeAnnotation],\n\t\t\t\tsourceCode.getFirstToken(node),\n\t\t\t\tsourceCode.getLastToken(node),\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\t\tClassProperty(node: any) {\n\t\t\tvisitor.TSAbstractMethodDefinition(node);\n\t\t},\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\t\tTSAbstractClassProperty(node: any) {\n\t\t\tvisitor.TSAbstractMethodDefinition(node);\n\t\t}\n\t};\n\tconst v: NodeListener = visitor;\n\n\treturn {\n\t\t...v,\n\t\t...commonsVisitor,\n\t\t...extendsESVisitor,\n\t\t...deprecatedVisitor\n\t};\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/indent.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { defineVisitor } from './indent-helpers/index.js';\n\nexport default createRule('indent', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce consistent indentation',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'whitespace',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tindent: {\n\t\t\t\t\t\tanyOf: [{ type: 'integer', minimum: 1 }, { enum: ['tab'] }]\n\t\t\t\t\t},\n\t\t\t\t\tindentScript: { type: 'boolean' },\n\t\t\t\t\tswitchCase: { type: 'integer', minimum: 0 },\n\t\t\t\t\talignAttributesVertically: { type: 'boolean' },\n\t\t\t\t\tignoredNodes: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tallOf: [\n\t\t\t\t\t\t\t\t{ type: 'string' },\n\t\t\t\t\t\t\t\t{ not: { type: 'string', pattern: ':exit$' } },\n\t\t\t\t\t\t\t\t{ not: { type: 'string', pattern: '^\\\\s*$' } }\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tuniqueItems: true,\n\t\t\t\t\t\tadditionalItems: false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunexpectedChar: 'Expected {{expected}} character, but found {{actual}} character.',\n\t\t\tunexpectedIndentation:\n\t\t\t\t'Expected indentation of {{expectedIndent}} {{expectedUnit}}{{expectedIndentPlural}} but found {{actualIndent}} {{actualUnit}}{{actualIndentPlural}}.'\n\t\t},\n\t\ttype: 'layout' // \"problem\",\n\t},\n\tcreate(context) {\n\t\treturn defineVisitor(context, {});\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { AST } from 'svelte-eslint-parser';\nimport { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport { createRule } from '../utils/index.js';\nimport type { RuleContext } from '../types.js';\nimport { findVariable } from '../utils/ast-utils.js';\nimport { traverseNodes } from 'svelte-eslint-parser';\n\n/**\n * Get usage of `tick`\n */\nfunction extractTickReferences(\n\tcontext: RuleContext\n): { node: TSESTree.CallExpression; name: string }[] {\n\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\tconst a = referenceTracker.iterateEsmReferences({\n\t\tsvelte: {\n\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\ttick: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t}\n\t\t}\n\t});\n\treturn Array.from(a).map(({ node, path }) => {\n\t\treturn {\n\t\t\tnode: node as TSESTree.CallExpression,\n\t\t\tname: path[path.length - 1]\n\t\t};\n\t});\n}\n\n/**\n * Get usage of `setTimeout`, `setInterval`, `queueMicrotask`\n */\nfunction extractTaskReferences(\n\tcontext: RuleContext\n): { node: TSESTree.CallExpression; name: string }[] {\n\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\tconst a = referenceTracker.iterateGlobalReferences({\n\t\tsetTimeout: { [ReferenceTracker.CALL]: true },\n\t\tsetInterval: { [ReferenceTracker.CALL]: true },\n\t\tqueueMicrotask: { [ReferenceTracker.CALL]: true }\n\t});\n\treturn Array.from(a).map(({ node, path }) => {\n\t\treturn {\n\t\t\tnode: node as TSESTree.CallExpression,\n\t\t\tname: path[path.length - 1]\n\t\t};\n\t});\n}\n\n/**\n * If `node` is inside of `maybeAncestorNode`, return true.\n */\nfunction isChildNode(\n\tmaybeAncestorNode: TSESTree.Node | AST.SvelteNode,\n\tnode: TSESTree.Node\n): boolean {\n\tlet parent = node.parent;\n\twhile (parent) {\n\t\tif (parent === maybeAncestorNode) return true;\n\t\tparent = parent.parent;\n\t}\n\treturn false;\n}\n\n/**\n * Return true if `node` is a function call.\n */\nfunction isFunctionCall(node: TSESTree.Node): boolean {\n\tif (node.type !== 'Identifier') return false;\n\tconst { parent } = node;\n\tif (parent?.type !== 'CallExpression') return false;\n\treturn parent.callee.type === 'Identifier' && parent.callee.name === node.name;\n}\n\n/**\n * Return true if `node` is a reactive variable.\n */\nfunction isReactiveVariableNode(\n\treactiveVariableReferences: TSESTree.Identifier[],\n\tnode: TSESTree.Node\n): node is TSESTree.Identifier {\n\tif (node.type !== 'Identifier') return false;\n\treturn reactiveVariableReferences.includes(node);\n}\n\n/**\n * e.g. foo.bar = baz + 1\n * If node is `foo`, return true.\n * Otherwise, return false.\n */\nfunction isNodeForAssign(node: TSESTree.Identifier): boolean {\n\tconst { parent } = node;\n\tif (parent?.type === 'AssignmentExpression') {\n\t\treturn parent.left.type === 'Identifier' && parent.left.name === node.name;\n\t}\n\treturn (\n\t\tparent?.type === 'MemberExpression' &&\n\t\tparent.parent?.type === 'AssignmentExpression' &&\n\t\tparent.parent.left.type === 'MemberExpression' &&\n\t\tparent.parent.left.object.type === 'Identifier' &&\n\t\tparent.parent.left.object.name === node.name\n\t);\n}\n\n/**\n * Return true if `node` is inside of `then` or `catch`.\n */\nfunction isPromiseThenOrCatchBody(node: TSESTree.Node): boolean {\n\tif (!getDeclarationBody(node)) return false;\n\tconst { parent } = node;\n\tif (parent?.type !== 'CallExpression' || parent?.callee?.type !== 'MemberExpression') {\n\t\treturn false;\n\t}\n\tconst { property } = parent.callee;\n\tif (property?.type !== 'Identifier') return false;\n\treturn ['then', 'catch'].includes(property.name);\n}\n\n/**\n * Get all reactive variable reference.\n */\nfunction getReactiveVariableReferences(context: RuleContext) {\n\tconst scopeManager = context.sourceCode.scopeManager;\n\t// Find the top-level (module or global) scope.\n\t// Any variable defined at the top-level (module scope or global scope) can be made reactive.\n\tconst toplevelScope =\n\t\tscopeManager.globalScope?.childScopes.find((scope) => scope.type === 'module') ||\n\t\tscopeManager.globalScope;\n\tif (!toplevelScope) {\n\t\treturn [];\n\t}\n\n\t// Extracts all reactive references to variables defined in the top-level scope.\n\tconst reactiveVariableNodes: TSESTree.Identifier[] = [];\n\tfor (const variable of toplevelScope.variables) {\n\t\tfor (const reference of variable.references) {\n\t\t\tif (reference.identifier.type === 'Identifier' && !isFunctionCall(reference.identifier)) {\n\t\t\t\treactiveVariableNodes.push(reference.identifier);\n\t\t\t}\n\t\t}\n\t}\n\treturn reactiveVariableNodes;\n}\n\n/**\n * Get all tracked reactive variables.\n */\nfunction getTrackedVariableNodes(\n\treactiveVariableReferences: TSESTree.Identifier[],\n\tast: AST.SvelteReactiveStatement\n) {\n\tconst reactiveVariableNodes: Set<TSESTree.Identifier> = new Set();\n\tfor (const identifier of reactiveVariableReferences) {\n\t\tif (\n\t\t\t// If the identifier is within the reactive statement range,\n\t\t\t// it is used within the reactive statement.\n\t\t\tast.range[0] <= identifier.range[0] &&\n\t\t\tidentifier.range[1] <= ast.range[1]\n\t\t) {\n\t\t\treactiveVariableNodes.add(identifier);\n\t\t}\n\t}\n\treturn reactiveVariableNodes;\n}\n\n/**  */\nfunction getDeclarationBody(\n\tnode: TSESTree.Node,\n\tfunctionName?: string\n): TSESTree.BlockStatement | TSESTree.Expression | null {\n\tif (\n\t\tnode.type === 'VariableDeclarator' &&\n\t\tnode.id.type === 'Identifier' &&\n\t\t(!functionName || node.id.name === functionName)\n\t) {\n\t\tif (node.init?.type === 'ArrowFunctionExpression' || node.init?.type === 'FunctionExpression') {\n\t\t\treturn node.init.body;\n\t\t}\n\t} else if (\n\t\tnode.type === 'FunctionDeclaration' &&\n\t\tnode.id?.type === 'Identifier' &&\n\t\t(!functionName || node.id?.name === functionName)\n\t) {\n\t\treturn node.body;\n\t} else if (!functionName && node.type === 'ArrowFunctionExpression') {\n\t\treturn node.body;\n\t}\n\treturn null;\n}\n\n/**  */\nfunction getFunctionDeclarationNode(\n\tcontext: RuleContext,\n\tfunctionCall: TSESTree.Identifier\n): TSESTree.BlockStatement | TSESTree.Expression | null {\n\tconst variable = findVariable(context, functionCall);\n\tif (!variable) {\n\t\treturn null;\n\t}\n\tfor (const def of variable.defs) {\n\t\tif (def.type === 'FunctionName') {\n\t\t\tif (def.node.type === 'FunctionDeclaration') {\n\t\t\t\treturn def.node.body;\n\t\t\t}\n\t\t}\n\t\tif (def.type === 'Variable') {\n\t\t\tif (\n\t\t\t\tdef.node.init &&\n\t\t\t\t(def.node.init.type === 'FunctionExpression' ||\n\t\t\t\t\tdef.node.init.type === 'ArrowFunctionExpression')\n\t\t\t) {\n\t\t\t\treturn def.node.init.body;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * If the node is inside of a function, return true.\n *\n * e.g. `$: await foo()`\n * if `node` is `foo`, return false because reactive statement is not function.\n *\n * e.g. `const bar = () => foo()`\n * if `node` is `foo`, return true.\n *\n */\nfunction isInsideOfFunction(node: TSESTree.Node) {\n\tlet parent: TSESTree.Node | AST.SvelteReactiveStatement | null = node;\n\twhile (parent) {\n\t\tparent = parent.parent as TSESTree.Node | AST.SvelteReactiveStatement | null;\n\t\tif (!parent) break;\n\t\tif (parent.type === 'FunctionDeclaration' && parent.async) return true;\n\t\tif (\n\t\t\tparent.type === 'VariableDeclarator' &&\n\t\t\t(parent.init?.type === 'FunctionExpression' ||\n\t\t\t\tparent.init?.type === 'ArrowFunctionExpression') &&\n\t\t\tparent.init?.async\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Let's lint! */\nfunction doLint(\n\tcontext: RuleContext,\n\tast: TSESTree.Node,\n\tcallFuncIdentifiers: TSESTree.Identifier[],\n\ttickCallExpressions: { node: TSESTree.CallExpression; name: string }[],\n\ttaskReferences: {\n\t\tnode: TSESTree.CallExpression;\n\t\tname: string;\n\t}[],\n\treactiveVariableNames: string[],\n\treactiveVariableReferences: TSESTree.Identifier[],\n\tpIsSameTask: boolean\n) {\n\tconst processed = new Set<TSESTree.Node>();\n\tverifyInternal(ast, callFuncIdentifiers, pIsSameTask);\n\n\t/** verify for node */\n\tfunction verifyInternal(\n\t\tast: TSESTree.Node,\n\t\tcallFuncIdentifiers: TSESTree.Identifier[],\n\t\tpIsSameTask: boolean\n\t) {\n\t\tif (processed.has(ast)) {\n\t\t\t// Avoid infinite recursion with recursive references.\n\t\t\treturn;\n\t\t}\n\t\tprocessed.add(ast);\n\n\t\tlet isSameMicroTask = pIsSameTask;\n\n\t\tconst differentMicroTaskEnterNodes: TSESTree.Node[] = [];\n\n\t\ttraverseNodes(ast, {\n\t\t\tenterNode(node) {\n\t\t\t\t// Promise.then() or Promise.catch() is called.\n\t\t\t\tif (isPromiseThenOrCatchBody(node)) {\n\t\t\t\t\tdifferentMicroTaskEnterNodes.push(node);\n\t\t\t\t\tisSameMicroTask = false;\n\t\t\t\t}\n\n\t\t\t\t// `tick`, `setTimeout`, `setInterval` , `queueMicrotask` is called\n\t\t\t\tfor (const { node: callExpression } of [...tickCallExpressions, ...taskReferences]) {\n\t\t\t\t\tif (isChildNode(callExpression, node)) {\n\t\t\t\t\t\tdifferentMicroTaskEnterNodes.push(node);\n\t\t\t\t\t\tisSameMicroTask = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// left side of await block\n\t\t\t\tif (\n\t\t\t\t\tnode.parent?.type === 'AssignmentExpression' &&\n\t\t\t\t\tnode.parent?.right.type === 'AwaitExpression' &&\n\t\t\t\t\tnode.parent?.left === node\n\t\t\t\t) {\n\t\t\t\t\tdifferentMicroTaskEnterNodes.push(node);\n\t\t\t\t\tisSameMicroTask = false;\n\t\t\t\t}\n\n\t\t\t\tif (node.type === 'Identifier' && isFunctionCall(node)) {\n\t\t\t\t\t// traverse used functions body\n\t\t\t\t\tconst functionDeclarationNode = getFunctionDeclarationNode(context, node);\n\t\t\t\t\tif (functionDeclarationNode) {\n\t\t\t\t\t\tverifyInternal(\n\t\t\t\t\t\t\tfunctionDeclarationNode,\n\t\t\t\t\t\t\t[...callFuncIdentifiers, node],\n\t\t\t\t\t\t\tisSameMicroTask\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!isSameMicroTask) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tisReactiveVariableNode(reactiveVariableReferences, node) &&\n\t\t\t\t\t\treactiveVariableNames.includes(node.name) &&\n\t\t\t\t\t\tisNodeForAssign(node)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\t\tmessageId: 'unexpected'\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcallFuncIdentifiers.forEach((callFuncIdentifier) => {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode: callFuncIdentifier,\n\t\t\t\t\t\t\t\tloc: callFuncIdentifier.loc,\n\t\t\t\t\t\t\t\tmessageId: 'unexpectedCall',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tvariableName: node.name\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tleaveNode(node) {\n\t\t\t\tif (node.type === 'AwaitExpression') {\n\t\t\t\t\tif ((ast.parent?.type as string) === 'SvelteReactiveStatement') {\n\t\t\t\t\t\t// MEMO: It checks that `await` is used in reactive statement directly or not.\n\t\t\t\t\t\t// If `await` is used in inner function of a reactive statement, result of `isInsideOfFunction` will be `true`.\n\t\t\t\t\t\tif (!isInsideOfFunction(node)) {\n\t\t\t\t\t\t\tisSameMicroTask = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisSameMicroTask = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (differentMicroTaskEnterNodes.includes(node)) {\n\t\t\t\t\tisSameMicroTask = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport default createRule('infinite-reactive-loop', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t\"Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.\",\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Possibly it may occur an infinite reactive loop.',\n\t\t\tunexpectedCall:\n\t\t\t\t'Possibly it may occur an infinite reactive loop because this function may update `{{variableName}}`.'\n\t\t},\n\t\ttype: 'suggestion',\n\t\t// Do not run this rule on Svelte 5 with runes.\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\t['SvelteReactiveStatement']: (ast: AST.SvelteReactiveStatement) => {\n\t\t\t\tconst tickCallExpressions = extractTickReferences(context);\n\t\t\t\tconst taskReferences = extractTaskReferences(context);\n\t\t\t\tconst reactiveVariableReferences = getReactiveVariableReferences(context);\n\t\t\t\tconst trackedVariableNodes = getTrackedVariableNodes(reactiveVariableReferences, ast);\n\n\t\t\t\tdoLint(\n\t\t\t\t\tcontext,\n\t\t\t\t\tast.body,\n\t\t\t\t\t[],\n\t\t\t\t\ttickCallExpressions,\n\t\t\t\t\ttaskReferences,\n\t\t\t\t\tArray.from(trackedVariableNodes).map((node) => node.name),\n\t\t\t\t\treactiveVariableReferences,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/max-attributes-per-line.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\n/**\n * Check whether the component is declared in a single line or not.\n */\nfunction isSingleLine(node: AST.SvelteStartTag) {\n\treturn node.loc.start.line === node.loc.end.line;\n}\n\n/**\n * Group attributes line by line.\n */\nfunction groupAttributesByLine(attributes: AST.SvelteStartTag['attributes']) {\n\tconst group: AST.SvelteStartTag['attributes'][] = [];\n\tfor (const attr of attributes) {\n\t\tif (group[0]?.[0]?.loc.end.line === attr.loc.start.line) {\n\t\t\tgroup[0].push(attr);\n\t\t} else {\n\t\t\tgroup.unshift([attr]);\n\t\t}\n\t}\n\n\treturn group.reverse();\n}\n\nexport default createRule('max-attributes-per-line', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce the maximum number of attributes per line',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'whitespace',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tmultiline: {\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tminimum: 1\n\t\t\t\t\t},\n\t\t\t\t\tsingleline: {\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tminimum: 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\trequireNewline: \"'{{name}}' should be on a new line.\"\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(context) {\n\t\tconst multilineMaximum = context.options[0]?.multiline ?? 1;\n\t\tconst singlelineMaximum = context.options[0]?.singleline ?? 1;\n\t\tconst sourceCode = context.sourceCode;\n\n\t\t/**\n\t\t * Report attributes\n\t\t */\n\t\tfunction report(attribute: AST.SvelteStartTag['attributes'][number] | undefined) {\n\t\t\tif (!attribute) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet name: string;\n\t\t\tif (\n\t\t\t\tattribute.type === 'SvelteAttribute' ||\n\t\t\t\tattribute.type === 'SvelteShorthandAttribute' ||\n\t\t\t\tattribute.type === 'SvelteDirective' ||\n\t\t\t\tattribute.type === 'SvelteStyleDirective' ||\n\t\t\t\tattribute.type === 'SvelteSpecialDirective'\n\t\t\t) {\n\t\t\t\tname = sourceCode.text.slice(...attribute.key.range);\n\t\t\t} else {\n\t\t\t\t// if (attribute.type === \"SvelteSpreadAttribute\")\n\t\t\t\tname = sourceCode.text.slice(...attribute.range);\n\t\t\t}\n\t\t\tcontext.report({\n\t\t\t\tnode: attribute,\n\t\t\t\tloc: attribute.loc,\n\t\t\t\tmessageId: 'requireNewline',\n\t\t\t\tdata: { name },\n\t\t\t\tfix(fixer) {\n\t\t\t\t\t// Find the closest token before the current attribute\n\t\t\t\t\t// that is not a white space\n\t\t\t\t\tconst prevToken = sourceCode.getTokenBefore(attribute, {\n\t\t\t\t\t\tincludeComments: true\n\t\t\t\t\t})!;\n\n\t\t\t\t\tconst range: AST.Range = [prevToken.range[1], attribute.range[0]];\n\n\t\t\t\t\treturn fixer.replaceTextRange(range, '\\n');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteStartTag(node) {\n\t\t\t\tconst numberOfAttributes = node.attributes.length;\n\n\t\t\t\tif (!numberOfAttributes) return;\n\n\t\t\t\tif (isSingleLine(node)) {\n\t\t\t\t\tif (numberOfAttributes > singlelineMaximum) {\n\t\t\t\t\t\treport(node.attributes[singlelineMaximum]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (const attrs of groupAttributesByLine(node.attributes)) {\n\t\t\t\t\t\treport(attrs[multilineMaximum]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/max-lines-per-block.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { Input } from 'postcss';\nimport tokenize from 'postcss/lib/tokenize';\nimport { createRule } from '../utils/index.js';\n\n/** Check if a comment occupies the entire source line (matching ESLint core max-lines behavior). */\nfunction isFullLineComment(line: string, lineNumber: number, loc: AST.SourceLocation): boolean {\n\treturn (\n\t\t(loc.start.line < lineNumber || !line.slice(0, loc.start.column).trim()) &&\n\t\t(loc.end.line > lineNumber || !line.slice(loc.end.column).trim())\n\t);\n}\n\n/** Collect line numbers where AST comments occupy the full line. */\nfunction collectAstCommentLines(\n\tcomments: { loc: AST.SourceLocation }[],\n\tsourceLines: string[],\n\tstartLine: number,\n\tendLine: number\n): Set<number> {\n\tconst lines = new Set<number>();\n\tfor (const comment of comments) {\n\t\tif (comment.loc.end.line < startLine || comment.loc.start.line > endLine) continue;\n\t\tfor (\n\t\t\tlet i = Math.max(comment.loc.start.line, startLine);\n\t\t\ti <= Math.min(comment.loc.end.line, endLine);\n\t\t\ti++\n\t\t) {\n\t\t\tif (isFullLineComment(sourceLines[i - 1], i, comment.loc)) {\n\t\t\t\tlines.add(i);\n\t\t\t}\n\t\t}\n\t}\n\treturn lines;\n}\n\n/** Collect line numbers where CSS comments occupy the full line, using postcss tokenizer. */\nfunction collectCssCommentLines(\n\tsourceLines: string[],\n\tstartLine: number,\n\tendLine: number\n): Set<number> {\n\tconst result = new Set<number>();\n\tconst cssText = sourceLines.slice(startLine - 1, endLine).join('\\n');\n\tif (!cssText.trim()) return result;\n\n\ttry {\n\t\tconst input = new Input(cssText);\n\t\tconst tk = tokenize(input);\n\t\tconst commentLines = new Set<number>();\n\t\tconst codeLines = new Set<number>();\n\n\t\tlet token;\n\t\twhile ((token = tk.nextToken())) {\n\t\t\tif (token[2] == null) continue;\n\t\t\tconst startPos = input.fromOffset(token[2]);\n\t\t\tif (!startPos) continue;\n\t\t\tconst tokenLine = startPos.line + startLine - 1;\n\n\t\t\tif (token[0] === 'comment') {\n\t\t\t\tconst endPos = token[3] != null ? input.fromOffset(token[3]) : null;\n\t\t\t\tconst commentEndLine = endPos ? endPos.line + startLine - 1 : tokenLine;\n\t\t\t\tfor (let i = tokenLine; i <= commentEndLine; i++) {\n\t\t\t\t\tcommentLines.add(i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcodeLines.add(tokenLine);\n\t\t\t}\n\t\t}\n\n\t\tfor (const line of commentLines) {\n\t\t\tif (!codeLines.has(line)) result.add(line);\n\t\t}\n\t} catch {\n\t\t// Malformed CSS — don't skip any lines\n\t}\n\n\treturn result;\n}\n\n/** Count inner content lines, skipping blanks and/or comment lines. */\nfunction countLines(\n\tsourceLines: string[],\n\tstartLine: number,\n\tendLine: number,\n\tskipBlankLines: boolean,\n\tcommentLines: Set<number>\n): number {\n\tif (endLine - startLine <= 1) return 0;\n\n\tlet count = 0;\n\tfor (let i = startLine + 1; i < endLine; i++) {\n\t\tif (skipBlankLines && sourceLines[i - 1].trim().length === 0) continue;\n\t\tif (commentLines.has(i)) continue;\n\t\tcount++;\n\t}\n\n\treturn count;\n}\n\nfunction isSvelteOptions(node: AST.SvelteElement): boolean {\n\treturn node.name.type === 'SvelteName' && node.name.name === 'svelte:options';\n}\n\nexport default createRule('max-lines-per-block', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce maximum number of lines in svelte component blocks',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tscript: {\n\t\t\t\t\t\ttype: 'integer',\n\t\t\t\t\t\tminimum: 1\n\t\t\t\t\t},\n\t\t\t\t\ttemplate: {\n\t\t\t\t\t\ttype: 'integer',\n\t\t\t\t\t\tminimum: 1\n\t\t\t\t\t},\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\ttype: 'integer',\n\t\t\t\t\t\tminimum: 1\n\t\t\t\t\t},\n\t\t\t\t\tskipBlankLines: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tskipComments: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\ttooManyLines:\n\t\t\t\t'{{block}} block has too many lines ({{lineCount}}). Maximum allowed is {{max}}.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst options = context.options[0] ?? {};\n\t\tconst scriptMax: number | undefined = options.script;\n\t\tconst templateMax: number | undefined = options.template;\n\t\tconst styleMax: number | undefined = options.style;\n\t\tconst skipBlankLines: boolean = options.skipBlankLines ?? false;\n\t\tconst skipComments: boolean = options.skipComments ?? false;\n\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst htmlCommentNodes: AST.SvelteHTMLComment[] = [];\n\t\tconst emptySet = new Set<number>();\n\n\t\treturn {\n\t\t\tSvelteHTMLComment(node: AST.SvelteHTMLComment) {\n\t\t\t\thtmlCommentNodes.push(node);\n\t\t\t},\n\n\t\t\tSvelteScriptElement(node: AST.SvelteScriptElement) {\n\t\t\t\tif (scriptMax == null) return;\n\n\t\t\t\tconst commentLines = skipComments\n\t\t\t\t\t? collectAstCommentLines(\n\t\t\t\t\t\t\tsourceCode.getAllComments(),\n\t\t\t\t\t\t\tsourceCode.lines,\n\t\t\t\t\t\t\tnode.loc.start.line + 1,\n\t\t\t\t\t\t\tnode.loc.end.line - 1\n\t\t\t\t\t\t)\n\t\t\t\t\t: emptySet;\n\n\t\t\t\tconst lineCount = countLines(\n\t\t\t\t\tsourceCode.lines,\n\t\t\t\t\tnode.loc.start.line,\n\t\t\t\t\tnode.loc.end.line,\n\t\t\t\t\tskipBlankLines,\n\t\t\t\t\tcommentLines\n\t\t\t\t);\n\n\t\t\t\tif (lineCount > scriptMax) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'tooManyLines',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tblock: '<script>',\n\t\t\t\t\t\t\tlineCount: String(lineCount),\n\t\t\t\t\t\t\tmax: String(scriptMax)\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tSvelteStyleElement(node: AST.SvelteStyleElement) {\n\t\t\t\tif (styleMax == null) return;\n\n\t\t\t\tconst commentLines = skipComments\n\t\t\t\t\t? collectCssCommentLines(sourceCode.lines, node.loc.start.line + 1, node.loc.end.line - 1)\n\t\t\t\t\t: emptySet;\n\n\t\t\t\tconst lineCount = countLines(\n\t\t\t\t\tsourceCode.lines,\n\t\t\t\t\tnode.loc.start.line,\n\t\t\t\t\tnode.loc.end.line,\n\t\t\t\t\tskipBlankLines,\n\t\t\t\t\tcommentLines\n\t\t\t\t);\n\n\t\t\t\tif (lineCount > styleMax) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'tooManyLines',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tblock: '<style>',\n\t\t\t\t\t\t\tlineCount: String(lineCount),\n\t\t\t\t\t\t\tmax: String(styleMax)\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t'Program:exit'(program: AST.SvelteProgram) {\n\t\t\t\tif (templateMax == null) return;\n\n\t\t\t\tconst totalLines = sourceCode.lines.length;\n\n\t\t\t\t// Exclude lines occupied by <script>, <style>, and <svelte:options>\n\t\t\t\tconst excludedLines = new Set<number>();\n\t\t\t\tfor (const child of program.body) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tchild.type === 'SvelteScriptElement' ||\n\t\t\t\t\t\tchild.type === 'SvelteStyleElement' ||\n\t\t\t\t\t\t(child.type === 'SvelteElement' && isSvelteOptions(child))\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (let i = child.loc.start.line; i <= child.loc.end.line; i++) {\n\t\t\t\t\t\t\texcludedLines.add(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Collect full-line comment lines for template region\n\t\t\t\tconst commentLines = new Set<number>();\n\t\t\t\tif (skipComments) {\n\t\t\t\t\tconst allComments: { loc: AST.SourceLocation }[] = [\n\t\t\t\t\t\t...htmlCommentNodes,\n\t\t\t\t\t\t...sourceCode.getAllComments()\n\t\t\t\t\t];\n\t\t\t\t\tfor (const comment of allComments) {\n\t\t\t\t\t\tfor (let i = comment.loc.start.line; i <= comment.loc.end.line; i++) {\n\t\t\t\t\t\t\tif (excludedLines.has(i)) continue;\n\t\t\t\t\t\t\tif (isFullLineComment(sourceCode.lines[i - 1], i, comment.loc)) {\n\t\t\t\t\t\t\t\tcommentLines.add(i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet templateLineCount = 0;\n\t\t\t\tfor (let i = 1; i <= totalLines; i++) {\n\t\t\t\t\tif (excludedLines.has(i)) continue;\n\t\t\t\t\tif (skipBlankLines && sourceCode.lines[i - 1].trim().length === 0) continue;\n\t\t\t\t\tif (commentLines.has(i)) continue;\n\t\t\t\t\ttemplateLineCount++;\n\t\t\t\t}\n\n\t\t\t\tif (templateLineCount > templateMax) {\n\t\t\t\t\tconst firstTemplateNode = program.body.find(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tchild\n\t\t\t\t\t\t): child is Exclude<\n\t\t\t\t\t\t\t(typeof program.body)[number],\n\t\t\t\t\t\t\tAST.SvelteScriptElement | AST.SvelteStyleElement\n\t\t\t\t\t\t> =>\n\t\t\t\t\t\t\tchild.type !== 'SvelteScriptElement' &&\n\t\t\t\t\t\t\tchild.type !== 'SvelteStyleElement' &&\n\t\t\t\t\t\t\t!(child.type === 'SvelteElement' && isSvelteOptions(child))\n\t\t\t\t\t);\n\t\t\t\t\tif (firstTemplateNode) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: firstTemplateNode,\n\t\t\t\t\t\t\tmessageId: 'tooManyLines',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tblock: 'template',\n\t\t\t\t\t\t\t\tlineCount: String(templateLineCount),\n\t\t\t\t\t\t\t\tmax: String(templateMax)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/mustache-spacing.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { isClosingBraceToken, isOpeningBraceToken } from '@eslint-community/eslint-utils';\nimport { createRule } from '../utils/index.js';\nimport { getMustacheTokens } from '../utils/ast-utils.js';\ntype DeepPartial<T> = {\n\t[P in keyof T]?: DeepPartial<T[P]>;\n};\ntype OptionValue = 'never' | 'always';\ntype Options = {\n\ttextExpressions: OptionValue;\n\tattributesAndProps: OptionValue;\n\tdirectiveExpressions: OptionValue;\n\ttags: {\n\t\topeningBrace: OptionValue;\n\t\tclosingBrace: OptionValue | 'always-after-expression';\n\t};\n};\n\nconst VALUE_SCHEMA = { enum: ['never', 'always'] };\n\n/**\n * Normalize options.\n */\nfunction parseOptions(options: DeepPartial<Options> | undefined): Options {\n\treturn {\n\t\ttextExpressions: options?.textExpressions || 'never',\n\t\tattributesAndProps: options?.attributesAndProps || 'never',\n\t\tdirectiveExpressions: options?.directiveExpressions || 'never',\n\t\ttags: {\n\t\t\topeningBrace: options?.tags?.openingBrace || 'never',\n\t\t\tclosingBrace: options?.tags?.closingBrace || 'never'\n\t\t}\n\t};\n}\n\nexport default createRule('mustache-spacing', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce unified spacing in mustache',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\ttextExpressions: VALUE_SCHEMA,\n\t\t\t\t\tattributesAndProps: VALUE_SCHEMA,\n\t\t\t\t\tdirectiveExpressions: VALUE_SCHEMA,\n\t\t\t\t\ttags: {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\topeningBrace: VALUE_SCHEMA,\n\t\t\t\t\t\t\tclosingBrace: {\n\t\t\t\t\t\t\t\tenum: ['never', 'always', 'always-after-expression']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tadditionalProperties: false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedOpening: \"Expected 1 space after '{', but not found.\",\n\t\t\texpectedClosing: \"Expected 1 space before '}', but not found.\",\n\t\t\tunexpectedOpening: \"Expected no space after '{', but found.\",\n\t\t\tunexpectedClosing: \"Expected no space before '}', but found.\"\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(context) {\n\t\tconst options = parseOptions(context.options[0]);\n\t\tconst sourceCode = context.sourceCode;\n\n\t\tfunction verifyBraces(\n\t\t\topeningBrace: AST.Token | AST.Comment,\n\t\t\tclosingBrace: AST.Token | AST.Comment | null,\n\t\t\topeningOption: OptionValue,\n\t\t\tclosingOption: OptionValue | 'always-after-expression',\n\t\t\thasExpression: boolean\n\t\t): void;\n\t\tfunction verifyBraces(\n\t\t\topeningBrace: AST.Token | AST.Comment,\n\t\t\tclosingBrace: AST.Token | AST.Comment,\n\t\t\topeningOption: OptionValue,\n\t\t\tclosingOption: OptionValue\n\t\t): void;\n\t\t/** Verify */\n\t\tfunction verifyBraces(\n\t\t\topeningBrace: AST.Token | AST.Comment,\n\t\t\tclosingBrace: AST.Token | AST.Comment | null,\n\t\t\topeningOption: OptionValue,\n\t\t\tclosingOption: OptionValue | 'always-after-expression',\n\t\t\thasExpression?: boolean\n\t\t) {\n\t\t\tconst firstToken = sourceCode.getTokenAfter(openingBrace, {\n\t\t\t\tincludeComments: true\n\t\t\t})!;\n\n\t\t\tif (openingOption === 'always') {\n\t\t\t\tif (openingBrace.range[1] === firstToken.range[0]) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: openingBrace,\n\t\t\t\t\t\tmessageId: 'expectedOpening',\n\t\t\t\t\t\tfix: (fixer) => fixer.insertTextAfter(openingBrace, ' ')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (openingBrace.range[1] !== firstToken.range[0]) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: {\n\t\t\t\t\t\tstart: openingBrace.loc.start,\n\t\t\t\t\t\tend: firstToken.loc.start\n\t\t\t\t\t},\n\t\t\t\t\tmessageId: 'unexpectedOpening',\n\t\t\t\t\tfix: (fixer) => fixer.removeRange([openingBrace.range[1], firstToken.range[0]])\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!closingBrace) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lastToken = sourceCode.getTokenBefore(closingBrace, {\n\t\t\t\tincludeComments: true\n\t\t\t})!;\n\n\t\t\tif (\n\t\t\t\tclosingOption === 'always' ||\n\t\t\t\t(closingOption === 'always-after-expression' && hasExpression)\n\t\t\t) {\n\t\t\t\tif (closingBrace.range[0] === lastToken.range[1]) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: closingBrace,\n\t\t\t\t\t\tmessageId: 'expectedClosing',\n\t\t\t\t\t\tfix: (fixer) => fixer.insertTextBefore(closingBrace, ' ')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (closingBrace.range[0] !== lastToken.range[1]) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: {\n\t\t\t\t\t\tstart: lastToken.loc.end,\n\t\t\t\t\t\tend: closingBrace.loc.end\n\t\t\t\t\t},\n\t\t\t\t\tmessageId: 'unexpectedClosing',\n\t\t\t\t\tfix: (fixer) => fixer.removeRange([lastToken.range[1], closingBrace.range[0]])\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/** Verify for {expr} */\n\t\tfunction verifyExpression(\n\t\t\tnode:\n\t\t\t\t| AST.SvelteMustacheTag\n\t\t\t\t| AST.SvelteDirective\n\t\t\t\t| AST.SvelteSpecialDirective\n\t\t\t\t| AST.SvelteShorthandAttribute\n\t\t\t\t| AST.SvelteSpreadAttribute,\n\t\t\toption: OptionValue\n\t\t) {\n\t\t\tconst mustacheTokens = getMustacheTokens(node, sourceCode);\n\t\t\tif (!mustacheTokens) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tverifyBraces(mustacheTokens.openToken, mustacheTokens.closeToken, option, option);\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteMustacheTag(node) {\n\t\t\t\tif (node.kind === 'raw') {\n\t\t\t\t\tconst mustacheTokens = getMustacheTokens(node, sourceCode);\n\t\t\t\t\tverifyBraces(\n\t\t\t\t\t\tmustacheTokens.openToken,\n\t\t\t\t\t\tmustacheTokens.closeToken,\n\t\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet option: OptionValue;\n\t\t\t\tif (node.parent.type === 'SvelteAttribute') {\n\t\t\t\t\toption = options.attributesAndProps;\n\t\t\t\t} else if (node.parent.type === 'SvelteStyleDirective') {\n\t\t\t\t\toption = options.directiveExpressions;\n\t\t\t\t} else {\n\t\t\t\t\toption = options.textExpressions;\n\t\t\t\t}\n\t\t\t\tverifyExpression(node, option);\n\t\t\t},\n\t\t\tSvelteShorthandAttribute(node) {\n\t\t\t\tverifyExpression(node, options.attributesAndProps);\n\t\t\t},\n\t\t\tSvelteSpreadAttribute(node) {\n\t\t\t\tverifyExpression(node, options.attributesAndProps);\n\t\t\t},\n\t\t\tSvelteDirective(node) {\n\t\t\t\tverifyExpression(node, options.directiveExpressions);\n\t\t\t},\n\t\t\tSvelteSpecialDirective(node) {\n\t\t\t\tverifyExpression(node, options.directiveExpressions);\n\t\t\t},\n\t\t\tSvelteDebugTag(node) {\n\t\t\t\tconst mustacheTokens = getMustacheTokens(node, sourceCode);\n\t\t\t\tverifyBraces(\n\t\t\t\t\tmustacheTokens.openToken,\n\t\t\t\t\tmustacheTokens.closeToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteRenderTag(node) {\n\t\t\t\tconst mustacheTokens = getMustacheTokens(node, sourceCode);\n\t\t\t\tverifyBraces(\n\t\t\t\t\tmustacheTokens.openToken,\n\t\t\t\t\tmustacheTokens.closeToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteIfBlock(node) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockClosingToken = sourceCode.getTokenAfter(node.expression, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tif (node.elseif) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst closeBlockClosingToken = sourceCode.getLastToken(node);\n\t\t\t\tconst closeBlockOpeningToken = sourceCode.getTokenBefore(closeBlockClosingToken, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isOpeningBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\tcloseBlockOpeningToken,\n\t\t\t\t\tcloseBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteElseBlock(node) {\n\t\t\t\tif (node.elseif) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst closeToken = sourceCode.getTokenAfter(openToken, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenToken,\n\t\t\t\t\tcloseToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteEachBlock(node: AST.SvelteEachBlock) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockClosingToken = sourceCode.getTokenAfter(\n\t\t\t\t\tnode.key || node.index || node.context || node.expression,\n\t\t\t\t\t{\n\t\t\t\t\t\tincludeComments: false,\n\t\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t\t}\n\t\t\t\t)!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tconst closeBlockClosingToken = sourceCode.getLastToken(node);\n\t\t\t\tconst closeBlockOpeningToken = sourceCode.getTokenBefore(closeBlockClosingToken, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isOpeningBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\tcloseBlockOpeningToken,\n\t\t\t\t\tcloseBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteKeyBlock(node: AST.SvelteKeyBlock) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockClosingToken = sourceCode.getTokenAfter(node.expression, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tconst closeBlockClosingToken = sourceCode.getLastToken(node);\n\t\t\t\tconst closeBlockOpeningToken = sourceCode.getTokenBefore(closeBlockClosingToken, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isOpeningBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\tcloseBlockOpeningToken,\n\t\t\t\t\tcloseBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteAwaitBlock(node) {\n\t\t\t\tconst closeBlockClosingToken = sourceCode.getLastToken(node);\n\t\t\t\tconst closeBlockOpeningToken = sourceCode.getTokenBefore(closeBlockClosingToken, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isOpeningBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\tcloseBlockOpeningToken,\n\t\t\t\t\tcloseBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteAwaitPendingBlock(node: AST.SvelteAwaitPendingBlock) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockClosingToken = sourceCode.getTokenAfter(node.parent.expression, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteAwaitThenBlock(node) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockLast = node.value || (node.awaitThen ? node.parent.expression : null);\n\t\t\t\tconst openBlockClosingToken = openBlockLast\n\t\t\t\t\t? sourceCode.getTokenAfter(openBlockLast, {\n\t\t\t\t\t\t\tincludeComments: false,\n\t\t\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t\t\t})\n\t\t\t\t\t: null;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tBoolean(\n\t\t\t\t\t\topenBlockClosingToken &&\n\t\t\t\t\t\topenBlockLast &&\n\t\t\t\t\t\topenBlockClosingToken === sourceCode.getTokenAfter(openBlockLast)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteAwaitCatchBlock(node) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockLast = node.error || (node.awaitCatch ? node.parent.expression : null);\n\t\t\t\tconst openBlockClosingToken = openBlockLast\n\t\t\t\t\t? sourceCode.getTokenAfter(openBlockLast, {\n\t\t\t\t\t\t\tincludeComments: false,\n\t\t\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t\t\t})\n\t\t\t\t\t: null;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tBoolean(\n\t\t\t\t\t\topenBlockClosingToken &&\n\t\t\t\t\t\topenBlockLast &&\n\t\t\t\t\t\topenBlockClosingToken === sourceCode.getTokenAfter(openBlockLast)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t},\n\t\t\tSvelteSnippetBlock(node) {\n\t\t\t\tconst openBlockOpeningToken = sourceCode.getFirstToken(node);\n\t\t\t\tconst openBlockClosingToken = sourceCode.getTokenAfter(\n\t\t\t\t\tnode.params[node.params.length - 1] || node.id,\n\t\t\t\t\t{\n\t\t\t\t\t\tincludeComments: false,\n\t\t\t\t\t\tfilter: isClosingBraceToken\n\t\t\t\t\t}\n\t\t\t\t)!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\topenBlockOpeningToken,\n\t\t\t\t\topenBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tconst closeBlockClosingToken = sourceCode.getLastToken(node);\n\t\t\t\tconst closeBlockOpeningToken = sourceCode.getTokenBefore(closeBlockClosingToken, {\n\t\t\t\t\tincludeComments: false,\n\t\t\t\t\tfilter: isOpeningBraceToken\n\t\t\t\t})!;\n\t\t\t\tverifyBraces(\n\t\t\t\t\tcloseBlockOpeningToken,\n\t\t\t\t\tcloseBlockClosingToken,\n\t\t\t\t\toptions.tags.openingBrace,\n\t\t\t\t\toptions.tags.closingBrace,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\n\nimport { createRule } from '../utils/index.js';\nimport type { SuggestionReportDescriptor } from '../types.js';\n\nexport default createRule('no-add-event-listener', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Warns against the use of `addEventListener`',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected:\n\t\t\t\t'Do not use `addEventListener`. Use the `on` function from `svelte/events` instead.'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tCallExpression(node: TSESTree.CallExpression) {\n\t\t\t\tconst { callee } = node;\n\t\t\t\tlet target: string | null = null;\n\n\t\t\t\tif (\n\t\t\t\t\tcallee.type === 'MemberExpression' &&\n\t\t\t\t\tcallee.property.type === 'Identifier' &&\n\t\t\t\t\tcallee.property.name === 'addEventListener'\n\t\t\t\t) {\n\t\t\t\t\ttarget = context.sourceCode.getText(callee.object);\n\t\t\t\t} else if (callee.type === 'Identifier' && callee.name === 'addEventListener') {\n\t\t\t\t\ttarget = 'window';\n\t\t\t\t}\n\n\t\t\t\tif (target === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst openParen = context.sourceCode.getTokenAfter(callee);\n\t\t\t\tconst suggest: SuggestionReportDescriptor[] = [];\n\n\t\t\t\tif (openParen !== null) {\n\t\t\t\t\tsuggest.push({\n\t\t\t\t\t\tdesc: 'Use `on` from `svelte/events` instead',\n\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tfixer.replaceText(callee, 'on'),\n\t\t\t\t\t\t\t\tfixer.insertTextAfter(openParen, `${target}, `)\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\tsuggest\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-at-debug-tags.ts",
    "content": "import { createRule } from '../utils/index.js';\n\nexport default createRule('no-at-debug-tags', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow the use of `{@debug}`',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true,\n\t\t\tdefault: 'warn'\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Unexpected `{@debug}`.',\n\t\t\tsuggestRemove: 'Remove `{@debug}` from the source'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteDebugTag(node) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessageId: 'suggestRemove',\n\t\t\t\t\t\t\tfix: (fixer) => fixer.remove(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-at-html-tags.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-at-html-tags', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow use of `{@html}` to prevent XSS attack',\n\t\t\tcategory: 'Security Vulnerability',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: '`{@html}` can lead to XSS attack.'\n\t\t},\n\t\ttype: 'suggestion' // \"problem\",\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\t'SvelteMustacheTag[kind=raw]'(node: AST.SvelteMustacheTag) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'unexpected'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { findVariable, getNodeName } from '../utils/ast-utils.js';\nimport type { Variable } from '@typescript-eslint/scope-manager';\nimport { getPropertyName } from '@eslint-community/eslint-utils';\n\nconst DOM_MANIPULATING_METHODS = new Set([\n\t'appendChild', // https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild\n\t'insertBefore', // https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore\n\t'normalize', // https://developer.mozilla.org/en-US/docs/Web/API/Node/normalize\n\t'removeChild', // https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild\n\t'replaceChild', // https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild\n\t'after', // https://developer.mozilla.org/en-US/docs/Web/API/Element/after\n\t'append', // https://developer.mozilla.org/en-US/docs/Web/API/Element/append\n\t'before', // https://developer.mozilla.org/en-US/docs/Web/API/Element/before\n\t'insertAdjacentElement', // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement\n\t'insertAdjacentHTML', // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML\n\t'insertAdjacentText', // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentText\n\t'prepend', // https://developer.mozilla.org/en-US/docs/Web/API/Element/prepend\n\t'remove', // https://developer.mozilla.org/en-US/docs/Web/API/Element/remove\n\t'replaceChildren', // https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceChildren\n\t'replaceWith' // https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceWith\n]);\nconst DOM_MANIPULATING_PROPERTIES = new Set([\n\t'textContent', // https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent\n\t'innerHTML', // https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML\n\t'outerHTML', // https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML\n\t'innerText', // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText\n\t'outerText' // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/outerText\n]);\n\nexport default createRule('no-dom-manipulating', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow DOM manipulating',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tdisallowManipulateDOM:\n\t\t\t\t\"Don't manipulate the DOM directly. The Svelte runtime can get confused if there is a difference between the actual DOM and the DOM expected by the Svelte runtime.\"\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst domVariables = new Set<Variable>();\n\n\t\t/**\n\t\t * Verify DOM variable identifier node\n\t\t */\n\t\tfunction verifyIdentifier(node: TSESTree.Identifier | TSESTree.JSXIdentifier) {\n\t\t\tconst member = node.parent;\n\t\t\tif (member?.type !== 'MemberExpression' || member.object !== node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst name = getPropertyName(member);\n\t\t\tif (!name) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet target: TSESTree.Expression = member;\n\t\t\tlet parent = target.parent;\n\t\t\twhile (parent?.type === 'ChainExpression') {\n\t\t\t\ttarget = parent;\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t\tif (!parent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parent.type === 'CallExpression') {\n\t\t\t\tif (parent.callee !== target || !DOM_MANIPULATING_METHODS.has(name)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (parent.type === 'AssignmentExpression') {\n\t\t\t\tif (parent.left !== target || !DOM_MANIPULATING_PROPERTIES.has(name)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontext.report({\n\t\t\t\tnode: member,\n\t\t\t\tmessageId: 'disallowManipulateDOM'\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t\"SvelteDirective[kind='Binding']\"(node: AST.SvelteBindingDirective) {\n\t\t\t\tif (\n\t\t\t\t\tnode.key.name.name !== 'this' ||\n\t\t\t\t\t!node.expression ||\n\t\t\t\t\tnode.expression.type !== 'Identifier'\n\t\t\t\t) {\n\t\t\t\t\t// not bind:this={id}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst element = node.parent.parent;\n\t\t\t\tif (element.type !== 'SvelteElement' || !isHTMLElement(element)) {\n\t\t\t\t\t// not HTML element\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst variable = findVariable(context, node.expression);\n\t\t\t\tif (!variable || (variable.scope.type !== 'module' && variable.scope.type !== 'global')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdomVariables.add(variable);\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tfor (const variable of domVariables) {\n\t\t\t\t\tfor (const reference of variable.references) {\n\t\t\t\t\t\tverifyIdentifier(reference.identifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Checks whether the given node is a HTML element or not.\n\t\t */\n\t\tfunction isHTMLElement(node: AST.SvelteElement) {\n\t\t\treturn (\n\t\t\t\tnode.kind === 'html' || (node.kind === 'special' && getNodeName(node) === 'svelte:element')\n\t\t\t);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-dupe-else-if-blocks.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { equalTokens } from '../utils/ast-utils.js';\n\n// ------------------------------------------------------------------------------\n// Helpers\n// ------------------------------------------------------------------------------\n\ntype OrOperands = {\n\tnode: TSESTree.Expression;\n\toperands: AndOperands[];\n};\ntype AndOperands = {\n\tnode: TSESTree.Expression;\n\toperands: TSESTree.Expression[];\n};\n\n/**\n * Splits the given node by the given logical operator.\n * @param operator Logical operator `||` or `&&`.\n * @param node The node to split.\n * @returns Array of conditions that makes the node when joined by the operator.\n */\nfunction splitByLogicalOperator(\n\toperator: TSESTree.LogicalExpression['operator'],\n\tnode: TSESTree.Expression\n): TSESTree.Expression[] {\n\tif (node.type === 'LogicalExpression' && node.operator === operator) {\n\t\treturn [\n\t\t\t...splitByLogicalOperator(operator, node.left),\n\t\t\t...splitByLogicalOperator(operator, node.right)\n\t\t];\n\t}\n\treturn [node];\n}\n\n/**\n * Split with ||.\n */\nfunction splitByOr(node: TSESTree.Expression) {\n\treturn splitByLogicalOperator('||', node);\n}\n\n/**\n * Split with &&.\n */\nfunction splitByAnd(node: TSESTree.Expression) {\n\treturn splitByLogicalOperator('&&', node);\n}\n\n/**\n * Build OrOperands\n */\nfunction buildOrOperands(node: TSESTree.Expression): OrOperands {\n\tconst orOperands = splitByOr(node);\n\treturn {\n\t\tnode,\n\t\toperands: orOperands.map((orOperand) => {\n\t\t\tconst andOperands = splitByAnd(orOperand);\n\t\t\treturn {\n\t\t\t\tnode: orOperand,\n\t\t\t\toperands: andOperands\n\t\t\t};\n\t\t})\n\t};\n}\n\nexport default createRule('no-dupe-else-if-blocks', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow duplicate conditions in `{#if}` / `{:else if}` chains',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected:\n\t\t\t\t'This branch can never execute. Its condition is a duplicate or covered by previous conditions in the `{#if}` / `{:else if}` chain.'\n\t\t},\n\t\ttype: 'problem' // \"problem\",\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\n\t\t/**\n\t\t * Determines whether the two given nodes are considered to be equal. In particular, given that the nodes\n\t\t * represent expressions in a boolean context, `||` and `&&` can be considered as commutative operators.\n\t\t * @param a First node.\n\t\t * @param b Second node.\n\t\t * @returns `true` if the nodes are considered to be equal.\n\t\t */\n\t\tfunction equal(a: TSESTree.Expression, b: TSESTree.Expression): boolean {\n\t\t\tif (a.type !== b.type) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ta.type === 'LogicalExpression' &&\n\t\t\t\tb.type === 'LogicalExpression' &&\n\t\t\t\t(a.operator === '||' || a.operator === '&&') &&\n\t\t\t\ta.operator === b.operator\n\t\t\t) {\n\t\t\t\treturn (\n\t\t\t\t\t(equal(a.left, b.left) && equal(a.right, b.right)) ||\n\t\t\t\t\t(equal(a.left, b.right) && equal(a.right, b.left))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn equalTokens(a, b, sourceCode);\n\t\t}\n\n\t\t/**\n\t\t * Determines whether the first given AndOperands is a subset of the second given AndOperands.\n\t\t *\n\t\t * e.g. A: (a && b), B: (a && b && c): B is a subset of A.\n\t\t *\n\t\t * @param operandsA The AndOperands to compare from.\n\t\t * @param operandsB The AndOperands to compare against.\n\t\t * @returns `true` if the `andOperandsA` is a subset of the `andOperandsB`.\n\t\t */\n\t\tfunction isSubset(operandsA: AndOperands, operandsB: AndOperands) {\n\t\t\treturn operandsA.operands.every((operandA) =>\n\t\t\t\toperandsB.operands.some((operandB) => equal(operandA, operandB))\n\t\t\t);\n\t\t}\n\n\t\t/** Iterate SvelteIfBlock nodes */\n\t\tfunction* iterateIfElseIf(node: AST.SvelteIfBlock) {\n\t\t\tlet target = node;\n\t\t\twhile (\n\t\t\t\ttarget.parent.type === 'SvelteElseBlock' &&\n\t\t\t\t(target.parent.children as AST.SvelteElseBlock['children'][number][]).includes(target) &&\n\t\t\t\ttarget.parent.parent.type === 'SvelteIfBlock'\n\t\t\t) {\n\t\t\t\tyield target.parent.parent;\n\t\t\t\ttarget = target.parent.parent;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteIfBlock(node) {\n\t\t\t\tconst test = node.expression;\n\t\t\t\tconst conditionsToCheck =\n\t\t\t\t\ttest.type === 'LogicalExpression' && test.operator === '&&'\n\t\t\t\t\t\t? [...splitByAnd(test), test]\n\t\t\t\t\t\t: [test];\n\t\t\t\tconst listToCheck = conditionsToCheck.map(buildOrOperands);\n\n\t\t\t\tfor (const currentIdBlock of iterateIfElseIf(node)) {\n\t\t\t\t\tif (currentIdBlock.expression) {\n\t\t\t\t\t\tconst currentOrOperands = buildOrOperands(currentIdBlock.expression);\n\n\t\t\t\t\t\tfor (const condition of listToCheck) {\n\t\t\t\t\t\t\tconst operands = (condition.operands = condition.operands.filter((orOperand) => {\n\t\t\t\t\t\t\t\treturn !currentOrOperands.operands.some((currentOrOperand) =>\n\t\t\t\t\t\t\t\t\tisSubset(currentOrOperand, orOperand)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tif (!operands.length) {\n\t\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\t\tnode: condition.node,\n\t\t\t\t\t\t\t\t\tmessageId: 'unexpected'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { equalTokens } from '../utils/ast-utils.js';\n\nexport default createRule('no-dupe-on-directives', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow duplicate `on:` directives',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tduplication:\n\t\t\t\t'This `on:{{type}}` directive is the same and duplicate directives in L{{lineNo}}.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\n\t\tconst directiveDataMap = new Map<\n\t\t\tstring, // event type\n\t\t\t{\n\t\t\t\texpression: null | TSESTree.Expression;\n\t\t\t\tnodes: AST.SvelteEventHandlerDirective[];\n\t\t\t}[]\n\t\t>();\n\t\treturn {\n\t\t\tSvelteDirective(node) {\n\t\t\t\tif (node.kind !== 'EventHandler') return;\n\n\t\t\t\tconst directiveDataList = directiveDataMap.get(node.key.name.name);\n\t\t\t\tif (!directiveDataList) {\n\t\t\t\t\tdirectiveDataMap.set(node.key.name.name, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\texpression: node.expression,\n\t\t\t\t\t\t\tnodes: [node]\n\t\t\t\t\t\t}\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst directiveData = directiveDataList.find((data) => {\n\t\t\t\t\tif (!data.expression || !node.expression) {\n\t\t\t\t\t\treturn data.expression === node.expression;\n\t\t\t\t\t}\n\t\t\t\t\treturn equalTokens(data.expression, node.expression, sourceCode);\n\t\t\t\t});\n\t\t\t\tif (!directiveData) {\n\t\t\t\t\tdirectiveDataList.push({\n\t\t\t\t\t\texpression: node.expression,\n\t\t\t\t\t\tnodes: [node]\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdirectiveData.nodes.push(node);\n\t\t\t},\n\t\t\t'SvelteStartTag:exit'() {\n\t\t\t\tfor (const [type, directiveDataList] of directiveDataMap) {\n\t\t\t\t\tfor (const { nodes } of directiveDataList) {\n\t\t\t\t\t\tif (nodes.length < 2) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const node of nodes) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\tmessageId: 'duplication',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\tlineNo: String((nodes[0] !== node ? nodes[0] : nodes[1]).loc.start.line)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdirectiveDataMap.clear();\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-dupe-style-properties.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport type { SvelteStyleInterpolation, SvelteStyleRoot } from '../utils/css-utils/index.js';\nimport { parseStyleAttributeValue } from '../utils/css-utils/index.js';\n\nexport default createRule('no-dupe-style-properties', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow duplicate style properties',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: \"Duplicate property '{{name}}'.\"\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\ttype StyleDecl = {\n\t\t\tprop: string;\n\t\t\tloc: AST.SourceLocation;\n\t\t};\n\t\ttype StyleDeclSet = {\n\t\t\tdecls: StyleDecl[];\n\t\t};\n\n\t\treturn {\n\t\t\tSvelteStartTag(node: AST.SvelteStartTag) {\n\t\t\t\tconst reported = new Set<StyleDecl>();\n\t\t\t\tconst beforeDeclarations = new Map<string, StyleDecl>();\n\t\t\t\tfor (const { decls } of iterateStyleDeclSetFromAttrs(node.attributes)) {\n\t\t\t\t\tfor (const decl of decls) {\n\t\t\t\t\t\tconst already = beforeDeclarations.get(decl.prop);\n\t\t\t\t\t\tif (already) {\n\t\t\t\t\t\t\tfor (const report of [already, decl].filter((n) => !reported.has(n))) {\n\t\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\t\tloc: report.loc,\n\t\t\t\t\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\t\t\t\t\tdata: { name: report.prop }\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treported.add(report);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const decl of decls) {\n\t\t\t\t\t\tbeforeDeclarations.set(decl.prop, decl);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/** Iterate the style decl set from attrs */\n\t\tfunction* iterateStyleDeclSetFromAttrs(\n\t\t\tattrs: AST.SvelteStartTag['attributes']\n\t\t): Iterable<StyleDeclSet> {\n\t\t\tfor (const attr of attrs) {\n\t\t\t\tif (attr.type === 'SvelteStyleDirective') {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tdecls: [{ prop: attr.key.name.name, loc: attr.key.name.loc }]\n\t\t\t\t\t};\n\t\t\t\t} else if (attr.type === 'SvelteAttribute') {\n\t\t\t\t\tif (attr.key.name !== 'style') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst root = parseStyleAttributeValue(attr, context);\n\t\t\t\t\tif (!root) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tyield* iterateStyleDeclSetFromStyleRoot(root);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Iterate the style decl set from style root */\n\t\tfunction* iterateStyleDeclSetFromStyleRoot<E extends SvelteStyleInterpolation>(\n\t\t\troot: SvelteStyleRoot<E>\n\t\t): Iterable<StyleDeclSet> {\n\t\t\tfor (const child of root.nodes) {\n\t\t\t\tif (child.type === 'decl') {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tdecls: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tprop: child.prop.name,\n\t\t\t\t\t\t\t\tget loc() {\n\t\t\t\t\t\t\t\t\treturn child.prop.loc;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t};\n\t\t\t\t} else if (child.type === 'inline') {\n\t\t\t\t\tconst decls: StyleDecl[] = [];\n\t\t\t\t\tfor (const root of child.getAllInlineStyles().values()) {\n\t\t\t\t\t\tfor (const set of iterateStyleDeclSetFromStyleRoot(root)) {\n\t\t\t\t\t\t\tdecls.push(...set.decls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tyield { decls };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { equalTokens, getAttributeKeyText } from '../utils/ast-utils.js';\n\nexport default createRule('no-dupe-use-directives', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow duplicate `use:` directives',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tduplication:\n\t\t\t\t'This `{{keyText}}` directive is the same and duplicate directives in L{{lineNo}}.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\n\t\tconst directiveDataMap = new Map<\n\t\t\tstring, // key text\n\t\t\t{\n\t\t\t\texpression: null | TSESTree.Expression;\n\t\t\t\tnodes: AST.SvelteActionDirective[];\n\t\t\t}[]\n\t\t>();\n\t\treturn {\n\t\t\tSvelteDirective(node) {\n\t\t\t\tif (node.kind !== 'Action') return;\n\n\t\t\t\tconst keyText = getAttributeKeyText(node, context);\n\n\t\t\t\tconst directiveDataList = directiveDataMap.get(keyText);\n\t\t\t\tif (!directiveDataList) {\n\t\t\t\t\tdirectiveDataMap.set(keyText, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\texpression: node.expression,\n\t\t\t\t\t\t\tnodes: [node]\n\t\t\t\t\t\t}\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst directiveData = directiveDataList.find((data) => {\n\t\t\t\t\tif (!data.expression || !node.expression) {\n\t\t\t\t\t\treturn data.expression === node.expression;\n\t\t\t\t\t}\n\t\t\t\t\treturn equalTokens(data.expression, node.expression, sourceCode);\n\t\t\t\t});\n\t\t\t\tif (!directiveData) {\n\t\t\t\t\tdirectiveDataList.push({\n\t\t\t\t\t\texpression: node.expression,\n\t\t\t\t\t\tnodes: [node]\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdirectiveData.nodes.push(node);\n\t\t\t},\n\t\t\t'SvelteStartTag:exit'() {\n\t\t\t\tfor (const [keyText, directiveDataList] of directiveDataMap) {\n\t\t\t\t\tfor (const { nodes } of directiveDataList) {\n\t\t\t\t\t\tif (nodes.length < 2) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const node of nodes) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\tmessageId: 'duplication',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tkeyText,\n\t\t\t\t\t\t\t\t\tlineNo: String((nodes[0] !== node ? nodes[0] : nodes[1]).loc.start.line)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdirectiveDataMap.clear();\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-dynamic-slot-name.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport {\n\tFindVariableContext,\n\tgetAttributeValueQuoteAndRange,\n\tgetStringIfConstant\n} from '../utils/ast-utils.js';\n\nexport default createRule('no-dynamic-slot-name', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow dynamic slot name',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: false\n\t\t},\n\t\tfixable: 'code',\n\t\tdeprecated: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: '`<slot>` name cannot be dynamic.',\n\t\t\trequireValue: '`<slot>` name requires a value.'\n\t\t},\n\t\ttype: 'problem',\n\t\treplacedBy: {\n\t\t\tnote: 'Now Svelte compiler itself throws an compile error.'\n\t\t}\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\treturn {\n\t\t\t\"SvelteElement[name.name='slot'] > SvelteStartTag.startTag > SvelteAttribute[key.name='name']\"(\n\t\t\t\tnode: AST.SvelteAttribute\n\t\t\t) {\n\t\t\t\tif (node.value.length === 0) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'requireValue'\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfor (const vNode of node.value) {\n\t\t\t\t\tif (vNode.type === 'SvelteMustacheTag') {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: vNode,\n\t\t\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\tconst text = getStaticText(vNode.expression);\n\t\t\t\t\t\t\t\tif (text == null) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (node.value.length === 1) {\n\t\t\t\t\t\t\t\t\tconst range = getAttributeValueQuoteAndRange(node, sourceCode)!.range;\n\t\t\t\t\t\t\t\t\treturn fixer.replaceTextRange(range, `\"${text}\"`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst range = vNode.range;\n\t\t\t\t\t\t\t\treturn fixer.replaceTextRange(range, text);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Get static text from given expression\n\t\t */\n\t\tfunction getStaticText(node: TSESTree.Expression) {\n\t\t\tconst expr = findRootExpression(new FindVariableContext(context), node);\n\t\t\treturn getStringIfConstant(expr);\n\t\t}\n\n\t\t/** Find data expression */\n\t\tfunction findRootExpression(\n\t\t\tctx: FindVariableContext,\n\t\t\tnode: TSESTree.Expression\n\t\t): TSESTree.Expression {\n\t\t\tif (node.type !== 'Identifier') {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tconst variable = ctx.findVariable(node);\n\t\t\tif (!variable || variable.defs.length !== 1) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tconst def = variable.defs[0];\n\t\t\tif (def.type === 'Variable') {\n\t\t\t\tif (def.parent.kind === 'const' && def.node.init) {\n\t\t\t\t\tconst init = def.node.init;\n\t\t\t\t\treturn findRootExpression(ctx, init);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn node;\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-export-load-in-svelte-module-in-kit-pages', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow exporting load functions in `*.svelte` module in SvelteKit page components.',\n\t\t\tcategory: 'SvelteKit',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected:\n\t\t\t\t'disallow exporting load functions in `*.svelte` module in SvelteKit page components.'\n\t\t},\n\t\ttype: 'problem',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteKitFileTypes: ['+page.svelte', '+error.svelte', '+layout.svelte']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tlet isModule = false;\n\t\treturn {\n\t\t\t// <script context=\"module\">\n\t\t\t[`Program > SvelteScriptElement > SvelteStartTag > SvelteAttribute[key.name=\"context\"] > SvelteLiteral[value=\"module\"]`]:\n\t\t\t\t() => {\n\t\t\t\t\tisModule = true;\n\t\t\t\t},\n\n\t\t\t// </script>\n\t\t\t'Program > SvelteScriptElement:exit': () => {\n\t\t\t\tisModule = false;\n\t\t\t},\n\n\t\t\t// export function load() {}\n\t\t\t// export const load = () => {}\n\t\t\t[`:matches(ExportNamedDeclaration > FunctionDeclaration, ExportNamedDeclaration > VariableDeclaration > VariableDeclarator) > Identifier.id[name=\"load\"]`]:\n\t\t\t\t(node: TSESTree.Identifier) => {\n\t\t\t\t\tif (!isModule) return {};\n\t\t\t\t\treturn context.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\tmessageId: 'unexpected'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-extra-reactive-curlies.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-extra-reactive-curlies', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow wrapping single reactive statements in curly braces',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\textraCurlies: `Do not wrap reactive statements in curly braces unless necessary.`,\n\t\t\tremoveExtraCurlies: `Remove the unnecessary curly braces.`\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\t// $: { foo = \"bar\"; }\n\t\t\t[`SvelteReactiveStatement > BlockStatement[body.length=1]`]: (\n\t\t\t\tnode: TSESTree.BlockStatement\n\t\t\t) => {\n\t\t\t\tconst source = context.sourceCode;\n\n\t\t\t\treturn context.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tloc: node.loc,\n\t\t\t\t\tmessageId: 'extraCurlies',\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessageId: 'removeExtraCurlies',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\tconst tokens = source.getTokens(node, { includeComments: true });\n\n\t\t\t\t\t\t\t\t// Remove everything up to the second token, and the entire last token since\n\t\t\t\t\t\t\t\t// those are known to be \"{\" and \"}\"\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tfixer.removeRange([tokens[0].range[0], tokens[1].range[0]]),\n\n\t\t\t\t\t\t\t\t\tfixer.removeRange([\n\t\t\t\t\t\t\t\t\t\ttokens[tokens.length - 2].range[1],\n\t\t\t\t\t\t\t\t\t\ttokens[tokens.length - 1].range[1]\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-goto-without-base.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport { findVariable } from '../utils/ast-utils.js';\nimport type { RuleContext } from '../types.js';\n\nexport default createRule('no-goto-without-base', {\n\tmeta: {\n\t\tdeprecated: true,\n\t\treplacedBy: ['no-navigation-without-resolve'],\n\t\tdocs: {\n\t\t\tdescription: 'disallow using goto() without the base path',\n\t\t\tcategory: 'SvelteKit',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tisNotPrefixedWithBasePath:\n\t\t\t\t\"Found a goto() call with a url that isn't prefixed with the base path.\"\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteKitVersions: ['1.0.0-next', '1', '2']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\t\t\t\tconst basePathNames = extractBasePathReferences(referenceTracker, context);\n\t\t\t\tfor (const gotoCall of extractGotoReferences(referenceTracker)) {\n\t\t\t\t\tif (gotoCall.arguments.length < 1) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst path = gotoCall.arguments[0];\n\t\t\t\t\tswitch (path.type) {\n\t\t\t\t\t\tcase 'BinaryExpression':\n\t\t\t\t\t\t\tcheckBinaryExpression(context, path, basePathNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Literal':\n\t\t\t\t\t\t\tcheckLiteral(context, path);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'TemplateLiteral':\n\t\t\t\t\t\t\tcheckTemplateLiteral(context, path, basePathNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tcontext.report({ loc: path.loc, messageId: 'isNotPrefixedWithBasePath' });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\nfunction checkBinaryExpression(\n\tcontext: RuleContext,\n\tpath: TSESTree.BinaryExpression,\n\tbasePathNames: Set<TSESTree.Identifier>\n): void {\n\tif (path.left.type !== 'Identifier' || !basePathNames.has(path.left)) {\n\t\tcontext.report({ loc: path.loc, messageId: 'isNotPrefixedWithBasePath' });\n\t}\n}\n\nfunction checkTemplateLiteral(\n\tcontext: RuleContext,\n\tpath: TSESTree.TemplateLiteral,\n\tbasePathNames: Set<TSESTree.Identifier>\n): void {\n\tconst startingIdentifier = extractStartingIdentifier(path);\n\tif (startingIdentifier === undefined || !basePathNames.has(startingIdentifier)) {\n\t\tcontext.report({ loc: path.loc, messageId: 'isNotPrefixedWithBasePath' });\n\t}\n}\n\nfunction checkLiteral(context: RuleContext, path: TSESTree.Literal): void {\n\tif (!/^[+a-z]*:/i.test(path.value?.toString() ?? '')) {\n\t\tcontext.report({ loc: path.loc, messageId: 'isNotPrefixedWithBasePath' });\n\t}\n}\n\nfunction extractStartingIdentifier(\n\ttemplateLiteral: TSESTree.TemplateLiteral\n): TSESTree.Identifier | undefined {\n\tconst literalParts = [...templateLiteral.expressions, ...templateLiteral.quasis].sort((a, b) =>\n\t\ta.range[0] < b.range[0] ? -1 : 1\n\t);\n\tfor (const part of literalParts) {\n\t\tif (part.type === 'TemplateElement' && part.value.raw === '') {\n\t\t\t// Skip empty quasi in the begining\n\t\t\tcontinue;\n\t\t}\n\t\tif (part.type === 'Identifier') {\n\t\t\treturn part;\n\t\t}\n\t\treturn undefined;\n\t}\n\treturn undefined;\n}\n\nfunction extractGotoReferences(referenceTracker: ReferenceTracker): TSESTree.CallExpression[] {\n\treturn Array.from(\n\t\treferenceTracker.iterateEsmReferences({\n\t\t\t'$app/navigation': {\n\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\tgoto: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\t({ node }) => node as TSESTree.CallExpression\n\t);\n}\n\nfunction extractBasePathReferences(\n\treferenceTracker: ReferenceTracker,\n\tcontext: RuleContext\n): Set<TSESTree.Identifier> {\n\tconst set = new Set<TSESTree.Identifier>();\n\tfor (const { node } of referenceTracker.iterateEsmReferences({\n\t\t'$app/paths': {\n\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\tbase: {\n\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t}\n\t\t}\n\t})) {\n\t\tconst variable = findVariable(context, (node as TSESTree.ImportSpecifier).local);\n\t\tif (!variable) continue;\n\t\tfor (const reference of variable.references) {\n\t\t\tif (reference.identifier.type === 'Identifier') set.add(reference.identifier);\n\t\t}\n\t}\n\treturn set;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-ignored-unsubscribe.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-ignored-unsubscribe', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\tfixable: undefined,\n\t\thasSuggestions: false,\n\t\tmessages: {\n\t\t\tforbidden: 'Ignoring returned value of the subscribe method is forbidden.'\n\t\t},\n\t\tschema: [],\n\t\ttype: 'problem'\n\t},\n\tcreate: (context) => {\n\t\treturn {\n\t\t\t\"ExpressionStatement > CallExpression > MemberExpression.callee[property.name='subscribe']\": (\n\t\t\t\tnode: TSESTree.MemberExpression\n\t\t\t) => {\n\t\t\t\tcontext.report({\n\t\t\t\t\tmessageId: 'forbidden',\n\t\t\t\t\tnode: node.property\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport type { Scope, Variable, Reference, Definition } from '@typescript-eslint/scope-manager';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { FindVariableContext, iterateIdentifiers } from '../utils/ast-utils.js';\n\nexport default createRule('no-immutable-reactive-statements', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"disallow reactive statements that don't reference reactive values.\",\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\timmutable:\n\t\t\t\t'This statement is not reactive because all variables referenced in the reactive statement are immutable.'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst scopeManager = context.sourceCode.scopeManager;\n\t\tconst globalScope = scopeManager.globalScope;\n\t\tconst toplevelScope =\n\t\t\tglobalScope?.childScopes.find((scope) => scope.type === 'module') || globalScope;\n\t\tif (!globalScope || !toplevelScope) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst cacheMutableVariable = new WeakMap<Variable, boolean>();\n\n\t\t/**\n\t\t * Checks whether the given reference is a mutable variable or not.\n\t\t */\n\t\tfunction isMutableVariableReference(reference: Reference) {\n\t\t\tif (reference.identifier.name.startsWith('$')) {\n\t\t\t\t// It is reactive store reference.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (!reference.resolved) {\n\t\t\t\t// Unknown variable\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn isMutableVariable(reference.resolved);\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the given variable is a mutable variable or not.\n\t\t */\n\t\tfunction isMutableVariable(variable: Variable) {\n\t\t\tconst cache = cacheMutableVariable.get(variable);\n\t\t\tif (cache != null) {\n\t\t\t\treturn cache;\n\t\t\t}\n\t\t\tif (variable.defs.length === 0) {\n\t\t\t\t// Global variables are assumed to be immutable.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst isMutableDefine = variable.defs.some((def) => {\n\t\t\t\tif (def.type === 'ImportBinding') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (def.node.type === 'AssignmentExpression') {\n\t\t\t\t\t// Reactive values\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (def.type === 'Variable') {\n\t\t\t\t\tconst parent = def.parent;\n\t\t\t\t\tif (parent.kind === 'const') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdef.node.init &&\n\t\t\t\t\t\t\t(def.node.init.type === 'FunctionExpression' ||\n\t\t\t\t\t\t\t\tdef.node.init.type === 'ArrowFunctionExpression' ||\n\t\t\t\t\t\t\t\tdef.node.init.type === 'Literal')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst pp = parent.parent;\n\t\t\t\t\t\tif (pp && pp.type === 'ExportNamedDeclaration' && pp.declaration === parent) {\n\t\t\t\t\t\t\t// Props\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn hasWrite(new FindVariableContext(context), variable);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tcacheMutableVariable.set(variable, isMutableDefine);\n\t\t\treturn isMutableDefine;\n\t\t}\n\n\t\t/** Checks whether the given variable has a write or reactive store reference or not. */\n\t\tfunction hasWrite(ctx: FindVariableContext, variable: Variable) {\n\t\t\tconst defIds = variable.defs.map((def: Definition) => def.name);\n\t\t\tfor (const reference of variable.references) {\n\t\t\t\tif (\n\t\t\t\t\treference.isWrite() &&\n\t\t\t\t\t!defIds.some(\n\t\t\t\t\t\t(defId) =>\n\t\t\t\t\t\t\tdefId.range[0] <= reference.identifier.range[0] &&\n\t\t\t\t\t\t\treference.identifier.range[1] <= defId.range[1]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (hasWriteMember(ctx, reference.identifier)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/** Checks whether the given expression has writing to a member or not. */\n\t\tfunction hasWriteMember(\n\t\t\tctx: FindVariableContext,\n\t\t\texpr: TSESTree.Identifier | TSESTree.JSXIdentifier | TSESTree.MemberExpression\n\t\t): boolean {\n\t\t\tif (expr.type === 'JSXIdentifier') return false;\n\t\t\tconst parent = expr.parent as TSESTree.Node | AST.SvelteNode;\n\t\t\tif (parent.type === 'AssignmentExpression') {\n\t\t\t\treturn parent.left === expr;\n\t\t\t}\n\t\t\tif (parent.type === 'UpdateExpression') {\n\t\t\t\treturn parent.argument === expr;\n\t\t\t}\n\t\t\tif (parent.type === 'UnaryExpression') {\n\t\t\t\treturn parent.operator === 'delete' && parent.argument === expr;\n\t\t\t}\n\t\t\tif (parent.type === 'MemberExpression') {\n\t\t\t\treturn parent.object === expr && hasWriteMember(ctx, parent);\n\t\t\t}\n\t\t\tif (parent.type === 'SvelteDirective') {\n\t\t\t\treturn parent.kind === 'Binding' && parent.expression === expr;\n\t\t\t}\n\t\t\tif (parent.type === 'SvelteEachBlock') {\n\t\t\t\treturn (\n\t\t\t\t\tparent.context !== null &&\n\t\t\t\t\tparent.expression === expr &&\n\t\t\t\t\thasWriteReference(ctx, parent.context)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/** Checks whether the given pattern has writing or not. */\n\t\tfunction hasWriteReference(\n\t\t\tctx: FindVariableContext,\n\t\t\tpattern: TSESTree.DestructuringPattern\n\t\t): boolean {\n\t\t\tfor (const id of iterateIdentifiers(pattern)) {\n\t\t\t\tconst variable = ctx.findVariable(id);\n\t\t\t\tif (variable && hasWrite(ctx, variable)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Iterates through references to top-level variables in the given range.\n\t\t */\n\t\tfunction* iterateRangeReferences(scope: Scope, range: [number, number]) {\n\t\t\tfor (const variable of scope.variables) {\n\t\t\t\tfor (const reference of variable.references) {\n\t\t\t\t\tif (\n\t\t\t\t\t\trange[0] <= reference.identifier.range[0] &&\n\t\t\t\t\t\treference.identifier.range[1] <= range[1]\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield reference;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteReactiveStatement(node: AST.SvelteReactiveStatement) {\n\t\t\t\tfor (const reference of iterateRangeReferences(toplevelScope, node.range)) {\n\t\t\t\t\tif (reference.isWriteOnly()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (isMutableVariableReference(reference)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const through of toplevelScope.through.filter(\n\t\t\t\t\t(reference) =>\n\t\t\t\t\t\tnode.range[0] <= reference.identifier.range[0] &&\n\t\t\t\t\t\treference.identifier.range[1] <= node.range[1]\n\t\t\t\t)) {\n\t\t\t\t\tif (through.identifier.name.startsWith('$$')) {\n\t\t\t\t\t\t// Builtin `$$` vars\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (through.resolved == null) {\n\t\t\t\t\t\t// Do not report if there are missing references.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode:\n\t\t\t\t\t\tnode.body.type === 'ExpressionStatement' &&\n\t\t\t\t\t\tnode.body.expression.type === 'AssignmentExpression' &&\n\t\t\t\t\t\tnode.body.expression.operator === '='\n\t\t\t\t\t\t\t? node.body.expression.right\n\t\t\t\t\t\t\t: node.body,\n\t\t\t\t\tmessageId: 'immutable'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-inline-styles.ts",
    "content": "import { createRule } from '../utils/index.js';\n\nexport default createRule('no-inline-styles', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow attributes and directives that produce inline styles',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tallowTransitions: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\thasStyleAttribute: 'Found disallowed style attribute.',\n\t\t\thasStyleDirective: 'Found disallowed style directive.',\n\t\t\thasTransition: 'Found disallowed transition.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst allowTransitions: boolean = context.options[0]?.allowTransitions ?? true;\n\t\treturn {\n\t\t\tSvelteElement(node) {\n\t\t\t\tif (node.kind !== 'html') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfor (const attribute of node.startTag.attributes) {\n\t\t\t\t\tif (attribute.type === 'SvelteStyleDirective') {\n\t\t\t\t\t\tcontext.report({ loc: attribute.loc, messageId: 'hasStyleDirective' });\n\t\t\t\t\t}\n\t\t\t\t\tif (attribute.type === 'SvelteAttribute' && attribute.key.name === 'style') {\n\t\t\t\t\t\tcontext.report({ loc: attribute.loc, messageId: 'hasStyleAttribute' });\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t!allowTransitions &&\n\t\t\t\t\t\tattribute.type === 'SvelteDirective' &&\n\t\t\t\t\t\tattribute.kind === 'Transition'\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({ loc: attribute.loc, messageId: 'hasTransition' });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-inner-declarations.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport {\n\tbuildProxyListener,\n\tdefineWrapperListener,\n\tgetCoreRule,\n\tgetProxyNode\n} from '../utils/eslint-core.js';\n\nconst coreRule = getCoreRule('no-inner-declarations');\n\nexport default createRule('no-inner-declarations', {\n\tmeta: {\n\t\t...coreRule.meta,\n\t\tdocs: {\n\t\t\tdescription: 'disallow variable or `function` declarations in nested blocks',\n\t\t\tcategory: 'Extension Rules',\n\t\t\trecommended: true,\n\t\t\textensionRule: 'no-inner-declarations'\n\t\t},\n\t\tfixable: coreRule.meta.fixable,\n\t\tschema: coreRule.meta.schema,\n\t\tmessages: coreRule.meta.messages,\n\t\ttype: coreRule.meta.type\n\t},\n\tcreate(context) {\n\t\treturn defineWrapperListener(coreRule, context, {\n\t\t\tcreateListenerProxy(coreListener) {\n\t\t\t\treturn buildProxyListener(coreListener, (node) => {\n\t\t\t\t\treturn getProxyNode(node, {\n\t\t\t\t\t\tget parent() {\n\t\t\t\t\t\t\tif (node.parent?.type === 'SvelteScriptElement') {\n\t\t\t\t\t\t\t\treturn node.parent.parent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn node.parent;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-inspect.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\n\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-inspect', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Warns against the use of `$inspect` directive',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true,\n\t\t\tdefault: 'warn'\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Do not use $inspect directive'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [true, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tIdentifier(node: TSESTree.Identifier) {\n\t\t\t\tif (node.name !== '$inspect') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontext.report({ messageId: 'unexpected', node });\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-navigation-without-base.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport { findVariable } from '../utils/ast-utils.js';\nimport { extractExpressionPrefixVariable } from '../utils/expression-affixes.js';\nimport type { RuleContext } from '../types.js';\nimport type { AST } from 'svelte-eslint-parser';\n\nexport default createRule('no-navigation-without-base', {\n\tmeta: {\n\t\tdeprecated: true,\n\t\treplacedBy: ['no-navigation-without-resolve'],\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow using navigation (links, goto, pushState, replaceState) without the base path',\n\t\t\tcategory: 'SvelteKit',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tignoreGoto: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignoreLinks: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignorePushState: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignoreReplaceState: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tgotoNotPrefixed: \"Found a goto() call with a url that isn't prefixed with the base path.\",\n\t\t\tlinkNotPrefixed: \"Found a link with a url that isn't prefixed with the base path.\",\n\t\t\tpushStateNotPrefixed:\n\t\t\t\t\"Found a pushState() call with a url that isn't prefixed with the base path.\",\n\t\t\treplaceStateNotPrefixed:\n\t\t\t\t\"Found a replaceState() call with a url that isn't prefixed with the base path.\"\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteKitVersions: ['1.0.0-next', '1', '2']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tlet basePathNames: Set<TSESTree.Identifier> = new Set<TSESTree.Identifier>();\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\t\t\t\tbasePathNames = extractBasePathReferences(referenceTracker, context);\n\t\t\t\tconst {\n\t\t\t\t\tgoto: gotoCalls,\n\t\t\t\t\tpushState: pushStateCalls,\n\t\t\t\t\treplaceState: replaceStateCalls\n\t\t\t\t} = extractFunctionCallReferences(referenceTracker);\n\t\t\t\tif (context.options[0]?.ignoreGoto !== true) {\n\t\t\t\t\tfor (const gotoCall of gotoCalls) {\n\t\t\t\t\t\tcheckGotoCall(context, gotoCall, basePathNames);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (context.options[0]?.ignorePushState !== true) {\n\t\t\t\t\tfor (const pushStateCall of pushStateCalls) {\n\t\t\t\t\t\tcheckShallowNavigationCall(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tpushStateCall,\n\t\t\t\t\t\t\tbasePathNames,\n\t\t\t\t\t\t\t'pushStateNotPrefixed'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (context.options[0]?.ignoreReplaceState !== true) {\n\t\t\t\t\tfor (const replaceStateCall of replaceStateCalls) {\n\t\t\t\t\t\tcheckShallowNavigationCall(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\treplaceStateCall,\n\t\t\t\t\t\t\tbasePathNames,\n\t\t\t\t\t\t\t'replaceStateNotPrefixed'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tSvelteAttribute(node) {\n\t\t\t\tif (\n\t\t\t\t\tcontext.options[0]?.ignoreLinks === true ||\n\t\t\t\t\tnode.parent.parent.type !== 'SvelteElement' ||\n\t\t\t\t\tnode.parent.parent.kind !== 'html' ||\n\t\t\t\t\tnode.parent.parent.name.type !== 'SvelteName' ||\n\t\t\t\t\tnode.parent.parent.name.name !== 'a' ||\n\t\t\t\t\tnode.key.name !== 'href'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst hrefValue = node.value[0];\n\t\t\t\tif (hrefValue.type === 'SvelteLiteral') {\n\t\t\t\t\tif (!expressionIsAbsolute(hrefValue) && !expressionIsFragment(hrefValue)) {\n\t\t\t\t\t\tcontext.report({ loc: hrefValue.loc, messageId: 'linkNotPrefixed' });\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!expressionStartsWithBase(context, hrefValue.expression, basePathNames) &&\n\t\t\t\t\t!expressionIsAbsolute(hrefValue.expression) &&\n\t\t\t\t\t!expressionIsFragment(hrefValue.expression)\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({ loc: hrefValue.loc, messageId: 'linkNotPrefixed' });\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n// Extract all imports of the base path\n\nfunction extractBasePathReferences(\n\treferenceTracker: ReferenceTracker,\n\tcontext: RuleContext\n): Set<TSESTree.Identifier> {\n\tconst set = new Set<TSESTree.Identifier>();\n\tfor (const { node } of referenceTracker.iterateEsmReferences({\n\t\t'$app/paths': {\n\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\tbase: {\n\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t}\n\t\t}\n\t})) {\n\t\tif (node.type === 'ImportSpecifier') {\n\t\t\tconst variable = findVariable(context, node.local);\n\t\t\tif (variable === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const reference of variable.references) {\n\t\t\t\tif (reference.identifier.type === 'Identifier') set.add(reference.identifier);\n\t\t\t}\n\t\t} else if (\n\t\t\tnode.type === 'MemberExpression' &&\n\t\t\tnode.property.type === 'Identifier' &&\n\t\t\tnode.property.name === 'base'\n\t\t) {\n\t\t\tset.add(node.property);\n\t\t}\n\t}\n\treturn set;\n}\n\n// Extract all references to goto, pushState and replaceState\n\nfunction extractFunctionCallReferences(referenceTracker: ReferenceTracker): {\n\tgoto: TSESTree.CallExpression[];\n\tpushState: TSESTree.CallExpression[];\n\treplaceState: TSESTree.CallExpression[];\n} {\n\tconst rawReferences = Array.from(\n\t\treferenceTracker.iterateEsmReferences({\n\t\t\t'$app/navigation': {\n\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\tgoto: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t},\n\t\t\t\tpushState: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t},\n\t\t\t\treplaceState: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n\treturn {\n\t\tgoto: rawReferences\n\t\t\t.filter(({ path }) => path[path.length - 1] === 'goto')\n\t\t\t.map(({ node }) => node as TSESTree.CallExpression),\n\t\tpushState: rawReferences\n\t\t\t.filter(({ path }) => path[path.length - 1] === 'pushState')\n\t\t\t.map(({ node }) => node as TSESTree.CallExpression),\n\t\treplaceState: rawReferences\n\t\t\t.filter(({ path }) => path[path.length - 1] === 'replaceState')\n\t\t\t.map(({ node }) => node as TSESTree.CallExpression)\n\t};\n}\n\n// Actual function checking\n\nfunction checkGotoCall(\n\tcontext: RuleContext,\n\tcall: TSESTree.CallExpression,\n\tbasePathNames: Set<TSESTree.Identifier>\n): void {\n\tif (call.arguments.length < 1) {\n\t\treturn;\n\t}\n\tconst url = call.arguments[0];\n\tif (url.type === 'SpreadElement' || !expressionStartsWithBase(context, url, basePathNames)) {\n\t\tcontext.report({ loc: url.loc, messageId: 'gotoNotPrefixed' });\n\t}\n}\n\nfunction checkShallowNavigationCall(\n\tcontext: RuleContext,\n\tcall: TSESTree.CallExpression,\n\tbasePathNames: Set<TSESTree.Identifier>,\n\tmessageId: string\n): void {\n\tif (call.arguments.length < 1) {\n\t\treturn;\n\t}\n\tconst url = call.arguments[0];\n\tif (\n\t\turl.type === 'SpreadElement' ||\n\t\t(!expressionIsEmpty(url) && !expressionStartsWithBase(context, url, basePathNames))\n\t) {\n\t\tcontext.report({ loc: url.loc, messageId });\n\t}\n}\n\n// Helper functions\n\nfunction expressionStartsWithBase(\n\tcontext: RuleContext,\n\turl: TSESTree.Expression,\n\tbasePathNames: Set<TSESTree.Identifier>\n): boolean {\n\tconst prefixVariable = extractExpressionPrefixVariable(context, url);\n\treturn prefixVariable !== null && basePathNames.has(prefixVariable);\n}\n\nfunction expressionIsEmpty(url: TSESTree.Expression): boolean {\n\treturn (\n\t\t(url.type === 'Literal' && url.value === '') ||\n\t\t(url.type === 'TemplateLiteral' &&\n\t\t\turl.expressions.length === 0 &&\n\t\t\turl.quasis.length === 1 &&\n\t\t\turl.quasis[0].value.raw === '')\n\t);\n}\n\nfunction expressionIsAbsolute(url: AST.SvelteLiteral | TSESTree.Expression): boolean {\n\tswitch (url.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn binaryExpressionIsAbsolute(url);\n\t\tcase 'Literal':\n\t\t\treturn typeof url.value === 'string' && urlValueIsAbsolute(url.value);\n\t\tcase 'SvelteLiteral':\n\t\t\treturn urlValueIsAbsolute(url.value);\n\t\tcase 'TemplateLiteral':\n\t\t\treturn templateLiteralIsAbsolute(url);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction binaryExpressionIsAbsolute(url: TSESTree.BinaryExpression): boolean {\n\treturn (\n\t\t(url.left.type !== 'PrivateIdentifier' && expressionIsAbsolute(url.left)) ||\n\t\texpressionIsAbsolute(url.right)\n\t);\n}\n\nfunction templateLiteralIsAbsolute(url: TSESTree.TemplateLiteral): boolean {\n\treturn (\n\t\turl.expressions.some(expressionIsAbsolute) ||\n\t\turl.quasis.some((quasi) => urlValueIsAbsolute(quasi.value.raw))\n\t);\n}\n\nfunction urlValueIsAbsolute(url: string): boolean {\n\treturn /^[+a-z]*:/i.test(url);\n}\n\nfunction expressionIsFragment(url: AST.SvelteLiteral | TSESTree.Expression): boolean {\n\tswitch (url.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn binaryExpressionIsFragment(url);\n\t\tcase 'Literal':\n\t\t\treturn typeof url.value === 'string' && urlValueIsFragment(url.value);\n\t\tcase 'SvelteLiteral':\n\t\t\treturn urlValueIsFragment(url.value);\n\t\tcase 'TemplateLiteral':\n\t\t\treturn templateLiteralIsFragment(url);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction binaryExpressionIsFragment(url: TSESTree.BinaryExpression): boolean {\n\treturn url.left.type !== 'PrivateIdentifier' && expressionIsFragment(url.left);\n}\n\nfunction templateLiteralIsFragment(url: TSESTree.TemplateLiteral): boolean {\n\treturn (\n\t\t(url.expressions.length >= 1 && expressionIsFragment(url.expressions[0])) ||\n\t\t(url.quasis.length >= 1 && urlValueIsFragment(url.quasis[0].value.raw))\n\t);\n}\n\nfunction urlValueIsFragment(url: string): boolean {\n\treturn url.startsWith('#');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-navigation-without-resolve.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\n\nimport { createRule } from '../utils/index.js';\nimport { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport { FindVariableContext } from '../utils/ast-utils.js';\nimport { findVariable } from '../utils/ast-utils.js';\nimport type { RuleContext } from '../types.js';\nimport type { AST } from 'svelte-eslint-parser';\nimport { type TSTools, getTypeScriptTools } from '../utils/ts-utils/index.js';\n\nexport default createRule('no-navigation-without-resolve', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow internal navigation (links, `goto()`, `pushState()`, `replaceState()`) without a `resolve()`',\n\t\t\tcategory: 'SvelteKit',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tignoreGoto: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignoreLinks: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignorePushState: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignoreReplaceState: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tgotoWithoutResolve: 'Unexpected goto() call without resolve().',\n\t\t\tlinkWithoutResolve: 'Unexpected href link without resolve().',\n\t\t\tpushStateWithoutResolve: 'Unexpected pushState() call without resolve().',\n\t\t\treplaceStateWithoutResolve: 'Unexpected replaceState() call without resolve().'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteKitVersions: ['1.0.0-next', '1', '2']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst tsTools = getTypeScriptTools(context);\n\n\t\tlet resolveReferences: Set<TSESTree.Identifier> = new Set<TSESTree.Identifier>();\n\n\t\tconst ignoreGoto = context.options[0]?.ignoreGoto ?? false;\n\t\tconst ignorePushState = context.options[0]?.ignorePushState ?? false;\n\t\tconst ignoreReplaceState = context.options[0]?.ignoreReplaceState ?? false;\n\t\tconst ignoreLinks = context.options[0]?.ignoreLinks ?? false;\n\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\t\t\t\tresolveReferences = extractResolveReferences(referenceTracker, context);\n\t\t\t\tconst {\n\t\t\t\t\tgoto: gotoCalls,\n\t\t\t\t\tpushState: pushStateCalls,\n\t\t\t\t\treplaceState: replaceStateCalls\n\t\t\t\t} = extractFunctionCallReferences(referenceTracker);\n\t\t\t\tif (!ignoreGoto) {\n\t\t\t\t\tfor (const gotoCall of gotoCalls) {\n\t\t\t\t\t\tcheckGotoCall(context, gotoCall, resolveReferences, tsTools);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!ignorePushState) {\n\t\t\t\t\tfor (const pushStateCall of pushStateCalls) {\n\t\t\t\t\t\tcheckShallowNavigationCall(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tpushStateCall,\n\t\t\t\t\t\t\tresolveReferences,\n\t\t\t\t\t\t\ttsTools,\n\t\t\t\t\t\t\t'pushStateWithoutResolve'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!ignoreReplaceState) {\n\t\t\t\t\tfor (const replaceStateCall of replaceStateCalls) {\n\t\t\t\t\t\tcheckShallowNavigationCall(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\treplaceStateCall,\n\t\t\t\t\t\t\tresolveReferences,\n\t\t\t\t\t\t\ttsTools,\n\t\t\t\t\t\t\t'replaceStateWithoutResolve'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t...(!ignoreLinks && {\n\t\t\t\tSvelteShorthandAttribute(node) {\n\t\t\t\t\tcheckLinkAttribute(context, node, node.value, resolveReferences, tsTools);\n\t\t\t\t},\n\t\t\t\tSvelteAttribute(node) {\n\t\t\t\t\tif (node.value.length > 0) {\n\t\t\t\t\t\tcheckLinkAttribute(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tnode.value[0].type === 'SvelteMustacheTag' ? node.value[0].expression : node.value[0],\n\t\t\t\t\t\t\tresolveReferences,\n\t\t\t\t\t\t\ttsTools\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t};\n\t}\n});\n\n// Extract all imports of the resolve() function\n\nfunction extractResolveReferences(\n\treferenceTracker: ReferenceTracker,\n\tcontext: RuleContext\n): Set<TSESTree.Identifier> {\n\tconst set = new Set<TSESTree.Identifier>();\n\tfor (const { node } of referenceTracker.iterateEsmReferences({\n\t\t'$app/paths': {\n\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\tasset: {\n\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t},\n\t\t\tresolve: {\n\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t}\n\t\t}\n\t})) {\n\t\tif (node.type === 'ImportSpecifier') {\n\t\t\tconst variable = findVariable(context, node.local);\n\t\t\tif (variable === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const reference of variable.references) {\n\t\t\t\tif (reference.identifier.type === 'Identifier') set.add(reference.identifier);\n\t\t\t}\n\t\t} else if (\n\t\t\tnode.type === 'MemberExpression' &&\n\t\t\tnode.property.type === 'Identifier' &&\n\t\t\tnode.property.name === 'resolve'\n\t\t) {\n\t\t\tset.add(node.property);\n\t\t}\n\t}\n\treturn set;\n}\n\n// Extract all references to goto, pushState and replaceState\n\nfunction extractFunctionCallReferences(referenceTracker: ReferenceTracker): {\n\tgoto: TSESTree.CallExpression[];\n\tpushState: TSESTree.CallExpression[];\n\treplaceState: TSESTree.CallExpression[];\n} {\n\tconst rawReferences = Array.from(\n\t\treferenceTracker.iterateEsmReferences({\n\t\t\t'$app/navigation': {\n\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\tgoto: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t},\n\t\t\t\tpushState: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t},\n\t\t\t\treplaceState: {\n\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n\treturn {\n\t\tgoto: rawReferences\n\t\t\t.filter(({ path }) => path[path.length - 1] === 'goto')\n\t\t\t.map(({ node }) => node as TSESTree.CallExpression),\n\t\tpushState: rawReferences\n\t\t\t.filter(({ path }) => path[path.length - 1] === 'pushState')\n\t\t\t.map(({ node }) => node as TSESTree.CallExpression),\n\t\treplaceState: rawReferences\n\t\t\t.filter(({ path }) => path[path.length - 1] === 'replaceState')\n\t\t\t.map(({ node }) => node as TSESTree.CallExpression)\n\t};\n}\n\n// Actual function checking\n\nfunction checkGotoCall(\n\tcontext: RuleContext,\n\tcall: TSESTree.CallExpression,\n\tresolveReferences: Set<TSESTree.Identifier>,\n\ttsTools: TSTools | null\n): void {\n\tif (\n\t\tcall.arguments.length > 0 &&\n\t\t!isValueAllowed(\n\t\t\tnew FindVariableContext(context),\n\t\t\tcall.arguments[0],\n\t\t\tresolveReferences,\n\t\t\ttsTools,\n\t\t\t{}\n\t\t)\n\t) {\n\t\tcontext.report({ loc: call.arguments[0].loc, messageId: 'gotoWithoutResolve' });\n\t}\n}\n\nfunction checkShallowNavigationCall(\n\tcontext: RuleContext,\n\tcall: TSESTree.CallExpression,\n\tresolveReferences: Set<TSESTree.Identifier>,\n\ttsTools: TSTools | null,\n\tmessageId: string\n): void {\n\tif (\n\t\tcall.arguments.length > 0 &&\n\t\t!isValueAllowed(\n\t\t\tnew FindVariableContext(context),\n\t\t\tcall.arguments[0],\n\t\t\tresolveReferences,\n\t\t\ttsTools,\n\t\t\t{\n\t\t\t\tallowEmpty: true\n\t\t\t}\n\t\t)\n\t) {\n\t\tcontext.report({ loc: call.arguments[0].loc, messageId });\n\t}\n}\n\nfunction checkLinkAttribute(\n\tcontext: RuleContext,\n\tattribute: AST.SvelteAttribute | AST.SvelteShorthandAttribute,\n\tvalue: TSESTree.Expression | AST.SvelteLiteral,\n\tresolveReferences: Set<TSESTree.Identifier>,\n\ttsTools: TSTools | null\n): void {\n\tif (\n\t\tattribute.parent.parent.type === 'SvelteElement' &&\n\t\tattribute.parent.parent.kind === 'html' &&\n\t\tattribute.parent.parent.name.type === 'SvelteName' &&\n\t\tattribute.parent.parent.name.name === 'a' &&\n\t\tattribute.key.name === 'href' &&\n\t\t!hasRelExternal(new FindVariableContext(context), attribute.parent) &&\n\t\t!isValueAllowed(new FindVariableContext(context), value, resolveReferences, tsTools, {\n\t\t\tallowAbsolute: true,\n\t\t\tallowFragment: true,\n\t\t\tallowNullish: true\n\t\t})\n\t) {\n\t\tcontext.report({ loc: attribute.loc, messageId: 'linkWithoutResolve' });\n\t}\n}\n\nfunction hasRelExternal(ctx: FindVariableContext, element: AST.SvelteStartTag): boolean {\n\tfunction identifierIsExternal(identifier: TSESTree.Identifier): boolean {\n\t\tconst variable = ctx.findVariable(identifier);\n\t\treturn (\n\t\t\tvariable !== null &&\n\t\t\tvariable.identifiers.length > 0 &&\n\t\t\tvariable.identifiers[0].parent.type === 'VariableDeclarator' &&\n\t\t\tvariable.identifiers[0].parent.init !== null &&\n\t\t\tvariable.identifiers[0].parent.init.type === 'Literal' &&\n\t\t\tvariable.identifiers[0].parent.init.value === 'external'\n\t\t);\n\t}\n\n\tfor (const attr of element.attributes) {\n\t\tif (\n\t\t\t(attr.type === 'SvelteAttribute' &&\n\t\t\t\tattr.key.name === 'rel' &&\n\t\t\t\t((attr.value[0].type === 'SvelteLiteral' &&\n\t\t\t\t\tattr.value[0].value.split(/\\s+/).includes('external')) ||\n\t\t\t\t\t(attr.value[0].type === 'SvelteMustacheTag' &&\n\t\t\t\t\t\t((attr.value[0].expression.type === 'Literal' &&\n\t\t\t\t\t\t\tattr.value[0].expression.value?.toString().split(/\\s+/).includes('external')) ||\n\t\t\t\t\t\t\t(attr.value[0].expression.type === 'Identifier' &&\n\t\t\t\t\t\t\t\tidentifierIsExternal(attr.value[0].expression)))))) ||\n\t\t\t(attr.type === 'SvelteShorthandAttribute' &&\n\t\t\t\tattr.key.name === 'rel' &&\n\t\t\t\tattr.value.type === 'Identifier' &&\n\t\t\t\tidentifierIsExternal(attr.value))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isValueAllowed(\n\tctx: FindVariableContext,\n\tvalue: TSESTree.CallExpressionArgument | AST.SvelteLiteral,\n\tresolveReferences: Set<TSESTree.Identifier>,\n\ttsTools: TSTools | null,\n\tconfig: {\n\t\tallowAbsolute?: boolean;\n\t\tallowEmpty?: boolean;\n\t\tallowFragment?: boolean;\n\t\tallowNullish?: boolean;\n\t}\n): boolean {\n\tif (value.type === 'Identifier') {\n\t\tconst variable = ctx.findVariable(value);\n\t\tif (\n\t\t\tvariable !== null &&\n\t\t\tvariable.identifiers.length > 0 &&\n\t\t\tvariable.identifiers[0].parent.type === 'VariableDeclarator'\n\t\t) {\n\t\t\tif (expressionIsResolvedPathname(variable.identifiers[0], tsTools)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (variable.identifiers[0].parent.init !== null) {\n\t\t\t\treturn isValueAllowed(\n\t\t\t\t\tctx,\n\t\t\t\t\tvariable.identifiers[0].parent.init,\n\t\t\t\t\tresolveReferences,\n\t\t\t\t\ttsTools,\n\t\t\t\t\tconfig\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tif (value.type === 'ConditionalExpression') {\n\t\treturn (\n\t\t\tisValueAllowed(ctx, value.consequent, resolveReferences, tsTools, config) &&\n\t\t\tisValueAllowed(ctx, value.alternate, resolveReferences, tsTools, config)\n\t\t);\n\t}\n\tif (\n\t\t(config.allowAbsolute && expressionIsAbsoluteUrl(ctx, value)) ||\n\t\t(config.allowEmpty && expressionIsEmpty(value)) ||\n\t\t(config.allowFragment && expressionStartsWith(ctx, value, '#')) ||\n\t\t(config.allowNullish && expressionIsNullish(value)) ||\n\t\texpressionIsResolvedPathname(value, tsTools) ||\n\t\texpressionIsResolveCall(ctx, value, resolveReferences)\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n// Helper functions\n\nfunction expressionIsResolvedPathname(\n\tvalue: TSESTree.CallExpressionArgument | TSESTree.Expression | AST.SvelteLiteral,\n\ttsTools: TSTools | null\n): boolean {\n\tif (tsTools === null) {\n\t\treturn false;\n\t}\n\tconst checker = tsTools.service.program.getTypeChecker();\n\n\tconst tsNode = tsTools.service.esTreeNodeToTSNodeMap.get(value);\n\tif (tsNode === undefined) {\n\t\treturn false;\n\t}\n\tconst nodeType = checker.getTypeAtLocation(tsNode);\n\n\tconst appTypesModule = checker.getAmbientModules().find((m) => m.name === '\"$app/types\"');\n\tif (!appTypesModule) {\n\t\treturn false;\n\t}\n\n\tconst resolvedPathnameSymbol = checker\n\t\t.getExportsOfModule(appTypesModule)\n\t\t.find((e) => e.name === 'ResolvedPathname');\n\tif (!resolvedPathnameSymbol) {\n\t\treturn false;\n\t}\n\tconst resolvedPathnameType = checker.getDeclaredTypeOfSymbol(resolvedPathnameSymbol);\n\n\t// getTypeAtLocation returns the resolved (structural) type without alias information, so we cannot compare aliasSymbols directly. Instead we check structural equivalence by testing assignability in both directions: this correctly rejects strict subtypes like Pathname (Pathname ⊂ ResolvedPathname, so only one direction holds).\n\treturn (\n\t\tchecker.isTypeAssignableTo(nodeType, resolvedPathnameType) &&\n\t\tchecker.isTypeAssignableTo(resolvedPathnameType, nodeType)\n\t);\n}\n\nfunction expressionIsResolveCall(\n\tctx: FindVariableContext,\n\tnode: TSESTree.CallExpressionArgument | AST.SvelteLiteral,\n\tresolveReferences: Set<TSESTree.Identifier>\n): boolean {\n\tif (\n\t\tnode.type === 'CallExpression' &&\n\t\t((node.callee.type === 'Identifier' && resolveReferences.has(node.callee)) ||\n\t\t\t(node.callee.type === 'MemberExpression' &&\n\t\t\t\tnode.callee.property.type === 'Identifier' &&\n\t\t\t\tresolveReferences.has(node.callee.property)))\n\t) {\n\t\treturn true;\n\t}\n\tif (node.type !== 'Identifier') {\n\t\treturn false;\n\t}\n\tconst variable = ctx.findVariable(node);\n\tif (\n\t\tvariable === null ||\n\t\tvariable.identifiers.length === 0 ||\n\t\tvariable.identifiers[0].parent.type !== 'VariableDeclarator' ||\n\t\tvariable.identifiers[0].parent.init === null\n\t) {\n\t\treturn false;\n\t}\n\treturn expressionIsResolveCall(ctx, variable.identifiers[0].parent.init, resolveReferences);\n}\n\nfunction expressionIsEmpty(\n\tnode: TSESTree.CallExpressionArgument | TSESTree.Expression | AST.SvelteLiteral\n): boolean {\n\treturn (\n\t\t(node.type === 'Literal' && node.value === '') ||\n\t\t(node.type === 'TemplateLiteral' &&\n\t\t\tnode.expressions.length === 0 &&\n\t\t\tnode.quasis.length === 1 &&\n\t\t\tnode.quasis[0].value.raw === '')\n\t);\n}\n\nfunction expressionIsNullish(\n\tnode: TSESTree.CallExpressionArgument | TSESTree.Expression | AST.SvelteLiteral\n): boolean {\n\tswitch (node.type) {\n\t\tcase 'Identifier':\n\t\t\treturn node.name === 'undefined';\n\t\tcase 'Literal':\n\t\t\treturn node.value === null; // Undefined is an Identifier in ESTree, null is a Literal\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction expressionIsAbsoluteUrl(\n\tctx: FindVariableContext,\n\tnode: TSESTree.CallExpressionArgument | TSESTree.Expression | AST.SvelteLiteral\n): boolean {\n\tswitch (node.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn binaryExpressionIsAbsoluteUrl(ctx, node);\n\t\tcase 'Literal':\n\t\t\treturn typeof node.value === 'string' && valueIsAbsoluteUrl(node.value);\n\t\tcase 'SvelteLiteral':\n\t\t\treturn valueIsAbsoluteUrl(node.value);\n\t\tcase 'TemplateLiteral':\n\t\t\treturn templateLiteralIsAbsoluteUrl(ctx, node);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction binaryExpressionIsAbsoluteUrl(\n\tctx: FindVariableContext,\n\tnode: TSESTree.BinaryExpression\n): boolean {\n\treturn (\n\t\tnode.operator === '+' &&\n\t\t(expressionIsAbsoluteUrl(ctx, node.left) || expressionIsAbsoluteUrl(ctx, node.right))\n\t);\n}\n\nfunction templateLiteralIsAbsoluteUrl(\n\tctx: FindVariableContext,\n\tnode: TSESTree.TemplateLiteral\n): boolean {\n\treturn (\n\t\tnode.expressions.some((expression) => expressionIsAbsoluteUrl(ctx, expression)) ||\n\t\tnode.quasis.some((quasi) => valueIsAbsoluteUrl(quasi.value.raw))\n\t);\n}\n\nfunction valueIsAbsoluteUrl(node: string): boolean {\n\treturn /^[+a-z]*:/i.test(node);\n}\n\nfunction expressionStartsWith(\n\tctx: FindVariableContext,\n\tnode:\n\t\t| TSESTree.CallExpressionArgument\n\t\t| TSESTree.Expression\n\t\t| TSESTree.TemplateElement\n\t\t| AST.SvelteLiteral,\n\tprefix: string\n): boolean {\n\tswitch (node.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn binaryExpressionStartsWith(ctx, node, prefix);\n\t\tcase 'Identifier':\n\t\t\treturn identifierStartsWith(ctx, node, prefix);\n\t\tcase 'Literal':\n\t\t\treturn typeof node.value === 'string' && node.value.startsWith(prefix);\n\t\tcase 'SvelteLiteral':\n\t\t\treturn node.value.startsWith(prefix);\n\t\tcase 'TemplateElement':\n\t\t\treturn node.value.raw.startsWith(prefix);\n\t\tcase 'TemplateLiteral':\n\t\t\treturn templateLiteralStartsWith(ctx, node, prefix);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction binaryExpressionStartsWith(\n\tctx: FindVariableContext,\n\tnode: TSESTree.BinaryExpression,\n\tprefix: string\n): boolean {\n\treturn node.operator === '+' && expressionStartsWith(ctx, node.left, prefix);\n}\n\nfunction identifierStartsWith(\n\tctx: FindVariableContext,\n\tnode: TSESTree.Identifier,\n\tprefix: string\n): boolean {\n\tconst variable = ctx.findVariable(node);\n\tif (\n\t\tvariable === null ||\n\t\tvariable.identifiers.length === 0 ||\n\t\tvariable.identifiers[0].parent.type !== 'VariableDeclarator' ||\n\t\tvariable.identifiers[0].parent.init === null\n\t) {\n\t\treturn false;\n\t}\n\treturn expressionStartsWith(ctx, variable.identifiers[0].parent.init, prefix);\n}\n\nfunction templateLiteralStartsWith(\n\tctx: FindVariableContext,\n\tnode: TSESTree.TemplateLiteral,\n\tprefix: string\n): boolean {\n\treturn (\n\t\t(node.expressions.length >= 1 && expressionStartsWith(ctx, node.expressions[0], prefix)) ||\n\t\t(node.quasis.length >= 1 && expressionStartsWith(ctx, node.quasis[0], prefix))\n\t);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { EVENT_NAMES } from '../utils/events.js';\nimport { FindVariableContext } from '../utils/ast-utils.js';\n\nconst PHRASES = {\n\tObjectExpression: 'object',\n\tArrayExpression: 'array',\n\tClassExpression: 'class',\n\tLiteral(node: TSESTree.Literal): string | null {\n\t\tif ('regex' in node) {\n\t\t\treturn 'regex value';\n\t\t}\n\t\tif ('bigint' in node) {\n\t\t\treturn 'bigint value';\n\t\t}\n\t\tif (node.value == null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn `${typeof node.value} value`;\n\t},\n\tTemplateLiteral: 'string value'\n};\nexport default createRule('no-not-function-handler', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow use of not function in event handler',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Unexpected {{phrase}} in event handler.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\t/** Find data expression */\n\t\tfunction findRootExpression(\n\t\t\tctx: FindVariableContext,\n\t\t\tnode: TSESTree.Expression\n\t\t): TSESTree.Expression {\n\t\t\tif (node.type !== 'Identifier') {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tconst variable = ctx.findVariable(node);\n\t\t\tif (!variable || variable.defs.length !== 1) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tconst def = variable.defs[0];\n\t\t\tif (def.type === 'Variable') {\n\t\t\t\tif (def.parent.kind === 'const' && def.node.init) {\n\t\t\t\t\tconst init = def.node.init;\n\t\t\t\t\treturn findRootExpression(ctx, init);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn node;\n\t\t}\n\n\t\t/** Verify for `on:` directive value */\n\t\tfunction verify(node: AST.SvelteEventHandlerDirective['expression']) {\n\t\t\tif (!node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst expression = findRootExpression(new FindVariableContext(context), node);\n\n\t\t\tif (\n\t\t\t\texpression.type !== 'ObjectExpression' &&\n\t\t\t\texpression.type !== 'ArrayExpression' &&\n\t\t\t\texpression.type !== 'ClassExpression' &&\n\t\t\t\texpression.type !== 'Literal' &&\n\t\t\t\texpression.type !== 'TemplateLiteral'\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst phraseValue = PHRASES[expression.type];\n\t\t\tconst phrase =\n\t\t\t\ttypeof phraseValue === 'function' ? phraseValue(expression as never) : phraseValue;\n\t\t\tif (phrase == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'unexpected',\n\t\t\t\tdata: {\n\t\t\t\t\tphrase\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteDirective(node) {\n\t\t\t\tif (node.kind !== 'EventHandler') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tverify(node.expression);\n\t\t\t},\n\t\t\tSvelteAttribute(node) {\n\t\t\t\tif (node.key.type === 'SvelteName' && EVENT_NAMES.includes(node.key.name)) {\n\t\t\t\t\tconst { value } = node;\n\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\tfor (const v of value) {\n\t\t\t\t\t\t\tif (v.type === 'SvelteMustacheTag') {\n\t\t\t\t\t\t\t\tverify(v.expression);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts",
    "content": "import { createRule } from '../utils/index.js';\n\nconst PHRASES = {\n\tObjectExpression: 'object',\n\tArrayExpression: 'array',\n\tArrowFunctionExpression: 'function',\n\tFunctionExpression: 'function',\n\tClassExpression: 'class'\n};\n\nexport default createRule('no-object-in-text-mustaches', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow objects in text mustache interpolation',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Unexpected {{phrase}} in text mustache interpolation.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteMustacheTag(node) {\n\t\t\t\tconst { expression } = node;\n\t\t\t\tif (\n\t\t\t\t\texpression.type !== 'ObjectExpression' &&\n\t\t\t\t\texpression.type !== 'ArrayExpression' &&\n\t\t\t\t\texpression.type !== 'ArrowFunctionExpression' &&\n\t\t\t\t\texpression.type !== 'FunctionExpression' &&\n\t\t\t\t\texpression.type !== 'ClassExpression'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (node.parent.type === 'SvelteAttribute') {\n\t\t\t\t\tif (node.parent.value.length === 1) {\n\t\t\t\t\t\t// Maybe props\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tphrase: PHRASES[expression.type]\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\nconst INVALID_HTML_ELEMENTS = ['head', 'body', 'window', 'document', 'element', 'options'];\nconst VALID_PREFIX = 'svelte:';\n\nexport default createRule('no-raw-special-elements', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Checks for invalid raw HTML elements',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tdeprecatedElement:\n\t\t\t\t'Special {{name}} element is deprecated in v5, use svelte:{{name}} instead.'\n\t\t},\n\t\ttype: 'problem', // 'problem', or 'layout',\n\t\tfixable: 'code'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\t'SvelteElement[kind=\"html\"]'(node: AST.SvelteHTMLElement) {\n\t\t\t\tconst { name } = node.name;\n\t\t\t\tif (INVALID_HTML_ELEMENTS.includes(name)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'deprecatedElement',\n\t\t\t\t\t\tdata: { name },\n\t\t\t\t\t\t*fix(fixer) {\n\t\t\t\t\t\t\tconst { endTag } = node;\n\t\t\t\t\t\t\tyield fixer.insertTextBeforeRange([node.range[0] + 1, node.range[1]], VALID_PREFIX);\n\t\t\t\t\t\t\tif (endTag) {\n\t\t\t\t\t\t\t\tyield fixer.insertTextBeforeRange(\n\t\t\t\t\t\t\t\t\t[endTag.range[0] + 2, endTag.range[1]],\n\t\t\t\t\t\t\t\t\tVALID_PREFIX\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-reactive-functions', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"it's not necessary to define functions in reactive statements\",\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tnoReactiveFns: `Do not create functions inside reactive statements unless absolutely necessary.`,\n\t\t\tfixReactiveFns: `Move the function out of the reactive statement`\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\t// $: foo = () => { ... }\n\t\t\t[`SvelteReactiveStatement > ExpressionStatement > AssignmentExpression > :function`](\n\t\t\t\tnode: TSESTree.ArrowFunctionExpression\n\t\t\t) {\n\t\t\t\t// Move upwards to include the entire label\n\t\t\t\tconst parent = node.parent?.parent?.parent;\n\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst source = context.sourceCode;\n\n\t\t\t\treturn context.report({\n\t\t\t\t\tnode: parent,\n\t\t\t\t\tloc: parent.loc,\n\t\t\t\t\tmessageId: 'noReactiveFns',\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessageId: 'fixReactiveFns',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\tconst tokens = source.getFirstTokens(parent, {\n\t\t\t\t\t\t\t\t\tincludeComments: false,\n\t\t\t\t\t\t\t\t\tcount: 3\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst noExtraSpace = source.isSpaceBetweenTokens(\n\t\t\t\t\t\t\t\t\ttokens[1] as AST.Token,\n\t\t\t\t\t\t\t\t\ttokens[2] as AST.Token\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Replace the entire reactive label with \"const\"\n\t\t\t\t\t\t\t\treturn fixer.replaceTextRange(\n\t\t\t\t\t\t\t\t\t[tokens[0].range[0], tokens[1].range[1]],\n\t\t\t\t\t\t\t\t\tnoExtraSpace ? 'const' : 'const '\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-reactive-literals', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"don't assign literal values in reactive statements\",\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tnoReactiveLiterals: `Do not assign literal values inside reactive statements unless absolutely necessary.`,\n\t\t\tfixReactiveLiteral: `Move the literal out of the reactive statement into an assignment`\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\t[`SvelteReactiveStatement > ExpressionStatement > AssignmentExpression:matches(${[\n\t\t\t\t// $: foo = \"foo\";\n\t\t\t\t// $: foo = 1;\n\t\t\t\t`[right.type=\"Literal\"]`,\n\n\t\t\t\t// $: foo = [];\n\t\t\t\t`[right.type=\"ArrayExpression\"][right.elements.length=0]`,\n\n\t\t\t\t// $: foo = {};\n\t\t\t\t`[right.type=\"ObjectExpression\"][right.properties.length=0]`\n\t\t\t].join(',')})`](node: TSESTree.AssignmentExpression) {\n\t\t\t\t// Move upwards to include the entire reactive statement\n\t\t\t\tconst parent = node.parent?.parent;\n\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst source = context.sourceCode;\n\n\t\t\t\treturn context.report({\n\t\t\t\t\tnode: parent,\n\t\t\t\t\tloc: parent.loc,\n\t\t\t\t\tmessageId: 'noReactiveLiterals',\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessageId: 'fixReactiveLiteral',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t// Insert \"let\" + whatever was in there\n\t\t\t\t\t\t\t\t\tfixer.insertTextBefore(parent, `let ${source.getText(node)}`),\n\n\t\t\t\t\t\t\t\t\t// Remove the original reactive statement\n\t\t\t\t\t\t\t\t\tfixer.remove(parent)\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport { getPropertyName } from '@eslint-community/eslint-utils';\n\nexport default createRule('no-reactive-reassign', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow reassigning reactive values',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tassignmentToReactiveValue: \"Assignment to reactive value '{{name}}'.\",\n\t\t\tassignmentToReactiveValueProp: \"Assignment to property of reactive value '{{name}}'.\"\n\t\t},\n\t\ttype: 'problem',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t},\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [false, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst props = context.options[0]?.props !== false; // default true\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst scopeManager = sourceCode.scopeManager;\n\t\tconst globalScope = scopeManager.globalScope;\n\t\tconst toplevelScope =\n\t\t\tglobalScope?.childScopes.find((scope) => scope.type === 'module') || globalScope;\n\t\tif (!globalScope || !toplevelScope) {\n\t\t\treturn {};\n\t\t}\n\n\t\ttype CheckContext<P extends TSESTree.Node | AST.SvelteDirective> = {\n\t\t\tnode: TSESTree.Expression;\n\t\t\tparent: P;\n\t\t\tpathNodes: TSESTree.MemberExpression[];\n\t\t};\n\t\tconst CHECK_REASSIGN: {\n\t\t\t[key in TSESTree.Node['type'] | 'SvelteDirective']?: (\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Ignore\n\t\t\t\tctx: CheckContext<any>\n\t\t\t) =>\n\t\t\t\t| null // The given expression does not reassign.\n\t\t\t\t// The given expression will reassign.\n\t\t\t\t| {\n\t\t\t\t\t\ttype: 'reassign';\n\t\t\t\t\t\tnode: TSESTree.Node | AST.SvelteNode;\n\t\t\t\t\t\tpathNodes?: TSESTree.MemberExpression[];\n\t\t\t\t  }\n\t\t\t\t// The context to check next.\n\t\t\t\t| {\n\t\t\t\t\t\ttype: 'check';\n\t\t\t\t\t\tnode: TSESTree.Expression;\n\t\t\t\t\t\tpathNodes?: TSESTree.MemberExpression[];\n\t\t\t\t  };\n\t\t} = {\n\t\t\tUpdateExpression:\n\t\t\t\t// e.g. foo ++, foo --\n\t\t\t\t({ parent }) => ({ type: 'reassign', node: parent }),\n\t\t\tUnaryExpression: ({ parent }: CheckContext<TSESTree.UnaryExpression>) => {\n\t\t\t\tif (parent.operator === 'delete') {\n\t\t\t\t\t// e.g. delete foo.prop\n\t\t\t\t\treturn { type: 'reassign', node: parent };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tAssignmentExpression: ({ node, parent }: CheckContext<TSESTree.AssignmentExpression>) => {\n\t\t\t\tif (parent.left === node) {\n\t\t\t\t\t// e.g. foo = 42, foo += 42, foo -= 42\n\t\t\t\t\treturn { type: 'reassign', node: parent };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tForInStatement: ({ node, parent }: CheckContext<TSESTree.ForInStatement>) => {\n\t\t\t\tif (parent.left === node) {\n\t\t\t\t\t// e.g. for (foo in itr)\n\t\t\t\t\treturn { type: 'reassign', node: parent };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tForOfStatement: ({ node, parent }: CheckContext<TSESTree.ForOfStatement>) => {\n\t\t\t\tif (parent.left === node) {\n\t\t\t\t\t// e.g. for (foo of itr)\n\t\t\t\t\treturn { type: 'reassign', node: parent };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tCallExpression: ({ node, parent, pathNodes }: CheckContext<TSESTree.CallExpression>) => {\n\t\t\t\tif (pathNodes.length > 0 && parent.callee === node) {\n\t\t\t\t\tconst mem = pathNodes[pathNodes.length - 1];\n\t\t\t\t\tconst callName = getPropertyName(mem);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcallName &&\n\t\t\t\t\t\t/^(?:push|pop|shift|unshift|reverse|splice|sort|copyWithin|fill)$/u.test(callName)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// e.g. foo.push()\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'reassign',\n\t\t\t\t\t\t\tnode: parent,\n\t\t\t\t\t\t\tpathNodes: pathNodes.slice(0, -1)\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tMemberExpression: ({ node, parent, pathNodes }: CheckContext<TSESTree.MemberExpression>) => {\n\t\t\t\tif (parent.object === node) {\n\t\t\t\t\t// The context to check next.\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'check',\n\t\t\t\t\t\tnode: parent,\n\t\t\t\t\t\tpathNodes: [...pathNodes, parent]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tChainExpression: ({ parent }: CheckContext<TSESTree.ChainExpression>) => {\n\t\t\t\t// e.g. `foo?.prop`\n\t\t\t\t// The context to check next.\n\t\t\t\treturn { type: 'check', node: parent };\n\t\t\t},\n\t\t\tConditionalExpression: ({ node, parent }: CheckContext<TSESTree.ConditionalExpression>) => {\n\t\t\t\tif (parent.test === node) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t// The context to check next for `(test ? foo : bar).prop`.\n\t\t\t\treturn { type: 'check', node: parent };\n\t\t\t},\n\t\t\tProperty: ({ node, parent }: CheckContext<TSESTree.Property>) => {\n\t\t\t\tif (parent.value === node && parent.parent && parent.parent.type === 'ObjectPattern') {\n\t\t\t\t\t// The context to check next for `({a: foo} = obj)`.\n\t\t\t\t\treturn { type: 'check', node: parent.parent };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tArrayPattern: ({ node, parent }: CheckContext<TSESTree.ArrayPattern>) => {\n\t\t\t\tif (parent.elements.includes(node as TSESTree.DestructuringPattern)) {\n\t\t\t\t\t// The context to check next for `([foo] = obj)`.\n\t\t\t\t\treturn { type: 'check', node: parent };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tRestElement: ({ node, parent }: CheckContext<TSESTree.RestElement>) => {\n\t\t\t\tif (parent.argument === node && parent.parent) {\n\t\t\t\t\t// The context to check next for `({...foo} = obj)`.\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'check',\n\t\t\t\t\t\tnode: parent.parent as TSESTree.ArrayPattern | TSESTree.ObjectPattern\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tSvelteDirective: ({ node, parent }: CheckContext<AST.SvelteDirective>) => {\n\t\t\t\tif (parent.kind !== 'Binding') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (parent.shorthand || parent.expression === node) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'reassign',\n\t\t\t\t\t\tnode: parent\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Returns the reassign information for the given expression node if it has a reassign.\n\t\t */\n\t\tfunction getReassignData(expr: TSESTree.Expression) {\n\t\t\tlet pathNodes: TSESTree.MemberExpression[] = [];\n\t\t\tlet node: TSESTree.Expression = expr;\n\t\t\tlet parent;\n\t\t\twhile ((parent = node.parent)) {\n\t\t\t\tconst check = CHECK_REASSIGN[parent.type];\n\t\t\t\tif (!check) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst result = check({ node, parent, pathNodes });\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tpathNodes = result.pathNodes || pathNodes;\n\t\t\t\tif (result.type === 'reassign') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: result.node,\n\t\t\t\t\t\tpathNodes\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tnode = result.node;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteReactiveStatement(node: AST.SvelteReactiveStatement) {\n\t\t\t\tif (\n\t\t\t\t\tnode.body.type !== 'ExpressionStatement' ||\n\t\t\t\t\tnode.body.expression.type !== 'AssignmentExpression' ||\n\t\t\t\t\tnode.body.expression.operator !== '='\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst assignment = node.body.expression;\n\t\t\t\tfor (const variable of toplevelScope.variables) {\n\t\t\t\t\tif (!variable.defs.some((def) => def.node === assignment)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const reference of variable.references) {\n\t\t\t\t\t\tconst id = reference.identifier;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(assignment.left.range[0] <= id.range[0] &&\n\t\t\t\t\t\t\t\tid.range[1] <= assignment.left.range[1]) ||\n\t\t\t\t\t\t\tid.type === 'JSXIdentifier'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst reassign = getReassignData(id);\n\t\t\t\t\t\tif (!reassign) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Suppresses reporting if the props option is set to `false` and reassigned to properties.\n\t\t\t\t\t\tif (!props && reassign.pathNodes.length > 0) continue;\n\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: reassign.node,\n\t\t\t\t\t\t\tmessageId:\n\t\t\t\t\t\t\t\treassign.pathNodes.length === 0\n\t\t\t\t\t\t\t\t\t? 'assignmentToReactiveValue'\n\t\t\t\t\t\t\t\t\t: 'assignmentToReactiveValueProp',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tname: id.name\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-restricted-html-elements.ts",
    "content": "import { createRule } from '../utils/index.js';\n\nexport default createRule('no-restricted-html-elements', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow specific HTML elements',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tschema: {\n\t\t\ttype: 'array',\n\t\t\titems: {\n\t\t\t\toneOf: [\n\t\t\t\t\t{ type: 'string' },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\telements: {\n\t\t\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: ['string']\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tuniqueItems: true,\n\t\t\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage: { type: 'string', minLength: 1 }\n\t\t\t\t\t\t},\n\t\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tuniqueItems: true,\n\t\t\tminItems: 1\n\t\t},\n\t\tmessages: {},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteElement(node) {\n\t\t\t\tif (node.kind !== 'html') return;\n\t\t\t\tconst { name } = node;\n\t\t\t\tif (name.type !== 'SvelteName') return;\n\t\t\t\tfor (const option of context.options) {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\toption.message || `Unexpected use of forbidden HTML element ${name.name}.`;\n\t\t\t\t\tconst elements = option.elements || [option];\n\t\t\t\t\tfor (const element of elements) {\n\t\t\t\t\t\tif (element === name.name) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\tnode: node.startTag\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-shorthand-style-property-overrides.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport type { SvelteStyleInterpolation, SvelteStyleRoot } from '../utils/css-utils/index.js';\nimport {\n\tgetVendorPrefix,\n\tstripVendorPrefix,\n\tparseStyleAttributeValue,\n\tSHORTHAND_PROPERTIES\n} from '../utils/css-utils/index.js';\n\nexport default createRule('no-shorthand-style-property-overrides', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow shorthand style properties that override related longhand properties',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: \"Unexpected shorthand '{{shorthand}}' after '{{original}}'.\"\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\ttype StyleDecl = {\n\t\t\tprop: string;\n\t\t\tloc: AST.SourceLocation;\n\t\t};\n\t\ttype StyleDeclSet = {\n\t\t\tdecls: StyleDecl[];\n\t\t};\n\n\t\treturn {\n\t\t\tSvelteStartTag(node: AST.SvelteStartTag) {\n\t\t\t\tconst beforeDeclarations = new Set<string>();\n\t\t\t\tfor (const { decls } of iterateStyleDeclSetFromAttrs(node.attributes)) {\n\t\t\t\t\tfor (const decl of decls) {\n\t\t\t\t\t\tconst normalized = stripVendorPrefix(decl.prop);\n\t\t\t\t\t\tconst prefix = getVendorPrefix(decl.prop);\n\n\t\t\t\t\t\tconst longhandProps = SHORTHAND_PROPERTIES.get(normalized);\n\t\t\t\t\t\tif (!longhandProps) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const longhandProp of longhandProps) {\n\t\t\t\t\t\t\tconst longhandPropWithPrefix = prefix + longhandProp;\n\t\t\t\t\t\t\tif (!beforeDeclarations.has(longhandPropWithPrefix)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\tloc: decl.loc,\n\t\t\t\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tshorthand: decl.prop,\n\t\t\t\t\t\t\t\t\toriginal: longhandPropWithPrefix\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const decl of decls) {\n\t\t\t\t\t\tbeforeDeclarations.add(decl.prop);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/** Iterate the style decl set from attrs */\n\t\tfunction* iterateStyleDeclSetFromAttrs(\n\t\t\tattrs: AST.SvelteStartTag['attributes']\n\t\t): Iterable<StyleDeclSet> {\n\t\t\tfor (const attr of attrs) {\n\t\t\t\tif (attr.type === 'SvelteStyleDirective') {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tdecls: [{ prop: attr.key.name.name, loc: attr.key.name.loc }]\n\t\t\t\t\t};\n\t\t\t\t} else if (attr.type === 'SvelteAttribute') {\n\t\t\t\t\tif (attr.key.name !== 'style') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst root = parseStyleAttributeValue(attr, context);\n\t\t\t\t\tif (!root) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tyield* iterateStyleDeclSetFromStyleRoot(root);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Iterate the style decl set from style root */\n\t\tfunction* iterateStyleDeclSetFromStyleRoot<E extends SvelteStyleInterpolation>(\n\t\t\troot: SvelteStyleRoot<E>\n\t\t): Iterable<StyleDeclSet> {\n\t\t\tfor (const child of root.nodes) {\n\t\t\t\tif (child.type === 'decl') {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tdecls: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tprop: child.prop.name,\n\t\t\t\t\t\t\t\tget loc() {\n\t\t\t\t\t\t\t\t\treturn child.prop.loc;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t};\n\t\t\t\t} else if (child.type === 'inline') {\n\t\t\t\t\tconst decls: StyleDecl[] = [];\n\t\t\t\t\tfor (const root of child.getAllInlineStyles().values()) {\n\t\t\t\t\t\tfor (const set of iterateStyleDeclSetFromStyleRoot(root)) {\n\t\t\t\t\t\t\tdecls.push(...set.decls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tyield { decls };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-spaces-around-equal-signs-in-attribute.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport type { AST } from 'svelte-eslint-parser';\n\nexport default createRule('no-spaces-around-equal-signs-in-attribute', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow spaces around equal signs in attribute',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tschema: [],\n\t\tfixable: 'whitespace',\n\t\tmessages: {\n\t\t\tnoSpaces: 'Unexpected spaces found around equal signs.'\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(ctx) {\n\t\tconst source = ctx.sourceCode;\n\n\t\t/**\n\t\t * Returns source text between attribute key and value, and range of that source\n\t\t */\n\t\tfunction getAttrEq(\n\t\t\tnode:\n\t\t\t\t| AST.SvelteAttribute\n\t\t\t\t| AST.SvelteDirective\n\t\t\t\t| AST.SvelteStyleDirective\n\t\t\t\t| AST.SvelteSpecialDirective\n\t\t): [string, AST.Range] {\n\t\t\tconst keyRange = node.key.range;\n\t\t\tconst eqSource = /^[\\s=]*/u.exec(source.text.slice(keyRange[1], node.range[1]))![0];\n\t\t\tconst valueStart = keyRange[1] + eqSource.length;\n\t\t\treturn [eqSource, [keyRange[1], valueStart]];\n\t\t}\n\n\t\t/**\n\t\t * Returns true if string contains whitespace characters\n\t\t */\n\t\tfunction containsWhitespace(string: string): boolean {\n\t\t\treturn /\\s/u.test(string);\n\t\t}\n\n\t\treturn {\n\t\t\t'SvelteAttribute, SvelteDirective, SvelteStyleDirective, SvelteSpecialDirective'(\n\t\t\t\tnode:\n\t\t\t\t\t| AST.SvelteAttribute\n\t\t\t\t\t| AST.SvelteDirective\n\t\t\t\t\t| AST.SvelteStyleDirective\n\t\t\t\t\t| AST.SvelteSpecialDirective\n\t\t\t) {\n\t\t\t\tconst [eqSource, range] = getAttrEq(node);\n\n\t\t\t\tif (!containsWhitespace(eqSource)) return;\n\n\t\t\t\tconst loc = {\n\t\t\t\t\tstart: source.getLocFromIndex(range[0]),\n\t\t\t\t\tend: source.getLocFromIndex(range[1])\n\t\t\t\t};\n\n\t\t\t\tctx.report({\n\t\t\t\t\tloc,\n\t\t\t\t\tmessageId: 'noSpaces',\n\t\t\t\t\t*fix(fixer) {\n\t\t\t\t\t\tyield fixer.replaceTextRange(range, '=');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-store-async.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { extractStoreReferences } from './reference-helpers/svelte-store.js';\n\nexport default createRule('no-store-async', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true,\n\t\t\tdefault: 'error'\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Do not pass async functions to svelte stores.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tfor (const { node } of extractStoreReferences(context)) {\n\t\t\t\t\tconst [, fn] = node.arguments;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!fn ||\n\t\t\t\t\t\t(fn.type !== 'ArrowFunctionExpression' && fn.type !== 'FunctionExpression') ||\n\t\t\t\t\t\t!fn.async\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst start = fn.loc.start;\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: fn,\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tline: start.line,\n\t\t\t\t\t\t\t\tcolumn: start.column + 5\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessageId: 'unexpected'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport type { TSESTree } from '@typescript-eslint/types';\n\nexport default createRule('no-svelte-internal', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'svelte/internal will be removed in Svelte 6.',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Using svelte/internal is prohibited. This will be removed in Svelte 6.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tfunction report(node: TSESTree.Node) {\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'unexpected'\n\t\t\t});\n\t\t}\n\n\t\tfunction isSvelteInternal(value: string) {\n\t\t\treturn value === 'svelte/internal' || value.startsWith('svelte/internal/');\n\t\t}\n\n\t\treturn {\n\t\t\tImportDeclaration(node) {\n\t\t\t\tif (node.source && isSvelteInternal(node.source.value)) {\n\t\t\t\t\treport(node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tImportExpression(node) {\n\t\t\t\tif (\n\t\t\t\t\tnode.source &&\n\t\t\t\t\tnode.source.type === 'Literal' &&\n\t\t\t\t\ttypeof node.source.value === 'string' &&\n\t\t\t\t\tisSvelteInternal(node.source.value)\n\t\t\t\t) {\n\t\t\t\t\treport(node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tExportNamedDeclaration(node) {\n\t\t\t\tif (node.source && isSvelteInternal(node.source.value)) {\n\t\t\t\t\treport(node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tExportAllDeclaration(node) {\n\t\t\t\tif (node.source && isSvelteInternal(node.source.value)) {\n\t\t\t\t\treport(node);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-target-blank.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport {\n\tfindAttribute,\n\tfindBindDirective,\n\tfindShorthandAttribute,\n\tgetStaticAttributeValue\n} from '../utils/ast-utils.js';\n\n/** Checks wether the given attr node is target=\"_blank\"  */\nfunction isTargetBlank(node: AST.SvelteAttribute) {\n\treturn node.key.name === 'target' && getStaticAttributeValue(node) === '_blank';\n}\n\n/** Checks wether the given element node has secure rel=\"...\" */\nfunction hasSecureRel(node: AST.SvelteAttribute['parent'], allowReferrer: boolean) {\n\tconst attr = findAttribute(node, 'rel');\n\tif (attr) {\n\t\tconst tags = [];\n\t\tfor (const value of attr.value) {\n\t\t\tif (value.type === 'SvelteLiteral') {\n\t\t\t\ttags.push(...value.value.toLowerCase().split(' '));\n\t\t\t}\n\t\t}\n\t\treturn tags && tags.includes('noopener') && (allowReferrer || tags.includes('noreferrer'));\n\t}\n\treturn false;\n}\n\n/** Checks wether the given element node has external link */\nfunction hasExternalLink(node: AST.SvelteAttribute['parent']) {\n\treturn node.attributes.some(\n\t\t(attr) =>\n\t\t\tattr.type === 'SvelteAttribute' &&\n\t\t\tattr.key.name === 'href' &&\n\t\t\tattr.value.length >= 1 &&\n\t\t\tattr.value[0].type === 'SvelteLiteral' &&\n\t\t\t/^(?:\\w+:|\\/\\/)/.test(attr.value[0].value)\n\t);\n}\n\n/** Checks wether the given element node has dynamic link */\nfunction hasDynamicLink(node: AST.SvelteAttribute['parent']) {\n\tconst attr = findAttribute(node, 'href');\n\tif (attr) {\n\t\treturn attr.value.some((v) => v.type === 'SvelteMustacheTag');\n\t}\n\treturn Boolean(findShorthandAttribute(node, 'href')) || Boolean(findBindDirective(node, 'href'));\n}\n\nexport default createRule('no-target-blank', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow `target=\"_blank\"` attribute without `rel=\"noopener noreferrer\"`',\n\t\t\tcategory: 'Security Vulnerability',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tallowReferrer: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tenforceDynamicLinks: {\n\t\t\t\t\t\tenum: ['always', 'never']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tdisallow: 'Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst configuration: {\n\t\t\tallowReferrer?: boolean;\n\t\t\tenforceDynamicLinks?: 'always' | 'never';\n\t\t} = context.options[0] || {};\n\t\tconst allowReferrer = Boolean(configuration.allowReferrer) || false;\n\t\tconst enforceDynamicLinks: 'always' | 'never' = configuration.enforceDynamicLinks || 'always';\n\n\t\treturn {\n\t\t\tSvelteAttribute(node) {\n\t\t\t\tif (!isTargetBlank(node) || hasSecureRel(node.parent, allowReferrer)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hasDangerHref =\n\t\t\t\t\thasExternalLink(node.parent) ||\n\t\t\t\t\t(enforceDynamicLinks === 'always' && hasDynamicLink(node.parent));\n\n\t\t\t\tif (hasDangerHref) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: 'Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-top-level-browser-globals.ts",
    "content": "import type { TrackedReferences } from '@eslint-community/eslint-utils';\nimport { ReferenceTracker, getStaticValue } from '@eslint-community/eslint-utils';\nimport { createRule } from '../utils/index.js';\nimport globals from 'globals';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { findVariable, getScope } from '../utils/ast-utils.js';\nimport type { AST } from 'svelte-eslint-parser';\n\nexport default createRule('no-top-level-browser-globals', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow using top-level browser global variables',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpectedGlobal: 'Unexpected top-level browser global variable \"{{name}}\".'\n\t\t},\n\t\ttype: 'problem',\n\t\tconditions: [{ svelteFileTypes: ['.svelte', '.svelte.[js|ts]'] }]\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst blowerGlobals = getBrowserGlobals();\n\n\t\tconst referenceTracker = new ReferenceTracker(sourceCode.scopeManager.globalScope!, {\n\t\t\t// Specifies the global variables that are allowed to prevent `window.window` from being iterated over.\n\t\t\tglobalObjectNames: ['globalThis']\n\t\t});\n\n\t\ttype MaybeGuard = {\n\t\t\treference?: { node: TSESTree.Node; name: string };\n\t\t\tisAvailableLocation: (node: TSESTree.Node) => boolean;\n\t\t\t// The guard that checks whether the browser environment is set to true.\n\t\t\tbrowserEnvironment: boolean;\n\t\t};\n\t\tconst maybeGuards: MaybeGuard[] = [];\n\n\t\tconst functions: (TSESTree.FunctionLike | AST.SvelteSnippetBlock)[] = [];\n\t\tconst typeAnnotations: (\n\t\t\t| TSESTree.TypeNode\n\t\t\t| TSESTree.TSTypeAnnotation\n\t\t\t| TSESTree.TSTypeParameterInstantiation\n\t\t)[] = [];\n\n\t\tfunction enterFunction(node: TSESTree.FunctionLike | AST.SvelteSnippetBlock) {\n\t\t\tif (isTopLevelLocation(node)) {\n\t\t\t\tfunctions.push(node);\n\t\t\t}\n\t\t}\n\n\t\tfunction enterTypeAnnotation(node: TSESTree.TypeNode | TSESTree.TSTypeParameterInstantiation) {\n\t\t\tif (!isInTypeAnnotation(node)) {\n\t\t\t\ttypeAnnotations.push(node);\n\t\t\t}\n\t\t}\n\n\t\tfunction enterMetaProperty(node: TSESTree.MetaProperty) {\n\t\t\tif (node.meta.name !== 'import' || node.property.name !== 'meta') return;\n\t\t\tfor (const ref of referenceTracker.iteratePropertyReferences(node, {\n\t\t\t\tenv: {\n\t\t\t\t\t// See https://vite.dev/guide/ssr#conditional-logic\n\t\t\t\t\tSSR: {\n\t\t\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})) {\n\t\t\t\tif (ref.node.type === 'Identifier' || ref.node.type === 'MemberExpression') {\n\t\t\t\t\tconst guardChecker = getGuardChecker({ node: ref.node, not: true });\n\t\t\t\t\tif (guardChecker) {\n\t\t\t\t\t\tmaybeGuards.push({\n\t\t\t\t\t\t\tisAvailableLocation: guardChecker,\n\t\t\t\t\t\t\tbrowserEnvironment: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction verifyGlobalReferences() {\n\t\t\t// Collects guarded location checkers by checking module references\n\t\t\t// that can check the browser environment.\n\t\t\tfor (const referenceNode of iterateBrowserCheckerModuleReferences()) {\n\t\t\t\tif (!isTopLevelLocation(referenceNode)) continue;\n\t\t\t\tconst guardChecker = getGuardChecker({ node: referenceNode });\n\t\t\t\tif (guardChecker) {\n\t\t\t\t\tmaybeGuards.push({\n\t\t\t\t\t\tisAvailableLocation: guardChecker,\n\t\t\t\t\t\tbrowserEnvironment: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst reportCandidates: TrackedReferences<unknown>[] = [];\n\n\t\t\t// Collects references to global variables.\n\t\t\tfor (const ref of iterateBrowserGlobalReferences()) {\n\t\t\t\tif (!isTopLevelLocation(ref.node) || isInTypeAnnotation(ref.node)) continue;\n\t\t\t\tconst guardChecker = getGuardCheckerFromReference(ref.node);\n\t\t\t\tif (guardChecker) {\n\t\t\t\t\tconst name = ref.path.join('.');\n\t\t\t\t\tmaybeGuards.push({\n\t\t\t\t\t\treference: { node: ref.node, name },\n\t\t\t\t\t\tisAvailableLocation: guardChecker,\n\t\t\t\t\t\tbrowserEnvironment: name === 'window' || name === 'document'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treportCandidates.push(ref);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const ref of reportCandidates) {\n\t\t\t\tconst name = ref.path.join('.');\n\t\t\t\tif (isAvailableLocation({ node: ref.node, name })) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: ref.node,\n\t\t\t\t\tmessageId: 'unexpectedGlobal',\n\t\t\t\t\tdata: { name }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t':function': enterFunction,\n\t\t\tSvelteSnippetBlock: enterFunction,\n\t\t\t'*.typeAnnotation': enterTypeAnnotation,\n\t\t\t'*.typeArguments': enterTypeAnnotation,\n\t\t\tMetaProperty: enterMetaProperty,\n\t\t\t'Program:exit': verifyGlobalReferences\n\t\t};\n\n\t\t/**\n\t\t * Checks whether the node is in a location where the expression is available or not.\n\t\t * @returns `true` if the expression is available.\n\t\t */\n\t\tfunction isAvailableLocation(ref: { node: TSESTree.Node; name: string }) {\n\t\t\tfor (const guard of maybeGuards.reverse()) {\n\t\t\t\tif (guard.isAvailableLocation(ref.node)) {\n\t\t\t\t\tif (guard.browserEnvironment || guard.reference?.name === ref.name) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the node is in a top-level location.\n\t\t * @returns `true` if the node is in a top-level location.\n\t\t */\n\t\tfunction isTopLevelLocation(node: TSESTree.Node | AST.SvelteSnippetBlock) {\n\t\t\tfor (const func of functions) {\n\t\t\t\tif (func.range[0] <= node.range[0] && node.range[1] <= func.range[1]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the node is in type annotation.\n\t\t * @returns `true` if the node is in type annotation.\n\t\t */\n\t\tfunction isInTypeAnnotation(node: TSESTree.Node) {\n\t\t\tfor (const typeAnnotation of typeAnnotations) {\n\t\t\t\tif (typeAnnotation.range[0] <= node.range[0] && node.range[1] <= typeAnnotation.range[1]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Iterate over the references of modules that can check the browser environment.\n\t\t */\n\t\tfunction* iterateBrowserCheckerModuleReferences(): Iterable<TSESTree.Expression> {\n\t\t\tfor (const ref of referenceTracker.iterateEsmReferences({\n\t\t\t\t'esm-env': {\n\t\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t\t// See https://www.npmjs.com/package/esm-env\n\t\t\t\t\tBROWSER: {\n\t\t\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'$app/environment': {\n\t\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t\t// See https://svelte.dev/docs/kit/$app-environment#browser\n\t\t\t\t\tbrowser: {\n\t\t\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})) {\n\t\t\t\tif (ref.node.type === 'Identifier' || ref.node.type === 'MemberExpression') {\n\t\t\t\t\tyield ref.node;\n\t\t\t\t} else if (ref.node.type === 'ImportSpecifier') {\n\t\t\t\t\tconst variable = findVariable(context, ref.node.local);\n\t\t\t\t\tif (variable) {\n\t\t\t\t\t\tfor (const reference of variable.references) {\n\t\t\t\t\t\t\tif (reference.isRead() && reference.identifier.type === 'Identifier') {\n\t\t\t\t\t\t\t\tyield reference.identifier;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Iterate over the used references of global variables.\n\t\t */\n\t\tfunction* iterateBrowserGlobalReferences(): Iterable<TrackedReferences<unknown>> {\n\t\t\tyield* referenceTracker.iterateGlobalReferences(\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tblowerGlobals.map((name) => [\n\t\t\t\t\t\tname,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[ReferenceTracker.READ]: true\n\t\t\t\t\t\t}\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * If the node is a reference used in a guard clause that checks if the node is in a browser environment,\n\t\t * it returns information about the expression that checks if the browser variable is available.\n\t\t * @returns The guard info.\n\t\t */\n\t\tfunction getGuardCheckerFromReference(\n\t\t\tnode: TSESTree.Node\n\t\t): ((node: TSESTree.Node) => boolean) | null {\n\t\t\tconst parent = node.parent;\n\t\t\tif (!parent) return null;\n\t\t\tif (parent.type === 'BinaryExpression') {\n\t\t\t\tif (\n\t\t\t\t\tparent.operator === 'instanceof' &&\n\t\t\t\t\tparent.left === node &&\n\t\t\t\t\tnode.type === 'MemberExpression'\n\t\t\t\t) {\n\t\t\t\t\t// e.g. if (globalThis.window instanceof X)\n\t\t\t\t\treturn getGuardChecker({ node: parent });\n\t\t\t\t}\n\t\t\t\tconst operand =\n\t\t\t\t\tparent.left === node ? parent.right : parent.right === node ? parent.left : null;\n\t\t\t\tif (!operand) return null;\n\n\t\t\t\tconst staticValue = getStaticValue(operand, getScope(context, operand));\n\t\t\t\tif (!staticValue) return null;\n\n\t\t\t\tif (staticValue.value === undefined && node.type === 'MemberExpression') {\n\t\t\t\t\tif (parent.operator === '!==' || parent.operator === '!=') {\n\t\t\t\t\t\t// e.g. if (globalThis.window !== undefined), if (globalThis.window != undefined)\n\t\t\t\t\t\treturn getGuardChecker({ node: parent });\n\t\t\t\t\t} else if (parent.operator === '===' || parent.operator === '==') {\n\t\t\t\t\t\t// e.g. if (globalThis.window === undefined), if (globalThis.window == undefined)\n\t\t\t\t\t\treturn getGuardChecker({ node: parent, not: true });\n\t\t\t\t\t}\n\t\t\t\t} else if (staticValue.value === null && node.type === 'MemberExpression') {\n\t\t\t\t\tif (parent.operator === '!=') {\n\t\t\t\t\t\t// e.g. if (globalThis.window != null)\n\t\t\t\t\t\treturn getGuardChecker({ node: parent });\n\t\t\t\t\t} else if (parent.operator === '==') {\n\t\t\t\t\t\t// e.g. if (globalThis.window == null)\n\t\t\t\t\t\treturn getGuardChecker({ node: parent, not: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tparent.type === 'UnaryExpression' &&\n\t\t\t\tparent.operator === 'typeof' &&\n\t\t\t\tparent.argument === node\n\t\t\t) {\n\t\t\t\tconst pp = parent.parent;\n\t\t\t\tif (!pp || pp.type !== 'BinaryExpression') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst staticValue = getStaticValue(\n\t\t\t\t\tpp.left === parent ? pp.right : pp.left,\n\t\t\t\t\tgetScope(context, node)\n\t\t\t\t);\n\t\t\t\tif (!staticValue) return null;\n\n\t\t\t\tif (staticValue.value !== 'undefined' && staticValue.value !== 'object') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (pp.operator === '!==' || pp.operator === '!=') {\n\t\t\t\t\tif (staticValue.value === 'undefined') {\n\t\t\t\t\t\t// e.g. if (typeof window !== \"undefined\"), if (typeof window != \"undefined\")\n\t\t\t\t\t\treturn getGuardChecker({ node: pp });\n\t\t\t\t\t}\n\t\t\t\t\t// e.g. if (typeof window !== \"object\"), if (typeof window != \"object\")\n\t\t\t\t\treturn getGuardChecker({ node: pp, not: true });\n\t\t\t\t} else if (pp.operator === '===' || pp.operator === '==') {\n\t\t\t\t\tif (staticValue.value === 'undefined') {\n\t\t\t\t\t\t// e.g. if (typeof window === \"undefined\"), if (typeof window == \"undefined\")\n\t\t\t\t\t\treturn getGuardChecker({ node: pp, not: true });\n\t\t\t\t\t}\n\t\t\t\t\t// e.g. if (typeof window === \"object\"), if (typeof window == \"object\")\n\t\t\t\t\treturn getGuardChecker({ node: pp });\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (node.type === 'MemberExpression') {\n\t\t\t\tif (\n\t\t\t\t\t((parent.type === 'CallExpression' && parent.callee === node) ||\n\t\t\t\t\t\t(parent.type === 'MemberExpression' && parent.object === node)) &&\n\t\t\t\t\tparent.optional\n\t\t\t\t) {\n\t\t\t\t\t// e.g. globalThis.location?.href\n\t\t\t\t\treturn (n) => n === node;\n\t\t\t\t}\n\t\t\t\t// e.g. if (globalThis.window)\n\t\t\t\treturn getGuardChecker({ node });\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t/**\n\t\t * If the node is a guard clause checking,\n\t\t * returns a function to check if the node is available.\n\t\t */\n\t\tfunction getGuardChecker(guardInfo: {\n\t\t\tnode: TSESTree.Expression;\n\t\t\tnot?: boolean;\n\t\t}): ((node: TSESTree.Node) => boolean) | null {\n\t\t\tconst parent = guardInfo.node.parent as TSESTree.Node | AST.SvelteNode;\n\t\t\tif (!parent) return null;\n\n\t\t\tif (parent.type === 'ConditionalExpression') {\n\t\t\t\tconst block = guardInfo.not ? parent.alternate : parent.consequent;\n\t\t\t\treturn (n) => block.range[0] <= n.range[0] && n.range[1] <= block.range[1];\n\t\t\t}\n\t\t\tif (parent.type === 'UnaryExpression' && parent.operator === '!') {\n\t\t\t\treturn getGuardChecker({ not: !guardInfo.not, node: parent });\n\t\t\t}\n\t\t\tif (parent.type === 'SvelteIfBlock' && parent.expression === guardInfo.node) {\n\t\t\t\tif (!guardInfo.not) {\n\t\t\t\t\tif (parent.children.length === 0) {\n\t\t\t\t\t\treturn null; // No block to check\n\t\t\t\t\t}\n\t\t\t\t\tconst first = parent.children[0];\n\t\t\t\t\tconst last = parent.children.at(-1)!;\n\t\t\t\t\treturn (n) => first.range[0] <= n.range[0] && n.range[1] <= last.range[1];\n\t\t\t\t}\n\t\t\t\t// not\n\t\t\t\tif (parent.else) {\n\t\t\t\t\tconst block = parent.else;\n\t\t\t\t\treturn (n) => block.range[0] <= n.range[0] && n.range[1] <= block.range[1];\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (parent.type === 'IfStatement' && parent.test === guardInfo.node) {\n\t\t\t\tif (!guardInfo.not) {\n\t\t\t\t\tconst block = parent.consequent;\n\t\t\t\t\treturn (n) => block.range[0] <= n.range[0] && n.range[1] <= block.range[1];\n\t\t\t\t}\n\t\t\t\tif (parent.alternate) {\n\t\t\t\t\tconst block = parent.alternate;\n\t\t\t\t\treturn (n) => block.range[0] <= n.range[0] && n.range[1] <= block.range[1];\n\t\t\t\t}\n\t\t\t\tif (!hasJumpStatementInAllPath(parent.consequent)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst pp = parent.parent;\n\t\t\t\tif (!pp || (pp.type !== 'BlockStatement' && pp.type !== 'Program')) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst start = parent.range[1];\n\t\t\t\tconst end = pp.range[1];\n\n\t\t\t\treturn (n) => start <= n.range[0] && n.range[1] <= end;\n\t\t\t}\n\t\t\tif (parent.type === 'LogicalExpression') {\n\t\t\t\tif (!guardInfo.not && parent.operator === '&&') {\n\t\t\t\t\tconst parentChecker = getGuardChecker({ not: guardInfo.not, node: parent });\n\t\t\t\t\tif (parent.left === guardInfo.node) {\n\t\t\t\t\t\tconst block = parent.right;\n\t\t\t\t\t\treturn (n) => {\n\t\t\t\t\t\t\tif (parentChecker?.(n)) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn block.range[0] <= n.range[0] && n.range[1] <= block.range[1];\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn parentChecker;\n\t\t\t\t}\n\t\t\t\tif (guardInfo.not && parent.operator === '||') {\n\t\t\t\t\treturn getGuardChecker({ not: guardInfo.not, node: parent });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n});\n\n/**\n * Get the list of browser-specific globals.\n */\nfunction getBrowserGlobals() {\n\tconst nodeGlobals = new Set(Object.keys(globals.node));\n\treturn [\n\t\t'window',\n\t\t'document',\n\t\t...Object.keys(globals.browser).filter((name) => !nodeGlobals.has(name))\n\t];\n}\n\n/**\n * Checks whether all paths of a given statement have jump statements.\n * @param {Statement} statement\n * @returns {boolean}\n */\nfunction hasJumpStatementInAllPath(statement: TSESTree.Statement): boolean {\n\tif (isJumpStatement(statement)) {\n\t\treturn true;\n\t}\n\tif (statement.type === 'BlockStatement') {\n\t\treturn statement.body.some(hasJumpStatementInAllPath);\n\t}\n\tif (statement.type === 'IfStatement') {\n\t\tif (!statement.alternate) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\thasJumpStatementInAllPath(statement.alternate) &&\n\t\t\thasJumpStatementInAllPath(statement.consequent)\n\t\t);\n\t}\n\treturn false;\n}\n\n/**\n * Checks whether the given statement is a jump statement.\n * @param {Statement} statement\n * @returns {statement is JumpStatement}\n */\nfunction isJumpStatement(statement: TSESTree.Statement) {\n\treturn (\n\t\tstatement.type === 'ReturnStatement' ||\n\t\tstatement.type === 'ContinueStatement' ||\n\t\tstatement.type === 'BreakStatement'\n\t);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-trailing-spaces.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('no-trailing-spaces', {\n\tmeta: {\n\t\ttype: 'layout',\n\t\tdocs: {\n\t\t\tdescription: 'disallow trailing whitespace at the end of lines',\n\t\t\tcategory: 'Extension Rules',\n\t\t\trecommended: false,\n\t\t\textensionRule: 'no-trailing-spaces',\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'whitespace',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tskipBlankLines: { type: 'boolean' },\n\t\t\t\t\tignoreComments: { type: 'boolean' }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\ttrailingSpace: 'Trailing spaces not allowed.'\n\t\t}\n\t},\n\tcreate(context) {\n\t\tconst options: { skipBlankLines?: boolean; ignoreComments?: boolean } | undefined =\n\t\t\tcontext.options[0];\n\t\tconst skipBlankLines = options?.skipBlankLines || false;\n\t\tconst ignoreComments = options?.ignoreComments || false;\n\n\t\tconst sourceCode = context.sourceCode;\n\n\t\tconst ignoreLineNumbers = new Set<number>();\n\t\tif (ignoreComments) {\n\t\t\tfor (const { type, loc } of sourceCode.getAllComments()) {\n\t\t\t\tconst endLine = type === 'Block' ? loc.end.line - 1 : loc.end.line;\n\t\t\t\tfor (let i = loc.start.line; i <= endLine; i++) {\n\t\t\t\t\tignoreLineNumbers.add(i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Reports a given location.\n\t\t */\n\t\tfunction report(loc: AST.SourceLocation) {\n\t\t\tcontext.report({\n\t\t\t\tloc,\n\t\t\t\tmessageId: 'trailingSpace',\n\t\t\t\tfix(fixer) {\n\t\t\t\t\treturn fixer.removeRange([\n\t\t\t\t\t\tsourceCode.getIndexFromLoc(loc.start),\n\t\t\t\t\t\tsourceCode.getIndexFromLoc(loc.end)\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Collects the location of the given node as the ignore line numbers.\n\t\t */\n\t\tfunction collectIgnoreLineNumbers({ loc }: { loc: AST.SourceLocation }) {\n\t\t\tconst endLine = loc.end.line - 1;\n\t\t\tfor (let i = loc.start.line; i <= endLine; i++) {\n\t\t\t\tignoreLineNumbers.add(i);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tTemplateElement: collectIgnoreLineNumbers,\n\t\t\t...(ignoreComments\n\t\t\t\t? {\n\t\t\t\t\t\tSvelteHTMLComment: collectIgnoreLineNumbers\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t'Program:exit'() {\n\t\t\t\tconst lines = sourceCode.lines;\n\t\t\t\tfor (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n\t\t\t\t\tconst line = lines[lineIndex];\n\t\t\t\t\tif (skipBlankLines && !line.trim()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst lineNumber = lineIndex + 1;\n\t\t\t\t\tif (ignoreLineNumbers.has(lineNumber)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst trimmed = line.trimEnd();\n\t\t\t\t\tif (trimmed === line) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\treport({\n\t\t\t\t\t\tstart: { line: lineNumber, column: trimmed.length },\n\t\t\t\t\t\tend: { line: lineNumber, column: line.length }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-unknown-style-directive-property.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { all as allKnownCSSProperties } from 'known-css-properties';\nimport { toRegExp } from '../utils/regexp.js';\nimport { hasVendorPrefix } from '../utils/css-utils/index.js';\n\nexport default createRule('no-unknown-style-directive-property', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow unknown `style:property`',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tignoreProperties: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tuniqueItems: true,\n\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t},\n\t\t\t\t\tignorePrefixed: { type: 'boolean' }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunknown: \"Unexpected unknown style directive property '{{property}}'.\"\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst ignoreProperties = [...(context.options[0]?.ignoreProperties ?? [])].map(toRegExp);\n\t\tconst ignorePrefixed: boolean = context.options[0]?.ignorePrefixed ?? true;\n\t\tconst knownProperties = new Set<string>(allKnownCSSProperties);\n\n\t\t/** Checks whether given name is valid */\n\t\tfunction validName(name: string) {\n\t\t\treturn (\n\t\t\t\tname.startsWith('--') ||\n\t\t\t\tknownProperties.has(name) ||\n\t\t\t\tignoreProperties.some((r) => r.test(name)) ||\n\t\t\t\t(ignorePrefixed && hasVendorPrefix(name))\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteStyleDirective(node) {\n\t\t\t\tconst prop = node.key.name;\n\n\t\t\t\tif (validName(prop.name)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: prop,\n\t\t\t\t\tmessageId: 'unknown',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tproperty: prop.name\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-unnecessary-state-wrap.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport type { TSESTree } from '@typescript-eslint/types';\n\nconst REACTIVE_CLASSES = [\n\t'SvelteSet',\n\t'SvelteMap',\n\t'SvelteURL',\n\t'SvelteURLSearchParams',\n\t'SvelteDate',\n\t'MediaQuery'\n];\n\nexport default createRule('no-unnecessary-state-wrap', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Disallow unnecessary $state wrapping of reactive classes',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tadditionalReactiveClasses: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tuniqueItems: true\n\t\t\t\t\t},\n\t\t\t\t\tallowReassign: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunnecessaryStateWrap: '{{className}} is already reactive, $state wrapping is unnecessary.',\n\t\t\tsuggestRemoveStateWrap: 'Remove unnecessary $state wrapping'\n\t\t},\n\t\ttype: 'suggestion',\n\t\thasSuggestions: true,\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [true, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst options = context.options[0] ?? {};\n\t\tconst additionalReactiveClasses = options.additionalReactiveClasses ?? [];\n\t\tconst allowReassign = options.allowReassign ?? false;\n\t\tconst { globalScope } = context.sourceCode.scopeManager;\n\t\tif (globalScope == null) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst referenceTracker = new ReferenceTracker(globalScope);\n\t\tconst traceMap: Record<string, Record<string, boolean>> = {};\n\t\tfor (const reactiveClass of REACTIVE_CLASSES) {\n\t\t\ttraceMap[reactiveClass] = {\n\t\t\t\t[ReferenceTracker.CALL]: true,\n\t\t\t\t[ReferenceTracker.CONSTRUCT]: true\n\t\t\t};\n\t\t}\n\n\t\t// Track all reactive class imports and their aliases\n\t\tconst references = referenceTracker.iterateEsmReferences({\n\t\t\t'svelte/reactivity': {\n\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t...traceMap\n\t\t\t}\n\t\t});\n\n\t\tconst referenceNodeAndNames = Array.from(references).map(({ node, path }) => {\n\t\t\treturn {\n\t\t\t\tnode,\n\t\t\t\tname: path[path.length - 1]\n\t\t\t};\n\t\t});\n\n\t\tfunction isReassigned(identifier: TSESTree.Identifier): boolean {\n\t\t\tconst references = context.sourceCode.scopeManager\n\t\t\t\t.getDeclaredVariables(identifier.parent)\n\t\t\t\t.flatMap((v) => v.references);\n\t\t\treturn references.some((ref) => {\n\t\t\t\treturn ref.isWrite() && ref.identifier !== identifier;\n\t\t\t});\n\t\t}\n\n\t\tfunction reportUnnecessaryStateWrap(\n\t\t\tstateNode: TSESTree.Node,\n\t\t\ttargetNode: TSESTree.Node,\n\t\t\tclassName: string,\n\t\t\tidentifier?: TSESTree.Identifier\n\t\t) {\n\t\t\tif (allowReassign && identifier && isReassigned(identifier)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.report({\n\t\t\t\tnode: targetNode,\n\t\t\t\tmessageId: 'unnecessaryStateWrap',\n\t\t\t\tdata: {\n\t\t\t\t\tclassName\n\t\t\t\t},\n\t\t\t\tsuggest: [\n\t\t\t\t\t{\n\t\t\t\t\t\tmessageId: 'suggestRemoveStateWrap',\n\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\treturn fixer.replaceText(stateNode, context.sourceCode.getText(targetNode));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tCallExpression(node: TSESTree.CallExpression) {\n\t\t\t\tif (node.callee.type !== 'Identifier' || node.callee.name !== '$state') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const arg of node.arguments) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(arg.type === 'NewExpression' || arg.type === 'CallExpression') &&\n\t\t\t\t\t\targ.callee.type === 'Identifier'\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst name = arg.callee.name;\n\t\t\t\t\t\tif (additionalReactiveClasses.includes(name)) {\n\t\t\t\t\t\t\tconst parent = node.parent;\n\t\t\t\t\t\t\tif (parent?.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n\t\t\t\t\t\t\t\treportUnnecessaryStateWrap(node, arg, name, parent.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t'Program:exit': () => {\n\t\t\t\tfor (const { node, name } of referenceNodeAndNames) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.parent?.type === 'CallExpression' &&\n\t\t\t\t\t\tnode.parent.callee.type === 'Identifier' &&\n\t\t\t\t\t\tnode.parent.callee.name === '$state'\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst parent = node.parent.parent;\n\t\t\t\t\t\tif (parent?.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n\t\t\t\t\t\t\treportUnnecessaryStateWrap(node.parent, node, name, parent.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport type { AST } from 'svelte-eslint-parser';\nimport type { AnyNode } from 'postcss';\nimport type { Node as SelectorNode } from 'postcss-selector-parser';\nimport { findClassesInAttribute } from '../utils/ast-utils.js';\nimport type { SourceCode } from '../types.js';\nimport { toRegExp } from '../utils/regexp.js';\n\nexport default createRule('no-unused-class-name', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow the use of a class in the template without a corresponding style',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tallowedClassNames: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tif (!sourceCode.parserServices.isSvelte) {\n\t\t\treturn {};\n\t\t}\n\t\tconst allowedClassNames = context.options[0]?.allowedClassNames ?? [];\n\t\tconst classesUsedInTemplate: {\n\t\t\tclassName: string;\n\t\t\tloc: AST.SourceLocation;\n\t\t}[] = [];\n\n\t\treturn {\n\t\t\tSvelteElement(node) {\n\t\t\t\tif (node.kind !== 'html') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst classes = node.startTag.attributes.flatMap(findClassesInAttribute);\n\t\t\t\tfor (const className of classes) {\n\t\t\t\t\tclassesUsedInTemplate.push({ className, loc: node.startTag.loc });\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tconst styleContext = sourceCode.parserServices.getStyleContext!();\n\t\t\t\tif (styleContext.status === 'parse-error' || styleContext.status === 'unknown-lang') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst classesUsedInStyle =\n\t\t\t\t\tstyleContext.status === 'success'\n\t\t\t\t\t\t? findClassesInPostCSSNode(styleContext.sourceAst, sourceCode.parserServices)\n\t\t\t\t\t\t: [];\n\n\t\t\t\tfor (const { className, loc } of classesUsedInTemplate) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!allowedClassNames.some((allowedClassName: string) =>\n\t\t\t\t\t\t\ttoRegExp(allowedClassName).test(className)\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\t!classesUsedInStyle.includes(className)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmessage: `Unused class \"${className}\".`\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n/**\n * Extract all class names used in a PostCSS node.\n */\nfunction findClassesInPostCSSNode(\n\tnode: AnyNode,\n\tparserServices: SourceCode['parserServices']\n): string[] {\n\tif (node.type === 'rule') {\n\t\tlet classes = node.nodes.flatMap((node) => findClassesInPostCSSNode(node, parserServices));\n\t\tclasses = classes.concat(findClassesInSelector(parserServices.getStyleSelectorAST!(node)));\n\t\treturn classes;\n\t}\n\tif ((node.type === 'root' || node.type === 'atrule') && node.nodes !== undefined) {\n\t\treturn node.nodes.flatMap((node) => findClassesInPostCSSNode(node, parserServices));\n\t}\n\treturn [];\n}\n\n/**\n * Extract all class names used in a PostCSS selector.\n */\nfunction findClassesInSelector(node: SelectorNode): string[] {\n\tif (node.type === 'class') {\n\t\treturn [node.value];\n\t}\n\tif (node.type === 'pseudo' || node.type === 'root' || node.type === 'selector') {\n\t\treturn node.nodes.flatMap(findClassesInSelector);\n\t}\n\treturn [];\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-unused-props.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { getTypeScriptTools, isAnyType } from '../utils/ts-utils/index.js';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type ts from 'typescript';\nimport { findVariable } from '../utils/ast-utils.js';\nimport { toRegExp } from '../utils/regexp.js';\nimport { normalize } from 'path';\nimport type { AST as SvAST } from 'svelte-eslint-parser';\n\ntype PropertyPathArray = string[];\ntype DeclaredPropertyNames = Set<{ originalName: string; aliasName: string }>;\n\nlet isRemovedWarningShown = false;\n\nexport default createRule('no-unused-props', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Warns about defined Props properties that are unused',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tcheckImportedTypes: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false\n\t\t\t\t\t},\n\t\t\t\t\tignoreTypePatterns: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: []\n\t\t\t\t\t},\n\t\t\t\t\tignorePropertyPatterns: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: []\n\t\t\t\t\t},\n\t\t\t\t\tallowUnusedNestedProperties: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunusedProp: \"'{{name}}' is an unused Props property.\",\n\t\t\tunusedNestedProp: \"'{{name}}' in '{{parent}}' is an unused property.\",\n\t\t\tunusedIndexSignature:\n\t\t\t\t'Index signature is unused. Consider using rest operator (...) to capture remaining properties.'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [true, 'undetermined']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst fileName = context.filename;\n\t\tconst tools = getTypeScriptTools(context);\n\t\tif (!tools) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst typeChecker = tools.service.program.getTypeChecker();\n\t\tif (!typeChecker) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst options = context.options[0] ?? {};\n\n\t\t// TODO: Remove in v4\n\t\t// MEMO: `ignorePatterns` was a property that only existed from v3.2.0 to v3.2.2.\n\t\t// From v3.3.0, it was replaced with `ignorePropertyPatterns` and `ignoreTypePatterns`.\n\t\tif (options.ignorePatterns != null && !isRemovedWarningShown) {\n\t\t\tconsole.warn(\n\t\t\t\t'eslint-plugin-svelte: The `ignorePatterns` option in the `no-unused-props` rule has been removed. Please use `ignorePropertyPatterns` or/and `ignoreTypePatterns` instead.'\n\t\t\t);\n\t\t\tisRemovedWarningShown = true;\n\t\t}\n\n\t\tconst checkImportedTypes = options.checkImportedTypes ?? false;\n\n\t\tconst ignoreTypePatterns = (options.ignoreTypePatterns ?? []).map((p: string | RegExp) => {\n\t\t\tif (typeof p === 'string') {\n\t\t\t\treturn toRegExp(p);\n\t\t\t}\n\t\t\treturn p;\n\t\t});\n\n\t\tconst ignorePropertyPatterns = (options.ignorePropertyPatterns ?? []).map(\n\t\t\t(p: string | RegExp) => {\n\t\t\t\tif (typeof p === 'string') {\n\t\t\t\t\treturn toRegExp(p);\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t}\n\t\t);\n\n\t\tfunction shouldIgnoreProperty(name: string): boolean {\n\t\t\treturn ignorePropertyPatterns.some((pattern: RegExp) => pattern.test(name));\n\t\t}\n\n\t\tfunction shouldIgnoreType(type: ts.Type): boolean {\n\t\t\tfunction isMatched(name: string): boolean {\n\t\t\t\treturn ignoreTypePatterns.some((pattern: RegExp) => pattern.test(name));\n\t\t\t}\n\n\t\t\tconst typeStr = typeChecker.typeToString(type);\n\t\t\tconst symbol = type.getSymbol();\n\t\t\tconst symbolName = symbol?.getName();\n\t\t\treturn isMatched(typeStr) || (symbolName ? isMatched(symbolName) : false);\n\t\t}\n\n\t\tfunction isInternalProperty(symbol: ts.Symbol): boolean {\n\t\t\tconst declarations = symbol.getDeclarations();\n\t\t\tif (!declarations || declarations.length === 0) return false;\n\n\t\t\t// TypeScript declaration file name is normalized to support Windows style paths\n\t\t\treturn declarations.every((decl) => normalize(decl.getSourceFile().fileName) === fileName);\n\t\t}\n\n\t\t/**\n\t\t * Extracts property paths from member expressions.\n\t\t */\n\t\tfunction getPropertyPath(node: TSESTree.Identifier): {\n\t\t\tpaths: PropertyPathArray;\n\t\t\tisSpread: boolean;\n\t\t} {\n\t\t\tconst paths: PropertyPathArray = [];\n\t\t\tlet isSpread = false;\n\t\t\tlet currentNode: TSESTree.Node | SvAST.SvelteSpreadAttribute = node;\n\t\t\tlet parentNode: TSESTree.Node | SvAST.SvelteSpreadAttribute | null =\n\t\t\t\tcurrentNode.parent ?? null;\n\t\t\twhile (parentNode) {\n\t\t\t\tif (parentNode.type === 'MemberExpression' && parentNode.object === currentNode) {\n\t\t\t\t\tconst property = parentNode.property;\n\t\t\t\t\tif (property.type === 'Identifier') {\n\t\t\t\t\t\tpaths.push(property.name);\n\t\t\t\t\t} else if (property.type === 'Literal' && typeof property.value === 'string') {\n\t\t\t\t\t\tpaths.push(property.value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (parentNode.type === 'SpreadElement' || parentNode.type === 'SvelteSpreadAttribute') {\n\t\t\t\t\t\tisSpread = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcurrentNode = parentNode;\n\t\t\t\tparentNode = (currentNode.parent as TSESTree.Node | SvAST.SvelteSpreadAttribute) ?? null;\n\t\t\t}\n\n\t\t\treturn { paths, isSpread };\n\t\t}\n\n\t\t/**\n\t\t * Finds all property access paths for a given variable.\n\t\t */\n\t\tfunction getUsedNestedPropertyPathsArray(node: TSESTree.Identifier): {\n\t\t\tpaths: PropertyPathArray[];\n\t\t\tspreadPaths: PropertyPathArray[];\n\t\t} {\n\t\t\tconst variable = findVariable(context, node);\n\t\t\tif (!variable) return { paths: [], spreadPaths: [] };\n\n\t\t\tconst pathsArray: PropertyPathArray[] = [];\n\t\t\tconst spreadPathsArray: PropertyPathArray[] = [];\n\t\t\tfor (const reference of variable.references) {\n\t\t\t\tif (\n\t\t\t\t\t'identifier' in reference &&\n\t\t\t\t\treference.identifier.type === 'Identifier' &&\n\t\t\t\t\t(reference.identifier.range[0] !== node.range[0] ||\n\t\t\t\t\t\treference.identifier.range[1] !== node.range[1])\n\t\t\t\t) {\n\t\t\t\t\tconst { paths, isSpread } = getPropertyPath(reference.identifier);\n\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\tspreadPathsArray.push(paths);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpathsArray.push(paths);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { paths: pathsArray, spreadPaths: spreadPathsArray };\n\t\t}\n\n\t\t/**\n\t\t * Checks if a property is from TypeScript's built-in type definitions.\n\t\t * These properties should be ignored as they are not user-defined props.\n\t\t */\n\t\tfunction isBuiltInProperty(prop: ts.Symbol): boolean {\n\t\t\tconst declarations = prop.getDeclarations();\n\t\t\tif (!declarations || declarations.length === 0) return false;\n\n\t\t\tconst declaration = declarations[0];\n\t\t\tconst sourceFile = declaration.getSourceFile();\n\t\t\tif (!sourceFile) return false;\n\t\t\treturn sourceFile.fileName.includes('node_modules/typescript/lib/');\n\t\t}\n\n\t\tfunction getUsedPropertyNamesFromPattern(\n\t\t\tpattern: TSESTree.ObjectPattern\n\t\t): DeclaredPropertyNames {\n\t\t\tconst usedProps: DeclaredPropertyNames = new Set();\n\t\t\tfor (const prop of pattern.properties) {\n\t\t\t\tif (prop.type === 'Property') {\n\t\t\t\t\tif (prop.key.type === 'Identifier') {\n\t\t\t\t\t\tusedProps.add({ originalName: prop.key.name, aliasName: prop.key.name });\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tprop.key.type === 'Literal' &&\n\t\t\t\t\t\ttypeof prop.key.value === 'string' &&\n\t\t\t\t\t\tprop.value.type === 'Identifier'\n\t\t\t\t\t) {\n\t\t\t\t\t\tusedProps.add({ originalName: prop.key.value, aliasName: prop.value.name });\n\t\t\t\t\t}\n\t\t\t\t} else if (prop.type === 'RestElement') {\n\t\t\t\t\t// If there's a rest element, all properties are potentially used\n\t\t\t\t\treturn new Set();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn usedProps;\n\t\t}\n\n\t\t/**\n\t\t * Check if the type is a class type (has constructor or prototype)\n\t\t */\n\t\tfunction isClassType(type: ts.Type): boolean {\n\t\t\tif (!type) return false;\n\n\t\t\t// Check if it's a class instance type\n\t\t\tif (type.isClass()) return true;\n\n\t\t\t// Check for constructor signatures\n\t\t\tconst constructorType = type.getConstructSignatures();\n\t\t\tif (constructorType.length > 0) return true;\n\n\t\t\t// Check if it has a prototype property\n\t\t\tconst symbol = type.getSymbol();\n\t\t\tif (symbol?.members?.has('prototype' as ts.__String)) return true;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Recursively checks for unused properties in a type.\n\t\t */\n\t\tfunction checkUnusedProperties({\n\t\t\tpropsType,\n\t\t\tusedPropertyPaths,\n\t\t\tusedSpreadPropertyPaths,\n\t\t\tdeclaredPropertyNames,\n\t\t\treportNode,\n\t\t\tparentPath,\n\t\t\tcheckedPropsTypes,\n\t\t\treportedPropertyPaths\n\t\t}: {\n\t\t\tpropsType: ts.Type;\n\t\t\tusedPropertyPaths: string[];\n\t\t\tusedSpreadPropertyPaths: string[];\n\t\t\tdeclaredPropertyNames: DeclaredPropertyNames;\n\t\t\treportNode: TSESTree.Node;\n\t\t\tparentPath: string[];\n\t\t\tcheckedPropsTypes: Set<string>;\n\t\t\treportedPropertyPaths: Set<string>;\n\t\t}) {\n\t\t\t// Skip checking if the type itself is a class\n\t\t\tif (isClassType(propsType)) return;\n\n\t\t\tconst typeStr = typeChecker.typeToString(propsType);\n\t\t\tif (checkedPropsTypes.has(typeStr)) return;\n\t\t\tcheckedPropsTypes.add(typeStr);\n\t\t\tif (shouldIgnoreType(propsType)) return;\n\n\t\t\tconst properties = typeChecker.getPropertiesOfType(propsType);\n\t\t\tconst propsBaseTypes = propsType.getBaseTypes();\n\n\t\t\tif (!properties.length && (!propsBaseTypes || propsBaseTypes.length === 0)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (propsBaseTypes) {\n\t\t\t\tfor (const propsBaseType of propsBaseTypes) {\n\t\t\t\t\tcheckUnusedProperties({\n\t\t\t\t\t\tpropsType: propsBaseType,\n\t\t\t\t\t\tusedPropertyPaths,\n\t\t\t\t\t\tusedSpreadPropertyPaths,\n\t\t\t\t\t\tdeclaredPropertyNames,\n\t\t\t\t\t\treportNode,\n\t\t\t\t\t\tparentPath,\n\t\t\t\t\t\tcheckedPropsTypes,\n\t\t\t\t\t\treportedPropertyPaths\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const prop of properties) {\n\t\t\t\tif (isBuiltInProperty(prop)) continue;\n\t\t\t\tif (!checkImportedTypes && !isInternalProperty(prop)) continue;\n\n\t\t\t\tconst propName = prop.getName();\n\t\t\t\tif (shouldIgnoreProperty(propName)) continue;\n\n\t\t\t\tconst currentPath = [...parentPath, propName];\n\t\t\t\tconst currentPathStr = currentPath.join('.');\n\n\t\t\t\tif (reportedPropertyPaths.has(currentPathStr)) continue;\n\n\t\t\t\tconst propType = typeChecker.getTypeOfSymbol(prop);\n\n\t\t\t\tconst isUsedThisInPath =\n\t\t\t\t\tusedPropertyPaths.includes(currentPathStr) ||\n\t\t\t\t\tusedSpreadPropertyPaths.some((path) => {\n\t\t\t\t\t\treturn path === '' || path === currentPathStr || path.startsWith(`${currentPathStr}.`);\n\t\t\t\t\t});\n\t\t\t\tconst isUsedInPath = usedPropertyPaths.some((path) => {\n\t\t\t\t\treturn path.startsWith(`${currentPathStr}.`);\n\t\t\t\t});\n\n\t\t\t\tif (isUsedThisInPath && !isUsedInPath) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst isUsedInProps = Array.from(declaredPropertyNames).some((p) => {\n\t\t\t\t\treturn p.originalName === propName;\n\t\t\t\t});\n\n\t\t\t\tif (!isUsedInPath && !isUsedInProps) {\n\t\t\t\t\treportedPropertyPaths.add(currentPathStr);\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: reportNode,\n\t\t\t\t\t\tmessageId: parentPath.length ? 'unusedNestedProp' : 'unusedProp',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tname: propName,\n\t\t\t\t\t\t\tparent: parentPath.join('.')\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst isUsedNested = usedPropertyPaths.some((path) => {\n\t\t\t\t\treturn path.startsWith(`${currentPathStr}.`);\n\t\t\t\t});\n\n\t\t\t\tif (isUsedNested || isUsedInProps) {\n\t\t\t\t\tcheckUnusedProperties({\n\t\t\t\t\t\tpropsType: propType,\n\t\t\t\t\t\tusedPropertyPaths,\n\t\t\t\t\t\tusedSpreadPropertyPaths,\n\t\t\t\t\t\tdeclaredPropertyNames,\n\t\t\t\t\t\treportNode,\n\t\t\t\t\t\tparentPath: currentPath,\n\t\t\t\t\t\tcheckedPropsTypes,\n\t\t\t\t\t\treportedPropertyPaths\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for unused index signatures only at the root level\n\t\t\tif (parentPath.length === 0) {\n\t\t\t\tconst indexType = propsType.getStringIndexType();\n\t\t\t\tconst numberIndexType = propsType.getNumberIndexType();\n\t\t\t\tconst hasIndexSignature =\n\t\t\t\t\tBoolean(indexType && !isAnyType(indexType, tools!.ts)) ||\n\t\t\t\t\tBoolean(numberIndexType && !isAnyType(numberIndexType, tools!.ts));\n\n\t\t\t\tif (hasIndexSignature && !hasRestElement(declaredPropertyNames)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: reportNode,\n\t\t\t\t\t\tmessageId: 'unusedIndexSignature'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns true if the destructuring pattern includes a rest element,\n\t\t * which means all remaining properties are potentially used.\n\t\t */\n\t\tfunction hasRestElement(declaredPropertyNames: DeclaredPropertyNames): boolean {\n\t\t\treturn declaredPropertyNames.size === 0;\n\t\t}\n\n\t\tfunction normalizeUsedPaths(\n\t\t\tpaths: PropertyPathArray[],\n\t\t\tallowUnusedNestedProperties: boolean\n\t\t): PropertyPathArray[] {\n\t\t\tconst normalized: PropertyPathArray[] = [];\n\t\t\tfor (const path of paths.sort((a, b) => a.length - b.length)) {\n\t\t\t\tif (normalized.some((p) => p.every((part, idx) => part === path[idx]))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tnormalized.push(path);\n\t\t\t}\n\t\t\treturn normalized.map((path) => {\n\t\t\t\t// If we allow unused nested properties, only return first level properties\n\t\t\t\tif (allowUnusedNestedProperties) return [path[0]];\n\t\t\t\treturn path;\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t'VariableDeclaration > VariableDeclarator': (node: TSESTree.VariableDeclarator) => {\n\t\t\t\t// Only check $props declarations\n\t\t\t\tif (\n\t\t\t\t\tnode.init?.type !== 'CallExpression' ||\n\t\t\t\t\tnode.init.callee.type !== 'Identifier' ||\n\t\t\t\t\tnode.init.callee.name !== '$props'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst tsNode = tools.service.esTreeNodeToTSNodeMap.get(node) as ts.VariableDeclaration;\n\t\t\t\tif (!tsNode || !tsNode.type) return;\n\n\t\t\t\tconst propsType = typeChecker.getTypeFromTypeNode(tsNode.type);\n\t\t\t\tconst usedPropertyPathsArray: PropertyPathArray[] = [];\n\t\t\t\tconst usedSpreadPropertyPathsArray: PropertyPathArray[] = [];\n\t\t\t\tlet declaredPropertyNames: DeclaredPropertyNames = new Set();\n\n\t\t\t\tif (node.id.type === 'ObjectPattern') {\n\t\t\t\t\tdeclaredPropertyNames = getUsedPropertyNamesFromPattern(node.id);\n\t\t\t\t\tif (declaredPropertyNames.size === 0) return;\n\t\t\t\t\tconst identifiers: TSESTree.Identifier[] = [];\n\t\t\t\t\tfor (const p of node.id.properties) {\n\t\t\t\t\t\tif (p.type !== 'Property') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (p.value.type === 'Identifier') {\n\t\t\t\t\t\t\tidentifiers.push(p.value);\n\t\t\t\t\t\t} else if (p.value.type === 'AssignmentPattern' && p.value.left.type === 'Identifier') {\n\t\t\t\t\t\t\tidentifiers.push(p.value.left);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const identifier of identifiers) {\n\t\t\t\t\t\tconst { paths, spreadPaths } = getUsedNestedPropertyPathsArray(identifier);\n\t\t\t\t\t\tusedPropertyPathsArray.push(...paths.map((path) => [identifier.name, ...path]));\n\t\t\t\t\t\tusedSpreadPropertyPathsArray.push(\n\t\t\t\t\t\t\t...spreadPaths.map((path) => [identifier.name, ...path])\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else if (node.id.type === 'Identifier') {\n\t\t\t\t\tconst { paths, spreadPaths } = getUsedNestedPropertyPathsArray(node.id);\n\t\t\t\t\tusedPropertyPathsArray.push(...paths);\n\t\t\t\t\tusedSpreadPropertyPathsArray.push(...spreadPaths);\n\t\t\t\t}\n\n\t\t\t\tfunction runNormalizeUsedPaths(paths: PropertyPathArray[]) {\n\t\t\t\t\treturn normalizeUsedPaths(paths, options.allowUnusedNestedProperties).map((pathArray) => {\n\t\t\t\t\t\treturn pathArray.join('.');\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckUnusedProperties({\n\t\t\t\t\tpropsType,\n\t\t\t\t\tusedPropertyPaths: runNormalizeUsedPaths(usedPropertyPathsArray),\n\t\t\t\t\tusedSpreadPropertyPaths: runNormalizeUsedPaths(usedSpreadPropertyPathsArray),\n\t\t\t\t\tdeclaredPropertyNames,\n\t\t\t\t\treportNode: node.id,\n\t\t\t\t\tparentPath: [],\n\t\t\t\t\tcheckedPropsTypes: new Set<string>(),\n\t\t\t\t\treportedPropertyPaths: new Set<string>()\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-unused-svelte-ignore.ts",
    "content": "import { getSvelteCompileWarnings } from '../shared/svelte-compile-warns/index.js';\nimport { createRule } from '../utils/index.js';\nimport type { IgnoreItem } from '../shared/svelte-compile-warns/ignore-comment.js';\nimport { getSvelteIgnoreItems } from '../shared/svelte-compile-warns/ignore-comment.js';\nimport { VERSION as SVELTE_VERSION } from 'svelte/compiler';\nimport semver from 'semver';\n\nexport default createRule('no-unused-svelte-ignore', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow unused svelte-ignore comments',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunused: 'svelte-ignore comment is used, but not warned',\n\t\t\tmissingCode: 'svelte-ignore comment must include the code'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tif (!sourceCode.parserServices.isSvelte) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst ignoreComments: IgnoreItem[] = [];\n\t\tfor (const item of getSvelteIgnoreItems(context)) {\n\t\t\tif (item.code == null) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: item.token,\n\t\t\t\t\tmessageId: 'missingCode'\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tignoreComments.push(item);\n\t\t\t}\n\t\t}\n\n\t\tif (!ignoreComments.length) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst warnings = getSvelteCompileWarnings(context);\n\t\tif (warnings.kind === 'error') {\n\t\t\treturn {};\n\t\t}\n\n\t\tfor (const unused of warnings.unusedIgnores) {\n\t\t\tif (unused.code === 'reactive-component' && semver.satisfies(SVELTE_VERSION, '<5')) {\n\t\t\t\t// Svelte v4 `reactive-component` warnings are not emitted\n\t\t\t\t// when we use the `generate: false` compiler option.\n\t\t\t\t// This is probably not the intended behavior of Svelte v4, but it's not going to be fixed,\n\t\t\t\t// so as a workaround we'll ignore the `reactive-component` warnings.\n\t\t\t\t// See https://github.com/sveltejs/eslint-plugin-svelte/issues/1192\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcontext.report({\n\t\t\t\tloc: {\n\t\t\t\t\tstart: sourceCode.getLocFromIndex(unused.range[0]),\n\t\t\t\t\tend: sourceCode.getLocFromIndex(unused.range[1])\n\t\t\t\t},\n\t\t\t\tmessageId: 'unused'\n\t\t\t});\n\t\t}\n\t\treturn {};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts",
    "content": "import { createRule } from '../utils/index.js';\n\nexport default createRule('no-useless-children-snippet', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"disallow explicit children snippet where it's not needed\",\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tuselessSnippet: 'Found an unnecessary children snippet.'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteSnippetBlock(node) {\n\t\t\t\tif (\n\t\t\t\t\tnode.parent.type === 'SvelteElement' &&\n\t\t\t\t\tnode.id.name === 'children' &&\n\t\t\t\t\tnode.params.length === 0\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({ node, messageId: 'uselessSnippet' });\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\n/**\n * Strip quotes string\n */\nfunction stripQuotes(text: string) {\n\tif (\n\t\t(text.startsWith('\"') || text.startsWith(\"'\") || text.startsWith('`')) &&\n\t\ttext.endsWith(text[0])\n\t) {\n\t\treturn text.slice(1, -1);\n\t}\n\treturn null;\n}\n\nexport default createRule('no-useless-mustaches', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow unnecessary mustache interpolations',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tignoreIncludesComment: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t},\n\t\t\t\t\tignoreStringEscape: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunexpected: 'Unexpected mustache interpolation with a string literal value.'\n\t\t},\n\t\ttype: 'suggestion' // \"problem\",\n\t},\n\tcreate(context) {\n\t\tconst opts = context.options[0] || {};\n\t\tconst ignoreIncludesComment = Boolean(opts.ignoreIncludesComment);\n\t\tconst ignoreStringEscape = Boolean(opts.ignoreStringEscape);\n\t\tconst sourceCode = context.sourceCode;\n\n\t\t/**\n\t\t * Report if the value expression is string literals\n\t\t * @param node the node to check\n\t\t */\n\t\tfunction verify(node: AST.SvelteMustacheTag) {\n\t\t\tif (node.kind === 'raw') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { expression } = node;\n\t\t\tlet strValue: string, rawValue: string;\n\t\t\tif (expression.type === 'Literal') {\n\t\t\t\tif (typeof expression.value !== 'string') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstrValue = expression.value;\n\t\t\t\trawValue = sourceCode.getText(expression).slice(1, -1);\n\t\t\t} else if (expression.type === 'TemplateLiteral') {\n\t\t\t\tif (expression.expressions.length > 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstrValue = expression.quasis[0].value.cooked!;\n\t\t\t\trawValue = expression.quasis[0].value.raw;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst hasComment = sourceCode\n\t\t\t\t.getTokens(node, { includeComments: true })\n\t\t\t\t.some((t) => t.type === 'Block' || t.type === 'Line');\n\t\t\tif (ignoreIncludesComment && hasComment) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (expression.type === 'TemplateLiteral' && /[\\n\\r]/.test(rawValue)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (rawValue.includes('{')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet hasEscape = false;\n\t\t\tif (rawValue !== strValue) {\n\t\t\t\t// check escapes\n\t\t\t\tconst chars = [...rawValue];\n\t\t\t\tlet c = chars.shift();\n\t\t\t\twhile (c) {\n\t\t\t\t\tif (c === '\\\\') {\n\t\t\t\t\t\tc = chars.shift();\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tc == null ||\n\t\t\t\t\t\t\t// ignore \"\\\\\", '\"', \"'\", \"`\" and \"$\"\n\t\t\t\t\t\t\t'nrvtbfux'.includes(c)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// has useful escape.\n\t\t\t\t\t\t\thasEscape = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = chars.shift();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ignoreStringEscape && hasEscape) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'unexpected',\n\t\t\t\tfix(fixer) {\n\t\t\t\t\tif (hasComment || hasEscape) {\n\t\t\t\t\t\t// cannot fix\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tconst text = stripQuotes(sourceCode.getText(expression));\n\t\t\t\t\tif (text == null) {\n\t\t\t\t\t\t// unknowns\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (text.includes('\\n') || /^\\s|\\s$/u.test(text)) {\n\t\t\t\t\t\t// It doesn't autofix because another rule like indent or eol space might remove spaces.\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst unescaped = text.replace(/\\\\([\\s\\S])/g, '$1');\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.parent.type === 'SvelteAttribute' ||\n\t\t\t\t\t\tnode.parent.type === 'SvelteStyleDirective'\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst div = sourceCode.text.slice(\n\t\t\t\t\t\t\tnode.parent.key.range[1],\n\t\t\t\t\t\t\tnode.parent.value[0].range[0]\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst quote = div.endsWith('\"') ? 'quot' : div.endsWith(\"'\") ? 'apos' : null;\n\t\t\t\t\t\tif (!quote) {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tfixer.insertTextBefore(node.parent.value[0], '\"'),\n\t\t\t\t\t\t\t\tfixer.replaceText(node, unescaped.replace(/\"/gu, '&quot;')),\n\t\t\t\t\t\t\t\tfixer.insertTextAfter(node.parent.value[node.parent.value.length - 1], '\"')\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn fixer.replaceText(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tquote === 'quot'\n\t\t\t\t\t\t\t\t? unescaped.replace(/\"/gu, '&quot;')\n\t\t\t\t\t\t\t\t: unescaped.replace(/'/gu, '&apos;')\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn fixer.replaceText(node, unescaped.replace(/</gu, '&lt;').replace(/>/gu, '&gt;'));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteMustacheTag: verify\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/prefer-class-directive.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { getStringIfConstant, isHTMLElementLike, needParentheses } from '../utils/ast-utils.js';\nimport type { Rule } from 'eslint';\n\nexport default createRule('prefer-class-directive', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require class directives instead of ternary expressions',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tprefer: { enum: ['always', 'empty'] }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tunexpected: 'Unexpected class using the ternary operator.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst preferEmpty = context.options[0]?.prefer !== 'always';\n\n\t\ttype Expr = {\n\t\t\tnot?: true;\n\t\t\tnode: TSESTree.Expression;\n\t\t\tchains?: Expr;\n\t\t};\n\n\t\t/**\n\t\t * Returns a map of expressions and strings from ConditionalExpression.\n\t\t * Returns null if it has an unknown string.\n\t\t */\n\t\tfunction parseConditionalExpression(\n\t\t\tnode: TSESTree.ConditionalExpression\n\t\t): Map<Expr, string> | null {\n\t\t\tconst result = new Map<Expr, string>();\n\n\t\t\tif (\n\t\t\t\t!processItems(\n\t\t\t\t\t{\n\t\t\t\t\t\tnode: node.test\n\t\t\t\t\t},\n\t\t\t\t\tnode.consequent\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!processItems(\n\t\t\t\t\t{\n\t\t\t\t\t\tnot: true,\n\t\t\t\t\t\tnode: node.test\n\t\t\t\t\t},\n\t\t\t\t\tnode.alternate\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t\t/** Process items */\n\t\t\tfunction processItems(key: Expr, e: TSESTree.Expression) {\n\t\t\t\tif (e.type === 'ConditionalExpression') {\n\t\t\t\t\tconst sub = parseConditionalExpression(e);\n\t\t\t\t\tif (sub == null) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [expr, str] of sub) {\n\t\t\t\t\t\tresult.set(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...key,\n\t\t\t\t\t\t\t\tchains: expr\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstr\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst str = getStringIfConstant(e);\n\t\t\t\t\tif (str == null) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tresult.set(key, str);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Expr to string\n\t\t */\n\t\tfunction exprToString({ node, not }: Expr): string {\n\t\t\tlet text = sourceCode.text.slice(...node.range);\n\n\t\t\t// *Currently not supported.\n\t\t\t// if (chains) {\n\t\t\t//   if (needParentheses(node, \"logical\")) {\n\t\t\t//     text = `(${text})`\n\t\t\t//   }\n\t\t\t//   let chainsText = exprToString(chains)\n\t\t\t//   const needParenForChains =\n\t\t\t//     !/^[!(]/u.test(chainsText) && needParentheses(chains.node, \"logical\")\n\t\t\t//   if (needParenForChains) {\n\t\t\t//     chainsText = `(${chainsText})`\n\t\t\t//   }\n\t\t\t//   text = `${text} && ${chainsText}`\n\t\t\t//   if (not) {\n\t\t\t//     text = `!(${text})`\n\t\t\t//   }\n\t\t\t//   return text\n\t\t\t// }\n\t\t\tif (not) {\n\t\t\t\tif (node.type === 'BinaryExpression') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.operator === '===' ||\n\t\t\t\t\t\tnode.operator === '==' ||\n\t\t\t\t\t\tnode.operator === '!==' ||\n\t\t\t\t\t\tnode.operator === '!='\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst left = sourceCode.text.slice(...node.left.range);\n\t\t\t\t\t\tconst op = sourceCode.text.slice(node.left.range[1], node.right.range[0]);\n\t\t\t\t\t\tconst right = sourceCode.text.slice(...node.right.range);\n\n\t\t\t\t\t\treturn `${left}${\n\t\t\t\t\t\t\tnode.operator === '===' || node.operator === '=='\n\t\t\t\t\t\t\t\t? op.replace(/[=](={1,2})/g, '!$1')\n\t\t\t\t\t\t\t\t: op.replace(/!(={1,2})/g, '=$1')\n\t\t\t\t\t\t}${right}`;\n\t\t\t\t\t}\n\t\t\t\t} else if (node.type === 'UnaryExpression') {\n\t\t\t\t\tif (node.operator === '!' && node.prefix) {\n\t\t\t\t\t\treturn sourceCode.text.slice(...node.argument.range);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (needParentheses(node, 'not')) {\n\t\t\t\t\ttext = `(${text})`;\n\t\t\t\t}\n\t\t\t\ttext = `!${text}`;\n\t\t\t}\n\t\t\treturn text;\n\t\t}\n\n\t\t/**\n\t\t * Returns all possible strings.\n\t\t */\n\t\tfunction getStrings(node: AST.SvelteAttribute['value'][number]) {\n\t\t\tif (node.type === 'SvelteLiteral') {\n\t\t\t\treturn [node.value];\n\t\t\t}\n\t\t\tif (node.expression.type === 'ConditionalExpression') {\n\t\t\t\tconst values = parseConditionalExpression(node.expression);\n\t\t\t\tif (values == null) {\n\t\t\t\t\t// unknown\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn [...values.values()];\n\t\t\t}\n\t\t\tconst str = getStringIfConstant(node.expression);\n\t\t\tif (str == null) {\n\t\t\t\t// unknown\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn [str];\n\t\t}\n\n\t\t/**\n\t\t * Checks if the last character is a non word.\n\t\t */\n\t\tfunction endsWithNonWord(node: AST.SvelteAttribute, index: number): boolean {\n\t\t\tfor (let i = index; i >= 0; i--) {\n\t\t\t\tconst valueNode = node.value[i];\n\t\t\t\tconst strings = getStrings(valueNode);\n\t\t\t\tif (strings == null) {\n\t\t\t\t\t// unknown\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor (const str of strings) {\n\t\t\t\t\tif (str) {\n\t\t\t\t\t\treturn !str[str.length - 1].trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If the string is empty, check the previous string.\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Checks if the first character is a non word.\n\t\t */\n\t\tfunction startsWithNonWord(node: AST.SvelteAttribute, index: number): boolean {\n\t\t\tfor (let i = index; i < node.value.length; i++) {\n\t\t\t\tconst valueNode = node.value[i];\n\t\t\t\tconst strings = getStrings(valueNode);\n\t\t\t\tif (strings == null) {\n\t\t\t\t\t// unknown\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor (const str of strings) {\n\t\t\t\t\tif (str) {\n\t\t\t\t\t\treturn !str[0].trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If the string is empty, check the previous string.\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/** Report */\n\t\tfunction report(\n\t\t\tnode: AST.SvelteMustacheTagText,\n\t\t\tmap: Map<Expr, string>,\n\t\t\tattr: AST.SvelteAttribute\n\t\t) {\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tconst classDirectives: string[] = [];\n\t\t\t\t\tlet space = ' ';\n\t\t\t\t\tfor (const [expr, className] of map) {\n\t\t\t\t\t\tconst trimmedClassName = className.trim();\n\t\t\t\t\t\tif (trimmedClassName) {\n\t\t\t\t\t\t\tclassDirectives.push(`class:${trimmedClassName}={${exprToString(expr)}}`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tspace = className;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fixesBuffer: Rule.Fix[] = [];\n\t\t\t\t\tconst index = attr.value.indexOf(node);\n\t\t\t\t\tconst beforeAttrValues = attr.value.slice(0, index);\n\t\t\t\t\tconst afterAttrValues = attr.value.slice(index + 1);\n\t\t\t\t\tlet valueNode;\n\t\t\t\t\twhile ((valueNode = beforeAttrValues[beforeAttrValues.length - 1])) {\n\t\t\t\t\t\tif (valueNode.type === 'SvelteLiteral') {\n\t\t\t\t\t\t\tif (!valueNode.value.trim()) {\n\t\t\t\t\t\t\t\t// Before spaces\n\t\t\t\t\t\t\t\tbeforeAttrValues.pop();\n\t\t\t\t\t\t\t\tfixesBuffer.push(fixer.remove(valueNode));\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (valueNode.value.trimEnd() !== valueNode.value) {\n\t\t\t\t\t\t\t\t// Before spaces\n\t\t\t\t\t\t\t\tfixesBuffer.push(fixer.replaceText(valueNode, valueNode.value.trimEnd()));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\twhile ((valueNode = afterAttrValues[0])) {\n\t\t\t\t\t\tif (valueNode.type === 'SvelteLiteral') {\n\t\t\t\t\t\t\tif (!valueNode.value.trim()) {\n\t\t\t\t\t\t\t\t// After spaces\n\t\t\t\t\t\t\t\tafterAttrValues.shift();\n\t\t\t\t\t\t\t\tfixesBuffer.push(fixer.remove(valueNode));\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (valueNode.value.trimStart() !== valueNode.value) {\n\t\t\t\t\t\t\t\t// After spaces\n\t\t\t\t\t\t\t\tfixesBuffer.push(fixer.replaceText(valueNode, valueNode.value.trimStart()));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!beforeAttrValues.length && !afterAttrValues.length) {\n\t\t\t\t\t\tyield fixer.replaceText(attr, classDirectives.join(' '));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield* fixesBuffer;\n\t\t\t\t\t\tif (beforeAttrValues.length && afterAttrValues.length) {\n\t\t\t\t\t\t\tyield fixer.replaceText(node, space || ' ');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield fixer.remove(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield fixer.insertTextAfterRange(\n\t\t\t\t\t\t\t[attr.range[1], attr.range[1]],\n\t\t\t\t\t\t\t` ${classDirectives.join(' ')}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/** verify */\n\t\tfunction verify(node: AST.SvelteMustacheTagText, index: number, attr: AST.SvelteAttribute) {\n\t\t\tif (node.expression.type !== 'ConditionalExpression') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst map = parseConditionalExpression(node.expression);\n\t\t\tif (map == null) {\n\t\t\t\t// has unknown\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (map.size > 2) {\n\t\t\t\t// It's too complicated.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (preferEmpty && [...map.values()].every((x) => x.trim())) {\n\t\t\t\t// We prefer directives when there's an empty string, but they're all not empty\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst prevIsWord = !startsWithNonWord(attr, index + 1);\n\t\t\tconst nextIsWord = !endsWithNonWord(attr, index - 1);\n\t\t\tlet canTransform = true;\n\t\t\tfor (const className of map.values()) {\n\t\t\t\tif (className) {\n\t\t\t\t\tif (!/^[\\w-]*$/u.test(className.trim())) {\n\t\t\t\t\t\t// Cannot be transformed to an attribute.\n\t\t\t\t\t\tcanTransform = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t(className[0].trim() && prevIsWord) ||\n\t\t\t\t\t\t(className[className.length - 1].trim() && nextIsWord)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// The previous or next may be connected to this element.\n\t\t\t\t\t\tcanTransform = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (prevIsWord && nextIsWord) {\n\t\t\t\t\t// The previous and next may be connected.\n\t\t\t\t\tcanTransform = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!canTransform) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treport(node, map, attr);\n\t\t}\n\n\t\treturn {\n\t\t\t'SvelteStartTag > SvelteAttribute'(\n\t\t\t\tnode: AST.SvelteAttribute & {\n\t\t\t\t\tparent: AST.SvelteStartTag;\n\t\t\t\t}\n\t\t\t) {\n\t\t\t\tif (!isHTMLElementLike(node.parent.parent) || node.key.name !== 'class') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (let index = 0; index < node.value.length; index++) {\n\t\t\t\t\tconst valueElement = node.value[index];\n\t\t\t\t\tif (valueElement.type !== 'SvelteMustacheTag') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tverify(valueElement, index, node);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/prefer-const.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\n\nimport { createRule } from '../utils/index.js';\nimport { defineWrapperListener, getCoreRule } from '../utils/eslint-core.js';\n\nconst coreRule = getCoreRule('prefer-const');\n\n/**\n * Finds and returns the callee of a declaration node within variable declarations or object patterns.\n */\nfunction findDeclarationCallee(node: TSESTree.Expression) {\n\tconst { parent } = node;\n\tif (parent.type === 'VariableDeclarator' && parent.init?.type === 'CallExpression') {\n\t\treturn parent.init.callee;\n\t}\n\n\treturn null;\n}\n\n/**\n * Determines if a declaration should be skipped in the const preference analysis.\n * Specifically checks for Svelte's state management utilities ($props, $derived).\n */\nfunction shouldSkipDeclaration(declaration: TSESTree.Expression | null, excludedRunes: string[]) {\n\tif (!declaration) {\n\t\treturn false;\n\t}\n\n\tconst callee = findDeclarationCallee(declaration);\n\tif (!callee) {\n\t\treturn false;\n\t}\n\n\tif (callee.type === 'Identifier' && excludedRunes.includes(callee.name)) {\n\t\treturn true;\n\t}\n\n\tif (callee.type !== 'MemberExpression' || callee.object.type !== 'Identifier') {\n\t\treturn false;\n\t}\n\n\tif (excludedRunes.includes(callee.object.name)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport default createRule('prefer-const', {\n\tmeta: {\n\t\t...coreRule.meta,\n\t\tdocs: {\n\t\t\tdescription: coreRule.meta.docs.description,\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false,\n\t\t\textensionRule: 'prefer-const'\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tdestructuring: { enum: ['any', 'all'] },\n\t\t\t\t\tignoreReadBeforeAssign: { type: 'boolean' },\n\t\t\t\t\texcludedRunes: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Allow ESLint core rule properties in case new options are added in the future.\n\t\t\t\tadditionalProperties: true\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst config = context.options[0] ?? {};\n\t\tconst excludedRunes = config.excludedRunes ?? ['$props', '$derived'];\n\n\t\treturn defineWrapperListener(coreRule, context, {\n\t\t\tcreateListenerProxy(coreListener) {\n\t\t\t\treturn {\n\t\t\t\t\t...coreListener,\n\t\t\t\t\tVariableDeclaration(node) {\n\t\t\t\t\t\tfor (const decl of node.declarations) {\n\t\t\t\t\t\t\tif (shouldSkipDeclaration(decl.init, excludedRunes)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcoreListener.VariableDeclaration?.(node);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/prefer-destructured-store-props.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { getPropertyName } from '@eslint-community/eslint-utils';\nimport type { AST } from 'svelte-eslint-parser';\nimport { keyword } from 'esutils';\nimport type { SuggestionReportDescriptor } from '../types.js';\nimport { createRule } from '../utils/index.js';\nimport { findAttribute, isExpressionIdentifier, findVariable } from '../utils/ast-utils.js';\nimport { getSvelteContext } from '../utils/svelte-context.js';\nimport { SVELTE_RUNES } from '../shared/runes.js';\n\ntype StoreMemberExpression = TSESTree.MemberExpression & {\n\tobject: TSESTree.Identifier & { name: string };\n};\n\nexport default createRule('prefer-destructured-store-props', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'destructure values from object stores for better change tracking & fewer redraws',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tuseDestructuring: `Destructure {{property}} from {{store}} for better change tracking & fewer redraws`,\n\t\t\tfixUseDestructuring: `Using destructuring like $: ({ {{property}} } = {{store}}); will run faster`,\n\t\t\tfixUseVariable: `Using the predefined reactive variable {{variable}}`\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tlet mainScript: AST.SvelteScriptElement | null = null;\n\t\tconst svelteContext = getSvelteContext(context);\n\n\t\t// Store off instances of probably-destructurable statements\n\t\tconst reports: StoreMemberExpression[] = [];\n\t\tlet inScriptElement = false;\n\n\t\tconst storeMemberAccessStack: {\n\t\t\tnode: StoreMemberExpression;\n\t\t\t// A list of Identifiers that make up the member expression.\n\t\t\tidentifiers: TSESTree.Identifier[];\n\t\t}[] = [];\n\n\t\t/** Find for defined reactive variables. */\n\t\tfunction* findReactiveVariable(\n\t\t\tobject: TSESTree.Identifier,\n\t\t\tpropName: string\n\t\t): Iterable<TSESTree.Identifier> {\n\t\t\tconst storeVar = findVariable(context, object);\n\t\t\tif (!storeVar) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const reference of storeVar.references) {\n\t\t\t\tconst id = reference.identifier;\n\t\t\t\tif (id.name !== object.name) continue;\n\t\t\t\tif (isReactiveVariableDefinitionWithMemberExpression(id)) {\n\t\t\t\t\t// $: target = $store.prop\n\t\t\t\t\tyield id.parent.parent.left;\n\t\t\t\t} else if (isReactiveVariableDefinitionWithDestructuring(id)) {\n\t\t\t\t\tconst prop = id.parent.left.properties.find(\n\t\t\t\t\t\t(prop): prop is TSESTree.Property & { value: TSESTree.Identifier } =>\n\t\t\t\t\t\t\tprop.type === 'Property' &&\n\t\t\t\t\t\t\tprop.value.type === 'Identifier' &&\n\t\t\t\t\t\t\tgetPropertyName(prop) === propName\n\t\t\t\t\t);\n\t\t\t\t\tif (prop) {\n\t\t\t\t\t\t// $: ({prop: target} = $store)\n\t\t\t\t\t\tyield prop.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/** Checks whether the given node is reactive variable definition with member expression. */\n\t\t\tfunction isReactiveVariableDefinitionWithMemberExpression(\n\t\t\t\tnode: TSESTree.Identifier | TSESTree.JSXIdentifier\n\t\t\t): node is TSESTree.Identifier & {\n\t\t\t\tparent: TSESTree.MemberExpression & {\n\t\t\t\t\tparent: TSESTree.AssignmentExpression & { left: TSESTree.Identifier };\n\t\t\t\t};\n\t\t\t} {\n\t\t\t\treturn (\n\t\t\t\t\tnode.type === 'Identifier' &&\n\t\t\t\t\tnode.parent?.type === 'MemberExpression' &&\n\t\t\t\t\tnode.parent.object === node &&\n\t\t\t\t\tgetPropertyName(node.parent) === propName &&\n\t\t\t\t\tnode.parent.parent?.type === 'AssignmentExpression' &&\n\t\t\t\t\tnode.parent.parent.right === node.parent &&\n\t\t\t\t\tnode.parent.parent.left.type === 'Identifier' &&\n\t\t\t\t\tnode.parent.parent.parent?.type === 'ExpressionStatement' &&\n\t\t\t\t\t(node.parent.parent.parent.parent as never as AST.SvelteReactiveStatement)?.type ===\n\t\t\t\t\t\t'SvelteReactiveStatement'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/** Checks whether the given node is reactive variable definition with destructuring. */\n\t\t\tfunction isReactiveVariableDefinitionWithDestructuring(\n\t\t\t\tnode: TSESTree.Identifier | TSESTree.JSXIdentifier\n\t\t\t): node is TSESTree.Identifier & {\n\t\t\t\tparent: TSESTree.AssignmentExpression & {\n\t\t\t\t\tleft: TSESTree.ObjectPattern;\n\t\t\t\t};\n\t\t\t} {\n\t\t\t\treturn (\n\t\t\t\t\tnode.type === 'Identifier' &&\n\t\t\t\t\tnode.parent?.type === 'AssignmentExpression' &&\n\t\t\t\t\tnode.parent.right === node &&\n\t\t\t\t\tnode.parent.left.type === 'ObjectPattern' &&\n\t\t\t\t\tnode.parent.parent?.type === 'ExpressionStatement' &&\n\t\t\t\t\t(node.parent.parent.parent as never as AST.SvelteReactiveStatement)?.type ===\n\t\t\t\t\t\t'SvelteReactiveStatement'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/** Checks whether the given name is already defined as a variable. */\n\t\tfunction hasTopLevelVariable(name: string) {\n\t\t\tconst scopeManager = context.sourceCode.scopeManager;\n\t\t\tif (scopeManager.globalScope?.set.has(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst moduleScope = scopeManager.globalScope?.childScopes.find((s) => s.type === 'module');\n\t\t\treturn moduleScope?.set.has(name) || false;\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tinScriptElement = true;\n\t\t\t\tconst scriptContext = findAttribute(node, 'context');\n\t\t\t\tconst contextValue = scriptContext?.value.length === 1 && scriptContext.value[0];\n\t\t\t\tif (\n\t\t\t\t\tcontextValue &&\n\t\t\t\t\tcontextValue.type === 'SvelteLiteral' &&\n\t\t\t\t\tcontextValue.value === 'module'\n\t\t\t\t) {\n\t\t\t\t\t// It is <script context=\"module\">\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmainScript = node;\n\t\t\t},\n\t\t\t'SvelteScriptElement:exit'() {\n\t\t\t\tinScriptElement = false;\n\t\t\t},\n\n\t\t\t// {$foo.bar}\n\t\t\t// should be\n\t\t\t// $: ({ bar } = $foo);\n\t\t\t// {bar}\n\t\t\t// Same with {$foo[\"bar\"]}\n\t\t\t\"MemberExpression[object.type='Identifier'][object.name=/^\\\\$[^\\\\$]/]\"(\n\t\t\t\tnode: StoreMemberExpression\n\t\t\t) {\n\t\t\t\tif (inScriptElement) return; // Within a script tag\n\t\t\t\t// Skip Svelte 5 runes (e.g., $derived.by, $state.raw, $effect.pre)\n\t\t\t\tif (svelteContext?.runes === true && SVELTE_RUNES.has(node.object.name)) return;\n\t\t\t\tstoreMemberAccessStack.unshift({ node, identifiers: [] });\n\t\t\t},\n\t\t\tIdentifier(node: TSESTree.Identifier) {\n\t\t\t\tstoreMemberAccessStack[0]?.identifiers.push(node);\n\t\t\t},\n\t\t\t\"MemberExpression[object.type='Identifier'][object.name=/^\\\\$[^\\\\$]/]:exit\"(\n\t\t\t\tnode: StoreMemberExpression\n\t\t\t) {\n\t\t\t\tif (storeMemberAccessStack[0]?.node !== node) return;\n\t\t\t\tconst { identifiers } = storeMemberAccessStack.shift()!;\n\n\t\t\t\tfor (const id of identifiers) {\n\t\t\t\t\tif (!isExpressionIdentifier(id)) continue;\n\t\t\t\t\tconst variable = findVariable(context, id);\n\t\t\t\t\tconst isTopLevel =\n\t\t\t\t\t\t!variable || variable.scope.type === 'module' || variable.scope.type === 'global';\n\t\t\t\t\tif (!isTopLevel) {\n\t\t\t\t\t\t// Member expressions may use variables defined with {#each} etc.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treports.push(node);\n\t\t\t},\n\n\t\t\t'Program:exit'() {\n\t\t\t\tconst scriptEndTag = mainScript && mainScript.endTag;\n\t\t\t\tfor (const node of reports) {\n\t\t\t\t\tconst store = node.object.name;\n\n\t\t\t\t\tconst suggest: SuggestionReportDescriptor[] = [];\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Avoid suggestions for:\n\t\t\t\t\t\t//  dynamic accesses like {$foo[bar]}\n\t\t\t\t\t\t!node.computed\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const variable of new Set(findReactiveVariable(node.object, node.property.name))) {\n\t\t\t\t\t\t\tsuggest.push({\n\t\t\t\t\t\t\t\tmessageId: 'fixUseVariable',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tvariable: variable.name\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\t\treturn fixer.replaceText(node, variable.name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t// Avoid suggestions for:\n\t\t\t\t\t\t\t//  no <script> tag\n\t\t\t\t\t\t\t//  no <script> ending\n\t\t\t\t\t\t\tscriptEndTag\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tsuggest.push({\n\t\t\t\t\t\t\t\tmessageId: 'fixUseDestructuring',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\t\t\tproperty: node.property.name\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\t\tconst propName = node.property.name;\n\n\t\t\t\t\t\t\t\t\tlet varName = propName;\n\t\t\t\t\t\t\t\t\tif (varName.startsWith('$')) {\n\t\t\t\t\t\t\t\t\t\tvarName = varName.slice(1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst baseName = varName;\n\t\t\t\t\t\t\t\t\tlet suffix = 0;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tkeyword.isReservedWordES6(varName, true) ||\n\t\t\t\t\t\t\t\t\t\tkeyword.isRestrictedWord(varName)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvarName = `${baseName}${++suffix}`;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twhile (hasTopLevelVariable(varName)) {\n\t\t\t\t\t\t\t\t\t\tvarName = `${baseName}${++suffix}`;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\tfixer.insertTextAfterRange(\n\t\t\t\t\t\t\t\t\t\t\t[scriptEndTag.range[0], scriptEndTag.range[0]],\n\t\t\t\t\t\t\t\t\t\t\t`$: ({ ${propName}${\n\t\t\t\t\t\t\t\t\t\t\t\tpropName !== varName ? `: ${varName}` : ''\n\t\t\t\t\t\t\t\t\t\t\t} } = ${store});\\n`\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tfixer.replaceText(node, varName)\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'useDestructuring',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\tproperty: !node.computed\n\t\t\t\t\t\t\t\t? node.property.name\n\t\t\t\t\t\t\t\t: context.sourceCode.getText(node.property).replace(/\\s+/g, ' ')\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tsuggest\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/prefer-style-directive.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport type {\n\tSvelteStyleDeclaration,\n\tSvelteStyleInline,\n\tSvelteStyleRoot\n} from '../utils/css-utils/index.js';\nimport { parseStyleAttributeValue } from '../utils/css-utils/index.js';\nimport type { RuleFixer } from '../types.js';\nimport { isHTMLElementLike } from '../utils/ast-utils.js';\n\n/** Checks wether the given node is string literal or not  */\nfunction isStringLiteral(node: TSESTree.Expression): node is TSESTree.StringLiteral {\n\treturn node.type === 'Literal' && typeof node.value === 'string';\n}\n\nexport default createRule('prefer-style-directive', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require style directives instead of style attribute',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Can use style directives instead.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\n\t\t/**\n\t\t * Process for `style=\" ... \"`\n\t\t */\n\t\tfunction processStyleValue(\n\t\t\tnode: AST.SvelteAttribute,\n\t\t\troot: SvelteStyleRoot<AST.SvelteMustacheTagText>\n\t\t) {\n\t\t\tfor (const child of root.nodes) {\n\t\t\t\tif (child.type === 'decl') {\n\t\t\t\t\tprocessDeclaration(node, root, child);\n\t\t\t\t} else if (child.type === 'inline') {\n\t\t\t\t\tprocessInline(node, root, child);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Process for declaration\n\t\t */\n\t\tfunction processDeclaration(\n\t\t\tattrNode: AST.SvelteAttribute,\n\t\t\troot: SvelteStyleRoot<AST.SvelteMustacheTagText>,\n\t\t\tdecl: SvelteStyleDeclaration<AST.SvelteMustacheTagText>\n\t\t) {\n\t\t\tif (decl.important || decl.unknownInterpolations.length || decl.prop.interpolations.length)\n\t\t\t\treturn;\n\t\t\tif (\n\t\t\t\tattrNode.parent.attributes.some(\n\t\t\t\t\t(attr) => attr.type === 'SvelteStyleDirective' && attr.key.name.name === decl.prop.name\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// has style directive\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontext.report({\n\t\t\t\tnode: attrNode,\n\t\t\t\tloc: decl.loc,\n\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tconst styleDirective = `style:${decl.prop.name}=\"${sourceCode.text.slice(\n\t\t\t\t\t\t...decl.value.range\n\t\t\t\t\t)}\"`;\n\t\t\t\t\tif (root.nodes.length === 1 && root.nodes[0] === decl) {\n\t\t\t\t\t\tyield fixer.replaceTextRange(attrNode.range, styleDirective);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield removeStyle(fixer, root, decl);\n\t\t\t\t\t\tif (root.nodes[0] === decl) {\n\t\t\t\t\t\t\tyield fixer.insertTextBeforeRange(attrNode.range, `${styleDirective} `);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield fixer.insertTextAfterRange(attrNode.range, ` ${styleDirective}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Process for inline\n\t\t */\n\t\tfunction processInline(\n\t\t\tattrNode: AST.SvelteAttribute,\n\t\t\troot: SvelteStyleRoot<AST.SvelteMustacheTagText>,\n\t\t\tinline: SvelteStyleInline<AST.SvelteMustacheTagText>\n\t\t) {\n\t\t\tconst node = inline.node.expression;\n\n\t\t\tif (node.type !== 'ConditionalExpression') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isStringLiteral(node.consequent) || !isStringLiteral(node.alternate)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (node.consequent.value && node.alternate.value) {\n\t\t\t\t// e.g. t ? 'top: 20px' : 'left: 30px'\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst positive = !node.alternate.value;\n\t\t\tconst inlineRoot = inline.getInlineStyle(positive ? node.consequent : node.alternate);\n\t\t\tif (!inlineRoot || inlineRoot.nodes.length !== 1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst decl = inlineRoot.nodes[0];\n\t\t\tif (decl.type !== 'decl') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tattrNode.parent.attributes.some(\n\t\t\t\t\t(attr) => attr.type === 'SvelteStyleDirective' && attr.key.name.name === decl.prop.name\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// has style directive\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tlet valueText = sourceCode.text.slice(node.test.range[0], node.consequent.range[0]);\n\t\t\t\t\tif (positive) {\n\t\t\t\t\t\tvalueText +=\n\t\t\t\t\t\t\tsourceCode.text[node.consequent.range[0]] +\n\t\t\t\t\t\t\tdecl.value.value +\n\t\t\t\t\t\t\tsourceCode.text[node.consequent.range[1] - 1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueText += 'null';\n\t\t\t\t\t}\n\t\t\t\t\tvalueText += sourceCode.text.slice(node.consequent.range[1], node.alternate.range[0]);\n\t\t\t\t\tif (positive) {\n\t\t\t\t\t\tvalueText += 'null';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueText +=\n\t\t\t\t\t\t\tsourceCode.text[node.alternate.range[0]] +\n\t\t\t\t\t\t\tdecl.value.value +\n\t\t\t\t\t\t\tsourceCode.text[node.alternate.range[1] - 1];\n\t\t\t\t\t}\n\t\t\t\t\tconst styleDirective = `style:${decl.prop.name}={${valueText}}`;\n\t\t\t\t\tif (root.nodes.length === 1 && root.nodes[0] === inline) {\n\t\t\t\t\t\tyield fixer.replaceTextRange(attrNode.range, styleDirective);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield removeStyle(fixer, root, inline);\n\t\t\t\t\t\tif (root.nodes[0] === inline) {\n\t\t\t\t\t\t\tyield fixer.insertTextBeforeRange(attrNode.range, `${styleDirective} `);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield fixer.insertTextAfterRange(attrNode.range, ` ${styleDirective}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/** Remove style */\n\t\tfunction removeStyle(\n\t\t\tfixer: RuleFixer,\n\t\t\troot: SvelteStyleRoot<AST.SvelteMustacheTagText>,\n\t\t\tnode:\n\t\t\t\t| SvelteStyleDeclaration<AST.SvelteMustacheTagText>\n\t\t\t\t| SvelteStyleInline<AST.SvelteMustacheTagText>\n\t\t) {\n\t\t\tconst index = root.nodes.indexOf(node);\n\t\t\tconst after = root.nodes[index + 1];\n\t\t\tif (after) {\n\t\t\t\treturn fixer.removeRange([node.range[0], after.range[0]]);\n\t\t\t}\n\t\t\tconst before = root.nodes[index - 1];\n\t\t\tif (before) {\n\t\t\t\treturn fixer.removeRange([before.range[1], node.range[1]]);\n\t\t\t}\n\t\t\treturn fixer.removeRange(node.range);\n\t\t}\n\n\t\treturn {\n\t\t\t'SvelteStartTag > SvelteAttribute'(\n\t\t\t\tnode: AST.SvelteAttribute & {\n\t\t\t\t\tparent: AST.SvelteStartTag;\n\t\t\t\t}\n\t\t\t) {\n\t\t\t\tif (!isHTMLElementLike(node.parent.parent) || node.key.name !== 'style') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst root = parseStyleAttributeValue(node, context);\n\t\t\t\tif (root) {\n\t\t\t\t\tprocessStyleValue(node, root);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/prefer-svelte-reactivity.ts",
    "content": "import { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport { createRule } from '../utils/index.js';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { findVariable, isIn } from '../utils/ast-utils.js';\nimport { getSvelteContext } from '../utils/svelte-context.js';\n\nexport default createRule('prefer-svelte-reactivity', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow using mutable instances of built-in classes where a reactive alternative is provided by svelte/reactivity',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tmutableDateUsed:\n\t\t\t\t'Found a mutable instance of the built-in Date class. Use SvelteDate instead.',\n\t\t\tmutableMapUsed: 'Found a mutable instance of the built-in Map class. Use SvelteMap instead.',\n\t\t\tmutableSetUsed: 'Found a mutable instance of the built-in Set class. Use SvelteSet instead.',\n\t\t\tmutableURLUsed: 'Found a mutable instance of the built-in URL class. Use SvelteURL instead.',\n\t\t\tmutableURLSearchParamsUsed:\n\t\t\t\t'Found a mutable instance of the built-in URLSearchParams class. Use SvelteURLSearchParams instead.'\n\t\t},\n\t\ttype: 'problem',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\tsvelteFileTypes: ['.svelte', '.svelte.[js|ts]']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst exportedVars: TSESTree.Node[] = [];\n\t\treturn {\n\t\t\t...(getSvelteContext(context)?.svelteFileType === '.svelte.[js|ts]' && {\n\t\t\t\tExportNamedDeclaration(node) {\n\t\t\t\t\tif (node.declaration !== null) {\n\t\t\t\t\t\texportedVars.push(node.declaration);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\t\t\tif (specifier.local.type !== 'Identifier') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst defs = findVariable(context, specifier.local)?.defs ?? [];\n\t\t\t\t\t\tfor (const def of defs) {\n\t\t\t\t\t\t\texportedVars.push(def.node);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tExportDefaultDeclaration(node) {\n\t\t\t\t\tif (node.declaration.type === 'Identifier') {\n\t\t\t\t\t\tconst defs = findVariable(context, node.declaration)?.defs ?? [];\n\t\t\t\t\t\tfor (const def of defs) {\n\t\t\t\t\t\t\texportedVars.push(def.node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\texportedVars.push(node.declaration);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t\t'Program:exit'() {\n\t\t\t\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\t\t\t\tfor (const { node, path } of referenceTracker.iterateGlobalReferences({\n\t\t\t\t\tDate: {\n\t\t\t\t\t\t[ReferenceTracker.CONSTRUCT]: true\n\t\t\t\t\t},\n\t\t\t\t\tMap: {\n\t\t\t\t\t\t[ReferenceTracker.CONSTRUCT]: true\n\t\t\t\t\t},\n\t\t\t\t\tSet: {\n\t\t\t\t\t\t[ReferenceTracker.CONSTRUCT]: true\n\t\t\t\t\t},\n\t\t\t\t\tURL: {\n\t\t\t\t\t\t[ReferenceTracker.CONSTRUCT]: true\n\t\t\t\t\t},\n\t\t\t\t\tURLSearchParams: {\n\t\t\t\t\t\t[ReferenceTracker.CONSTRUCT]: true\n\t\t\t\t\t}\n\t\t\t\t})) {\n\t\t\t\t\tconst messageId =\n\t\t\t\t\t\tpath[0] === 'Date'\n\t\t\t\t\t\t\t? 'mutableDateUsed'\n\t\t\t\t\t\t\t: path[0] === 'Map'\n\t\t\t\t\t\t\t\t? 'mutableMapUsed'\n\t\t\t\t\t\t\t\t: path[0] === 'Set'\n\t\t\t\t\t\t\t\t\t? 'mutableSetUsed'\n\t\t\t\t\t\t\t\t\t: path[0] === 'URL'\n\t\t\t\t\t\t\t\t\t\t? 'mutableURLUsed'\n\t\t\t\t\t\t\t\t\t\t: 'mutableURLSearchParamsUsed';\n\t\t\t\t\tfor (const exportedVar of exportedVars) {\n\t\t\t\t\t\tif (isIn(node, exportedVar)) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (path[0] === 'Date' && isDateMutable(referenceTracker, node as TSESTree.Expression)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tmessageId: 'mutableDateUsed',\n\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (path[0] === 'Map' && isMapMutable(referenceTracker, node as TSESTree.Expression)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tmessageId: 'mutableMapUsed',\n\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (path[0] === 'Set' && isSetMutable(referenceTracker, node as TSESTree.Expression)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tmessageId: 'mutableSetUsed',\n\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (path[0] === 'URL' && isURLMutable(referenceTracker, node as TSESTree.Expression)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tmessageId: 'mutableURLUsed',\n\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tpath[0] === 'URLSearchParams' &&\n\t\t\t\t\t\tisURLSearchParamsMutable(referenceTracker, node as TSESTree.Expression)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tmessageId: 'mutableURLSearchParamsUsed',\n\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\nfunction isDateMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {\n\treturn !referenceTracker\n\t\t.iteratePropertyReferences(ctorNode, {\n\t\t\tsetDate: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetFullYear: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetHours: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetMilliseconds: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetMinutes: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetMonth: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetSeconds: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetTime: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCDate: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCFullYear: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCHours: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCMilliseconds: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCMinutes: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCMonth: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetUTCSeconds: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsetYear: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t}\n\t\t})\n\t\t.next().done;\n}\n\nfunction isMapMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {\n\treturn !referenceTracker\n\t\t.iteratePropertyReferences(ctorNode, {\n\t\t\tclear: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tdelete: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tset: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t}\n\t\t})\n\t\t.next().done;\n}\n\nfunction isSetMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {\n\treturn !referenceTracker\n\t\t.iteratePropertyReferences(ctorNode, {\n\t\t\tadd: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tclear: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tdelete: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t}\n\t\t})\n\t\t.next().done;\n}\n\nfunction isURLMutable(referenceTracker: ReferenceTracker, ctorNode: TSESTree.Expression): boolean {\n\tfor (const { node } of referenceTracker.iteratePropertyReferences(ctorNode, {\n\t\thash: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\thost: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\thostname: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\thref: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\tpassword: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\tpathname: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\tport: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\tprotocol: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\tsearch: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t},\n\t\tusername: {\n\t\t\t[ReferenceTracker.READ]: true\n\t\t}\n\t})) {\n\t\tif (node.parent.type === 'AssignmentExpression' && node.parent.left === node) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isURLSearchParamsMutable(\n\treferenceTracker: ReferenceTracker,\n\tctorNode: TSESTree.Expression\n): boolean {\n\treturn !referenceTracker\n\t\t.iteratePropertyReferences(ctorNode, {\n\t\t\tappend: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tdelete: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tset: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t},\n\t\t\tsort: {\n\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t}\n\t\t})\n\t\t.next().done;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/prefer-writable-derived.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport { getScope } from '../utils/ast-utils.js';\nimport { VERSION as SVELTE_VERSION } from 'svelte/compiler';\nimport semver from 'semver';\n\n// Writable derived were introduced in Svelte 5.25.0\nconst shouldRun = semver.satisfies(SVELTE_VERSION, '>=5.25.0');\n\ntype ValidFunctionType = TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression;\ntype ValidFunction = ValidFunctionType & {\n\tbody: TSESTree.BlockStatement;\n};\n\ntype ValidAssignmentExpression = TSESTree.AssignmentExpression & {\n\toperator: '=';\n\tleft: TSESTree.Identifier;\n};\n\ntype ValidExpressionStatement = TSESTree.ExpressionStatement & {\n\texpression: ValidAssignmentExpression;\n};\n\nfunction isEffectOrEffectPre(node: TSESTree.CallExpression) {\n\tif (node.callee.type === 'Identifier') {\n\t\treturn node.callee.name === '$effect';\n\t}\n\tif (node.callee.type === 'MemberExpression') {\n\t\treturn (\n\t\t\tnode.callee.object.type === 'Identifier' &&\n\t\t\tnode.callee.object.name === '$effect' &&\n\t\t\tnode.callee.property.type === 'Identifier' &&\n\t\t\tnode.callee.property.name === 'pre'\n\t\t);\n\t}\n\n\treturn false;\n}\n\nfunction isValidFunctionArgument(argument: TSESTree.Node): argument is ValidFunction {\n\tif (\n\t\t(argument.type !== 'FunctionExpression' && argument.type !== 'ArrowFunctionExpression') ||\n\t\targument.params.length !== 0\n\t) {\n\t\treturn false;\n\t}\n\n\tif (argument.body.type !== 'BlockStatement') {\n\t\treturn false;\n\t}\n\n\treturn argument.body.body.length === 1;\n}\n\nfunction isValidAssignment(statement: TSESTree.Statement): statement is ValidExpressionStatement {\n\tif (statement.type !== 'ExpressionStatement') return false;\n\n\tconst { expression } = statement;\n\treturn (\n\t\texpression.type === 'AssignmentExpression' &&\n\t\texpression.operator === '=' &&\n\t\texpression.left.type === 'Identifier'\n\t);\n}\n\nfunction isStateVariable(init: TSESTree.Expression | null): init is TSESTree.CallExpression {\n\treturn (\n\t\tinit?.type === 'CallExpression' &&\n\t\tinit.callee.type === 'Identifier' &&\n\t\tinit.callee.name === '$state'\n\t);\n}\n\nexport default createRule('prefer-writable-derived', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Prefer using writable $derived instead of $state and $effect',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Prefer using writable $derived instead of $state and $effect',\n\t\t\tsuggestRewrite: 'Rewrite $state and $effect to $derived'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\trunes: [true, 'undetermined']\n\t\t\t}\n\t\t],\n\t\thasSuggestions: true\n\t},\n\tcreate(context) {\n\t\tif (!shouldRun) {\n\t\t\treturn {};\n\t\t}\n\t\treturn {\n\t\t\tCallExpression: (node: TSESTree.CallExpression) => {\n\t\t\t\tif (!isEffectOrEffectPre(node) || node.arguments.length !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst argument = node.arguments[0];\n\t\t\t\tif (!isValidFunctionArgument(argument)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst statement = argument.body.body[0];\n\t\t\t\tif (!isValidAssignment(statement)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { left, right } = statement.expression;\n\t\t\t\tconst scope = getScope(context, statement);\n\t\t\t\tconst reference = scope.references.find(\n\t\t\t\t\t(ref) => ref.identifier.type === 'Identifier' && ref.identifier.name === left.name\n\t\t\t\t);\n\n\t\t\t\tconst def = reference?.resolved?.defs?.[0];\n\t\t\t\tif (!def || def.type !== 'Variable' || def.node.type !== 'VariableDeclarator') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { init } = def.node;\n\t\t\t\tif (!isStateVariable(init)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: def.node,\n\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessageId: 'suggestRewrite',\n\t\t\t\t\t\t\tfix: (fixer) => {\n\t\t\t\t\t\t\t\tconst rightCode = context.sourceCode.getText(right);\n\t\t\t\t\t\t\t\treturn [fixer.replaceText(init, `$derived(${rightCode})`), fixer.remove(node)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/reference-helpers/svelte-store.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { Variable } from '@typescript-eslint/scope-manager';\nimport { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport type { RuleContext } from '../../types.js';\nimport type { TS, TSTools } from '../../utils/ts-utils/index.js';\nimport { getTypeScriptTools } from '../../utils/ts-utils/index.js';\nimport { findVariable, getParent } from '../../utils/ast-utils.js';\n\ntype StoreName = 'writable' | 'readable' | 'derived';\n\n/** Extract 'svelte/store' references */\nexport function* extractStoreReferences(\n\tcontext: RuleContext,\n\tstoreNames: StoreName[] = ['writable', 'readable', 'derived']\n): Generator<{ node: TSESTree.CallExpression; name: string }, void> {\n\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\tfor (const { node, path } of referenceTracker.iterateEsmReferences({\n\t\t'svelte/store': {\n\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\twritable: {\n\t\t\t\t[ReferenceTracker.CALL]: storeNames.includes('writable')\n\t\t\t},\n\t\t\treadable: {\n\t\t\t\t[ReferenceTracker.CALL]: storeNames.includes('readable')\n\t\t\t},\n\t\t\tderived: {\n\t\t\t\t[ReferenceTracker.CALL]: storeNames.includes('derived')\n\t\t\t}\n\t\t}\n\t})) {\n\t\tyield {\n\t\t\tnode: node as TSESTree.CallExpression,\n\t\t\tname: path[path.length - 1]\n\t\t};\n\t}\n}\n\nexport type StoreChecker = (\n\tnode: TSESTree.Expression,\n\toptions?: { consistent?: boolean }\n) => boolean;\ntype StoreCheckerWithOptions = (\n\tnode: TSESTree.Expression,\n\toptions: { consistent: boolean }\n) => boolean;\n\n/**\n * Creates a function that checks whether the given expression node is a store instance or not.\n */\nexport function createStoreChecker(context: RuleContext): StoreChecker {\n\tconst tools = getTypeScriptTools(context);\n\tconst checker = tools ? createStoreCheckerForTS(tools) : createStoreCheckerForES(context);\n\n\treturn (node, options) =>\n\t\tchecker(node, {\n\t\t\tconsistent: options?.consistent ?? false\n\t\t});\n}\n\n/**\n * Creates a function that checks whether the given expression node is a store instance or not, for EcmaScript.\n */\nfunction createStoreCheckerForES(context: RuleContext): StoreCheckerWithOptions {\n\tconst storeVariables = new Map<Variable, { const: boolean }>();\n\tfor (const { node } of extractStoreReferences(context)) {\n\t\tconst parent = getParent(node);\n\t\tif (!parent || parent.type !== 'VariableDeclarator' || parent.id.type !== 'Identifier') {\n\t\t\tcontinue;\n\t\t}\n\t\tconst decl = getParent(parent);\n\t\tif (!decl || decl.type !== 'VariableDeclaration') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst variable = findVariable(context, parent.id);\n\t\tif (variable) {\n\t\t\tstoreVariables.set(variable, { const: decl.kind === 'const' });\n\t\t}\n\t}\n\n\treturn (node, options) => {\n\t\tif (node.type !== 'Identifier' || node.name.startsWith('$')) {\n\t\t\treturn false;\n\t\t}\n\t\tconst variable = findVariable(context, node);\n\t\tif (!variable) {\n\t\t\treturn false;\n\t\t}\n\t\tconst info = storeVariables.get(variable);\n\t\tif (!info) {\n\t\t\treturn false;\n\t\t}\n\t\treturn options.consistent ? info.const : true;\n\t};\n}\n\n/**\n * Creates a function that checks whether the given expression node is a store instance or not, for TypeScript.\n */\nfunction createStoreCheckerForTS(tools: TSTools): StoreCheckerWithOptions {\n\tconst { service } = tools;\n\tconst checker = service.program.getTypeChecker();\n\tconst tsNodeMap = service.esTreeNodeToTSNodeMap;\n\n\treturn (node, options) => {\n\t\tconst tsNode = tsNodeMap.get(node);\n\t\tif (!tsNode) {\n\t\t\treturn false;\n\t\t}\n\t\tconst type = checker.getTypeAtLocation(tsNode);\n\n\t\treturn isStoreType(checker.getApparentType(type));\n\n\t\t/**\n\t\t * Checks whether the given type is a store or not\n\t\t */\n\t\tfunction isStoreType(type: TS.Type): boolean {\n\t\t\treturn eachTypeCheck(type, options, (type) => {\n\t\t\t\tconst subscribe = type.getProperty('subscribe');\n\t\t\t\tif (!subscribe) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst subscribeType = checker.getTypeOfSymbolAtLocation(subscribe, tsNode!);\n\t\t\t\treturn isStoreSubscribeSignatureType(subscribeType);\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the given type is a store's subscribe or not\n\t\t */\n\t\tfunction isStoreSubscribeSignatureType(type: TS.Type): boolean {\n\t\t\treturn eachTypeCheck(type, options, (type) => {\n\t\t\t\tfor (const signature of type.getCallSignatures()) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tsignature.parameters.length >= 2 &&\n\t\t\t\t\t\tmaybeFunctionSymbol(signature.parameters[0]) &&\n\t\t\t\t\t\tmaybeFunctionSymbol(signature.parameters[1])\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the given symbol maybe function param or not\n\t\t */\n\t\tfunction maybeFunctionSymbol(param: TS.Symbol): boolean {\n\t\t\tconst type: TS.Type | undefined = checker.getApparentType(\n\t\t\t\tchecker.getTypeOfSymbolAtLocation(param, tsNode!)\n\t\t\t);\n\t\t\treturn maybeFunctionType(type);\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the given type is maybe function param or not\n\t\t */\n\t\tfunction maybeFunctionType(type: TS.Type): boolean {\n\t\t\treturn eachTypeCheck(type, { consistent: false }, (type) => {\n\t\t\t\treturn type.getCallSignatures().length > 0;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Check the given type with the given check function.\n * For union types, `options.consistent: true` requires all types to pass the check function.\n * `options.consistent: false` considers a match if any type passes the check function.\n */\nfunction eachTypeCheck(\n\ttype: TS.Type,\n\toptions: { consistent: boolean },\n\tcheck: (t: TS.Type) => boolean\n): boolean {\n\tif (type.isUnion()) {\n\t\tif (options.consistent) {\n\t\t\treturn type.types.every((t) => eachTypeCheck(t, options, check));\n\t\t}\n\t\treturn type.types.some((t) => eachTypeCheck(t, options, check));\n\t}\n\treturn check(type);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-each-key.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\n\nexport default createRule('require-each-key', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require keyed `{#each}` block',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: { expectedKey: 'Each block should have a key' },\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteEachBlock(node: AST.SvelteEachBlock) {\n\t\t\t\t// No need a `key` if an each blocks without an item\n\t\t\t\t// see: https://svelte.dev/docs/svelte/each#Each-blocks-without-an-item\n\t\t\t\tif (node.context != null && node.key == null) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'expectedKey'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts",
    "content": "import { ReferenceTracker } from '@eslint-community/eslint-utils';\nimport { createRule } from '../utils/index.js';\nimport { getLangValue } from '../utils/ast-utils.js';\nimport type { TSESTree } from '@typescript-eslint/types';\n\nexport default createRule('require-event-dispatcher-types', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require type parameters for `createEventDispatcher`',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tmissingTypeParameter: `Type parameters missing for the \\`createEventDispatcher\\` function call.`\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tlet isTs = false;\n\t\treturn {\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tconst lang = getLangValue(node)?.toLowerCase();\n\t\t\t\tif (lang === 'ts' || lang === 'typescript') {\n\t\t\t\t\tisTs = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tif (!isTs) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst referenceTracker = new ReferenceTracker(context.sourceCode.scopeManager.globalScope!);\n\t\t\t\tfor (const { node: n } of referenceTracker.iterateEsmReferences({\n\t\t\t\t\tsvelte: {\n\t\t\t\t\t\t[ReferenceTracker.ESM]: true,\n\t\t\t\t\t\tcreateEventDispatcher: {\n\t\t\t\t\t\t\t[ReferenceTracker.CALL]: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})) {\n\t\t\t\t\tconst node = n as TSESTree.CallExpression;\n\t\t\t\t\tif (\n\t\t\t\t\t\t(node.typeArguments ??\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Support old typescript-eslint\n\t\t\t\t\t\t\t(node as any).typeParameters) === undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({ node, messageId: 'missingTypeParameter' });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-event-prefix.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport {\n\ttype TSTools,\n\tgetTypeScriptTools,\n\tisMethodSymbol,\n\tisPropertySignatureKind,\n\tisFunctionTypeKind,\n\tisMethodSignatureKind,\n\tisTypeReferenceKind,\n\tisIdentifierKind\n} from '../utils/ts-utils/index.js';\nimport type { Symbol, Type } from 'typescript';\nimport type { CallExpression } from 'estree';\n\nexport default createRule('require-event-prefix', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require component event names to start with \"on\"',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\tconflictWithPrettier: false,\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tcheckAsyncFunctions: {\n\t\t\t\t\t\ttype: 'boolean'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tnonPrefixedFunction: 'Component event name must start with \"on\".'\n\t\t},\n\t\ttype: 'suggestion',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\tsvelteFileTypes: ['.svelte']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tconst tsTools = getTypeScriptTools(context);\n\t\tif (!tsTools) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst checkAsyncFunctions = context.options[0]?.checkAsyncFunctions ?? false;\n\n\t\treturn {\n\t\t\tCallExpression(node) {\n\t\t\t\tconst propsType = getPropsType(node, tsTools);\n\t\t\t\tif (propsType === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfor (const property of propsType.getProperties()) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tisFunctionLike(property, tsTools) &&\n\t\t\t\t\t\t!property.getName().startsWith('on') &&\n\t\t\t\t\t\t(checkAsyncFunctions || !isFunctionAsync(property, tsTools))\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst declarationTsNode = property.getDeclarations()?.[0];\n\t\t\t\t\t\tconst declarationEstreeNode =\n\t\t\t\t\t\t\tdeclarationTsNode !== undefined\n\t\t\t\t\t\t\t\t? tsTools.service.tsNodeToESTreeNodeMap.get(declarationTsNode)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: declarationEstreeNode ?? node,\n\t\t\t\t\t\t\tmessageId: 'nonPrefixedFunction'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\nfunction getPropsType(node: CallExpression, tsTools: TSTools): Type | undefined {\n\tif (\n\t\tnode.callee.type !== 'Identifier' ||\n\t\tnode.callee.name !== '$props' ||\n\t\tnode.parent.type !== 'VariableDeclarator'\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst tsNode = tsTools.service.esTreeNodeToTSNodeMap.get(node.parent.id);\n\tif (tsNode === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn tsTools.service.program.getTypeChecker().getTypeAtLocation(tsNode);\n}\n\nfunction isFunctionLike(functionSymbol: Symbol, tsTools: TSTools): boolean {\n\treturn (\n\t\tisMethodSymbol(functionSymbol, tsTools.ts) ||\n\t\t(functionSymbol.valueDeclaration !== undefined &&\n\t\t\tisPropertySignatureKind(functionSymbol.valueDeclaration, tsTools.ts) &&\n\t\t\tfunctionSymbol.valueDeclaration.type !== undefined &&\n\t\t\tisFunctionTypeKind(functionSymbol.valueDeclaration.type, tsTools.ts))\n\t);\n}\n\nfunction isFunctionAsync(functionSymbol: Symbol, tsTools: TSTools): boolean {\n\treturn (\n\t\tfunctionSymbol.getDeclarations()?.some((declaration) => {\n\t\t\tif (!isMethodSignatureKind(declaration, tsTools.ts)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (declaration.type === undefined || !isTypeReferenceKind(declaration.type, tsTools.ts)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn (\n\t\t\t\tisIdentifierKind(declaration.type.typeName, tsTools.ts) &&\n\t\t\t\tdeclaration.type.typeName.escapedText === 'Promise'\n\t\t\t);\n\t\t}) ?? false\n\t);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-optimized-style-attribute.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { parseStyleAttributeValue } from '../utils/css-utils/index.js';\n\nexport default createRule('require-optimized-style-attribute', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require style attributes that can be optimized',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tshorthand: 'It cannot be optimized because style attribute is specified using shorthand.',\n\t\t\tcomment: 'It cannot be optimized because contains comments.',\n\t\t\tinterpolationKey:\n\t\t\t\t'It cannot be optimized because property of style declaration contain interpolation.',\n\t\t\tcomplex: 'It cannot be optimized because too complex.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteShorthandAttribute(node) {\n\t\t\t\tif (node.key.name !== 'style') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'shorthand'\n\t\t\t\t});\n\t\t\t},\n\t\t\tSvelteAttribute(node) {\n\t\t\t\tif (node.key.name !== 'style' || !node.value?.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst root = parseStyleAttributeValue(node, context);\n\t\t\t\tif (!root) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'complex'\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const child of root.nodes) {\n\t\t\t\t\tif (child.type === 'decl') {\n\t\t\t\t\t\tif (child.unknownInterpolations.length) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\tloc: child.loc,\n\t\t\t\t\t\t\t\tmessageId: 'complex'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (child.prop.interpolations.length) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\tloc: child.prop.loc,\n\t\t\t\t\t\t\t\tmessageId: 'interpolationKey'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (child.type === 'comment') {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tloc: child.loc,\n\t\t\t\t\t\t\tmessageId: 'comment'\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tloc: child.loc,\n\t\t\t\t\t\t\tmessageId: 'complex'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts",
    "content": "import { findVariableForReplacement } from '../utils/ast-utils.js';\nimport type { SuggestionReportDescriptor } from '../types.js';\nimport { createRule } from '../utils/index.js';\nimport { extractStoreReferences } from './reference-helpers/svelte-store.js';\n\nexport default createRule('require-store-callbacks-use-set-param', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'store callbacks must use `set` param',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: false\n\t\t},\n\t\thasSuggestions: true,\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'Store callbacks must use `set` param.',\n\t\t\tupdateParam: 'Rename parameter from {{oldName}} to `set`.',\n\t\t\taddParam: 'Add a `set` parameter.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tfor (const { node } of extractStoreReferences(context, ['readable', 'writable'])) {\n\t\t\t\t\tconst [_, fn] = node.arguments;\n\t\t\t\t\tif (!fn || (fn.type !== 'ArrowFunctionExpression' && fn.type !== 'FunctionExpression')) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst param = fn.params[0];\n\t\t\t\t\tif (!param || (param.type === 'Identifier' && param.name !== 'set')) {\n\t\t\t\t\t\tconst { hasConflict, variable } = findVariableForReplacement(\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tfn.body,\n\t\t\t\t\t\t\tparam ? param.name : null,\n\t\t\t\t\t\t\t'set'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst suggest: SuggestionReportDescriptor[] = [];\n\t\t\t\t\t\tif (!hasConflict) {\n\t\t\t\t\t\t\tif (param) {\n\t\t\t\t\t\t\t\tsuggest.push({\n\t\t\t\t\t\t\t\t\tmessageId: 'updateParam',\n\t\t\t\t\t\t\t\t\tdata: { oldName: param.name },\n\t\t\t\t\t\t\t\t\t*fix(fixer) {\n\t\t\t\t\t\t\t\t\t\tyield fixer.replaceText(param, 'set');\n\n\t\t\t\t\t\t\t\t\t\tif (variable) {\n\t\t\t\t\t\t\t\t\t\t\tfor (const ref of variable.references) {\n\t\t\t\t\t\t\t\t\t\t\t\tyield fixer.replaceText(ref.identifier, 'set');\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst token = context.sourceCode.getTokenBefore(fn.body, {\n\t\t\t\t\t\t\t\t\tfilter: (token) => token.type === 'Punctuator' && token.value === '(',\n\t\t\t\t\t\t\t\t\tincludeComments: false\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (token) {\n\t\t\t\t\t\t\t\t\tsuggest.push({\n\t\t\t\t\t\t\t\t\t\tmessageId: 'addParam',\n\t\t\t\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\t\t\t\treturn fixer.insertTextAfter(token, 'set');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: fn,\n\t\t\t\t\t\t\tloc: fn.loc,\n\t\t\t\t\t\t\tmessageId: 'unexpected',\n\t\t\t\t\t\t\tsuggest\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport { createStoreChecker } from './reference-helpers/svelte-store.js';\n\nexport default createRule('require-store-reactive-access', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'disallow to use of the store itself as an operand. Need to use $ prefix or get function.',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: true\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tusingRawStoreInText:\n\t\t\t\t'Use the $ prefix or the get function to access reactive values instead of accessing the raw store.'\n\t\t},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tif (!context.sourceCode.parserServices.isSvelte) {\n\t\t\treturn {};\n\t\t}\n\t\tconst isStore = createStoreChecker(context);\n\n\t\t/** Verify for expression node */\n\t\tfunction verifyExpression(\n\t\t\tnode: TSESTree.Expression | null | undefined,\n\t\t\toptions?: { disableFix?: boolean; consistent?: boolean }\n\t\t) {\n\t\t\tif (!node) return;\n\t\t\tif (isStore(node, { consistent: options?.consistent })) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'usingRawStoreInText',\n\t\t\t\t\tfix:\n\t\t\t\t\t\tnode.type === 'Identifier' && !options?.disableFix\n\t\t\t\t\t\t\t? (fixer) => fixer.insertTextBefore(node, '$')\n\t\t\t\t\t\t\t: null\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteMustacheTag(node) {\n\t\t\t\tif (canAcceptStoreMustache(node)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check for <p>{store}<p/>, etc.\n\t\t\t\tverifyExpression(node.expression);\n\t\t\t},\n\t\t\tSvelteShorthandAttribute(node) {\n\t\t\t\tif (canAcceptStoreAttributeElement(node.parent.parent)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check for <div {store} />\n\t\t\t\tverifyExpression(node.value, { disableFix: true });\n\t\t\t},\n\t\t\tSvelteSpreadAttribute(node) {\n\t\t\t\t// Check for <Foo {...store} />\n\t\t\t\tverifyExpression(node.argument);\n\t\t\t},\n\t\t\tSvelteDirective(node) {\n\t\t\t\tif (node.kind === 'Action' || node.kind === 'Animation' || node.kind === 'Transition') {\n\t\t\t\t\tif (node.key.name.type !== 'Identifier') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// Check for <button use:store />, <div animate:store />, or <div transition:store />\n\t\t\t\t\tverifyExpression(node.key.name);\n\t\t\t\t} else if (node.kind === 'Binding') {\n\t\t\t\t\tif (node.key.name.name !== 'this' && canAcceptStoreAttributeElement(node.parent.parent)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// Check for <input bind:value={ () => {}, (v) => {} } />\n\t\t\t\t\tif (node.expression?.type === 'SvelteFunctionBindingsExpression') {\n\t\t\t\t\t\tfor (const expr of node.expression.expressions) {\n\t\t\t\t\t\t\tverifyExpression(expr, {\n\t\t\t\t\t\t\t\tdisableFix: node.shorthand\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Check for <input bind:value={store} />\n\t\t\t\t\t\tverifyExpression(node.expression, {\n\t\t\t\t\t\t\tdisableFix: node.shorthand\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (node.kind === 'Class') {\n\t\t\t\t\t// Check for <div class:foo={store} />\n\t\t\t\t\tverifyExpression(node.expression, {\n\t\t\t\t\t\tdisableFix: node.shorthand,\n\t\t\t\t\t\tconsistent: true\n\t\t\t\t\t});\n\t\t\t\t} else if (node.kind === 'EventHandler') {\n\t\t\t\t\t// Check for <button on:click={store} />\n\t\t\t\t\tverifyExpression(node.expression);\n\t\t\t\t}\n\t\t\t},\n\t\t\tSvelteStyleDirective(node) {\n\t\t\t\tif (node.shorthand && node.key.name.type === 'Identifier') {\n\t\t\t\t\t// Check for <div style:color />\n\t\t\t\t\tverifyExpression(node.key.name, {\n\t\t\t\t\t\tdisableFix: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// The longform has already been checked in SvelteMustacheTag\n\t\t\t},\n\t\t\tSvelteSpecialDirective(node) {\n\t\t\t\tif (node.kind === 'this') {\n\t\t\t\t\t// Check for <button this={store} />\n\t\t\t\t\tverifyExpression(node.expression);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'SvelteIfBlock, SvelteAwaitBlock'(node: AST.SvelteIfBlock | AST.SvelteAwaitBlock) {\n\t\t\t\t// Check for {#if store}, {#await store}\n\t\t\t\tverifyExpression(node.expression, {\n\t\t\t\t\tconsistent: true\n\t\t\t\t});\n\t\t\t},\n\t\t\tSvelteEachBlock(node) {\n\t\t\t\t// Check for {#each store}\n\t\t\t\tverifyExpression(node.expression);\n\t\t\t},\n\t\t\t['IfStatement, WhileStatement, DoWhileStatement, ConditionalExpression, ForStatement'](\n\t\t\t\tnode:\n\t\t\t\t\t| TSESTree.IfStatement\n\t\t\t\t\t| TSESTree.WhileStatement\n\t\t\t\t\t| TSESTree.DoWhileStatement\n\t\t\t\t\t| TSESTree.ConditionalExpression\n\t\t\t\t\t| TSESTree.ForStatement\n\t\t\t) {\n\t\t\t\t// Check for `if (store)`, `while (store)`, `do {} while (store)`,\n\t\t\t\t//   `store ? a : b`, `for (;store;)`\n\t\t\t\tverifyExpression(node.test, {\n\t\t\t\t\tconsistent: true\n\t\t\t\t});\n\t\t\t},\n\t\t\t'ForInStatement, ForOfStatement'(node: TSESTree.ForInStatement | TSESTree.ForOfStatement) {\n\t\t\t\t// Check for `for (let foo of store)`, `for (let foo in store)`\n\t\t\t\tverifyExpression(node.right);\n\t\t\t},\n\t\t\tSwitchStatement(node: TSESTree.SwitchStatement) {\n\t\t\t\t// Check for `switch (store)`\n\t\t\t\tverifyExpression(node.discriminant);\n\t\t\t},\n\t\t\t'CallExpression, NewExpression'(node: TSESTree.CallExpression) {\n\t\t\t\tif (node.callee.type === 'Super') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check for `store()`\n\t\t\t\tverifyExpression(node.callee);\n\t\t\t},\n\t\t\tUnaryExpression(node: TSESTree.UnaryExpression) {\n\t\t\t\t// Check for `-store`, `+store`, `!store`, `~store`, `typeof store`\n\t\t\t\tverifyExpression(node.argument, {\n\t\t\t\t\tconsistent: node.operator === '!' || node.operator === 'typeof'\n\t\t\t\t});\n\t\t\t},\n\t\t\t'UpdateExpression, SpreadElement'(node: TSESTree.UpdateExpression | TSESTree.SpreadElement) {\n\t\t\t\t// Check for `store++`, `store--`, `...store`\n\t\t\t\tverifyExpression(node.argument);\n\t\t\t},\n\t\t\tAssignmentExpression(node: TSESTree.AssignmentExpression) {\n\t\t\t\tif (node.operator !== '=') {\n\t\t\t\t\tif (node.left.type !== 'ObjectPattern' && node.left.type !== 'ArrayPattern') {\n\t\t\t\t\t\t// Check for `store += 1`\n\t\t\t\t\t\tverifyExpression(node.left);\n\t\t\t\t\t}\n\t\t\t\t\t// Check for `foo += store`\n\t\t\t\t\tverifyExpression(node.right);\n\t\t\t\t}\n\t\t\t},\n\t\t\tBinaryExpression(node: TSESTree.BinaryExpression) {\n\t\t\t\tif (node.left.type !== 'PrivateIdentifier') {\n\t\t\t\t\t// Check for `store+1`\n\t\t\t\t\tverifyExpression(node.left, {\n\t\t\t\t\t\tconsistent:\n\t\t\t\t\t\t\tnode.operator === '==' ||\n\t\t\t\t\t\t\tnode.operator === '!=' ||\n\t\t\t\t\t\t\tnode.operator === '===' ||\n\t\t\t\t\t\t\tnode.operator === '!=='\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Check for `1+store`\n\t\t\t\tverifyExpression(node.right, {\n\t\t\t\t\tconsistent:\n\t\t\t\t\t\tnode.operator === '==' ||\n\t\t\t\t\t\tnode.operator === '!=' ||\n\t\t\t\t\t\tnode.operator === '===' ||\n\t\t\t\t\t\tnode.operator === '!=='\n\t\t\t\t});\n\t\t\t},\n\t\t\tLogicalExpression(node: TSESTree.LogicalExpression) {\n\t\t\t\t// Check for `store && foo`\n\t\t\t\tverifyExpression(node.left, {\n\t\t\t\t\tconsistent: true\n\t\t\t\t});\n\t\t\t},\n\t\t\tTemplateLiteral(node: TSESTree.TemplateLiteral) {\n\t\t\t\tfor (const expr of node.expressions) {\n\t\t\t\t\t// Check for `${store}`\n\t\t\t\t\tverifyExpression(expr);\n\t\t\t\t}\n\t\t\t},\n\t\t\tTaggedTemplateExpression(node: TSESTree.TaggedTemplateExpression) {\n\t\t\t\t// Check for ` store`${foo}` `\n\t\t\t\tverifyExpression(node.tag);\n\t\t\t},\n\t\t\t'Property, PropertyDefinition, MethodDefinition'(\n\t\t\t\tnode: TSESTree.Property | TSESTree.PropertyDefinition | TSESTree.MethodDefinition\n\t\t\t) {\n\t\t\t\tif (node.key.type === 'PrivateIdentifier' || !node.computed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check for `{ [store]: foo}`\n\t\t\t\tverifyExpression(node.key);\n\t\t\t},\n\t\t\tImportExpression(node: TSESTree.ImportExpression) {\n\t\t\t\t// Check for `import(store)`\n\t\t\t\tverifyExpression(node.source);\n\t\t\t},\n\t\t\tAwaitExpression(node: TSESTree.AwaitExpression) {\n\t\t\t\t// Check for `await store`\n\t\t\t\tverifyExpression(node.argument, {\n\t\t\t\t\tconsistent: true\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Checks whether the given mustache node accepts a store instance.\n\t\t */\n\t\tfunction canAcceptStoreMustache(node: AST.SvelteMustacheTag) {\n\t\t\tif (node.parent.type !== 'SvelteAttribute') {\n\t\t\t\t// Text interpolation\n\t\t\t\t// e.g.\n\t\t\t\t// <p>{store}</p>\n\t\t\t\t// <input style:color={store} />\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst attr = node.parent;\n\t\t\tif (attr.value.length > 1) {\n\t\t\t\t// Template attribute value\n\t\t\t\t// e.g.\n\t\t\t\t// <Foo message=\"Hello {store}\" />\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (attr.key.name.startsWith('--')) {\n\t\t\t\t// --style-props\n\t\t\t\t// e.g.\n\t\t\t\t// <Foo --style-props={store} />\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst element = attr.parent.parent;\n\t\t\treturn canAcceptStoreAttributeElement(element);\n\t\t}\n\n\t\t/**\n\t\t * Checks whether the given element node accepts a store instance attribute.\n\t\t */\n\t\tfunction canAcceptStoreAttributeElement(\n\t\t\tnode: AST.SvelteElement | AST.SvelteScriptElement | AST.SvelteStyleElement\n\t\t) {\n\t\t\tif (node.type !== 'SvelteElement') {\n\t\t\t\t// Unknown. Within <script> or <style>\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnode.kind === 'html' ||\n\t\t\t\t(node.kind === 'special' && node.name.name === 'svelte:element')\n\t\t\t) {\n\t\t\t\t// Native HTML attribute value\n\t\t\t\t// e.g.\n\t\t\t\t// <div data-message={store} />\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Component props\n\t\t\t// e.g.\n\t\t\t// <Foo data={store} />\n\t\t\t// <Foo {store} />\n\t\t\treturn true;\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/require-stores-init.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { extractStoreReferences } from './reference-helpers/svelte-store.js';\n\nexport default createRule('require-stores-init', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require initial value in store',\n\t\t\tcategory: 'Best Practices',\n\t\t\t// Please refer to the following before setting recommended to true.\n\t\t\t// https://github.com/sveltejs/eslint-plugin-svelte/issues/1073\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tstoreDefaultValue: `Always set a default value for svelte stores.`\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tProgram() {\n\t\t\t\tfor (const { node, name } of extractStoreReferences(context)) {\n\t\t\t\t\tconst minArgs =\n\t\t\t\t\t\tname === 'writable' || name === 'readable' ? 1 : name === 'derived' ? 3 : 0;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.arguments.length >= minArgs ||\n\t\t\t\t\t\tnode.arguments.some((arg) => arg.type === 'SpreadElement')\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'storeDefaultValue'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport { getAttributeValueQuoteAndRange } from '../utils/ast-utils.js';\n\nexport default createRule('shorthand-attribute', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce use of shorthand syntax in attribute',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tprefer: { enum: ['always', 'never'] }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedShorthand: 'Expected shorthand attribute.',\n\t\t\texpectedRegular: 'Expected regular attribute syntax.'\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst always: boolean = context.options[0]?.prefer !== 'never';\n\n\t\treturn always\n\t\t\t? {\n\t\t\t\t\tSvelteAttribute(node) {\n\t\t\t\t\t\tif (node.value.length !== 1) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst value = node.value[0];\n\t\t\t\t\t\tif (value.type !== 'SvelteMustacheTag' || value.expression.type !== 'Identifier') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node.key.name === value.expression.name) {\n\t\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\tmessageId: 'expectedShorthand',\n\t\t\t\t\t\t\t\t*fix(fixer) {\n\t\t\t\t\t\t\t\t\tconst quoteAndRange = getAttributeValueQuoteAndRange(node, sourceCode);\n\t\t\t\t\t\t\t\t\tif (!quoteAndRange) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (quoteAndRange.quote === 'double' || quoteAndRange.quote === 'single') {\n\t\t\t\t\t\t\t\t\t\tyield fixer.removeRange([node.range[0], quoteAndRange.firstToken.range[1]]);\n\t\t\t\t\t\t\t\t\t\tyield fixer.remove(quoteAndRange.lastToken);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tyield fixer.removeRange([node.range[0], quoteAndRange.range[0]]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tSvelteShorthandAttribute(node) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'expectedRegular',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.insertTextBefore(node, `${node.key.name}=`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/shorthand-directive.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport { getAttributeValueQuoteAndRange } from '../utils/ast-utils.js';\n\nexport default createRule('shorthand-directive', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce use of shorthand syntax in directives',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: true\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tprefer: { enum: ['always', 'never'] }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedShorthand: 'Expected shorthand directive.',\n\t\t\texpectedRegular: 'Expected regular directive syntax.'\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst always: boolean = context.options[0]?.prefer !== 'never';\n\n\t\t/** Report for always */\n\t\tfunction reportForAlways(\n\t\t\tnode: AST.SvelteBindingDirective | AST.SvelteClassDirective | AST.SvelteStyleDirective\n\t\t) {\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'expectedShorthand',\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tconst quoteAndRange = getAttributeValueQuoteAndRange(node, sourceCode);\n\t\t\t\t\tif (quoteAndRange) {\n\t\t\t\t\t\tyield fixer.remove(sourceCode.getTokenBefore(quoteAndRange.firstToken)!);\n\t\t\t\t\t\tyield fixer.removeRange(quoteAndRange.range);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/** Report for never */\n\t\tfunction reportForNever(\n\t\t\tnode: AST.SvelteBindingDirective | AST.SvelteClassDirective | AST.SvelteStyleDirective\n\t\t) {\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'expectedRegular',\n\t\t\t\t*fix(fixer) {\n\t\t\t\t\tyield fixer.insertTextAfter(node.key.name, `={${node.key.name.name}}`);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteDirective(node) {\n\t\t\t\tif (node.kind !== 'Binding' && node.kind !== 'Class') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst expression = node.expression;\n\t\t\t\tif (\n\t\t\t\t\t!expression ||\n\t\t\t\t\texpression.type !== 'Identifier' ||\n\t\t\t\t\tnode.key.name.name !== expression.name\n\t\t\t\t) {\n\t\t\t\t\t// Cannot use shorthand\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (always) {\n\t\t\t\t\tif (node.shorthand) {\n\t\t\t\t\t\t// Use shorthand\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treportForAlways(node);\n\t\t\t\t} else {\n\t\t\t\t\tif (!node.shorthand) {\n\t\t\t\t\t\t// Use longform\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treportForNever(node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tSvelteStyleDirective(node) {\n\t\t\t\tif (always) {\n\t\t\t\t\tif (node.shorthand) {\n\t\t\t\t\t\t// Use shorthand\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (node.value.length !== 1) {\n\t\t\t\t\t\t// Cannot use shorthand\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst expression = node.value[0];\n\t\t\t\t\tif (\n\t\t\t\t\t\texpression.type !== 'SvelteMustacheTag' ||\n\t\t\t\t\t\texpression.expression.type !== 'Identifier' ||\n\t\t\t\t\t\texpression.expression.name !== node.key.name.name\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Cannot use shorthand\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treportForAlways(node);\n\t\t\t\t} else {\n\t\t\t\t\tif (!node.shorthand) {\n\t\t\t\t\t\t// Use longform\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treportForNever(node);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/sort-attributes.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport { getAttributeKeyText } from '../utils/ast-utils.js';\nimport { toRegExp } from '../utils/regexp.js';\n\ntype UserOrderObjectOption = {\n\tmatch: string | string[];\n\tsort: 'alphabetical' | 'ignore';\n};\ntype UserOrderOption = string | string[] | UserOrderObjectOption;\n\ntype ParsedOption = {\n\tignore: (keyText: string) => boolean;\n\tcompare: (a: string, b: string) => number;\n};\n\ntype CompiledOption = {\n\tmatch: (str: string) => boolean;\n\tsort: 'alphabetical' | 'ignore';\n};\n\ntype Attr = AST.SvelteStartTag['attributes'][number];\ntype HasKeyAttr = Exclude<Attr, AST.SvelteSpreadAttribute>;\n\nconst DEFAULT_ORDER: UserOrderOption[] = [\n\t// `this` property.\n\t'this',\n\t// `bind:this` directive.\n\t'bind:this',\n\t// `id` attribute.\n\t'id',\n\t// `name` attribute.\n\t'name',\n\t// `slot` attribute.\n\t'slot',\n\t// `--style-props` (Alphabetical order within the same group.)\n\t{ match: '/^--/u', sort: 'alphabetical' },\n\t// `style` attribute, and `style:` directives.\n\t['style', '/^style:/u'],\n\t// `class` attribute.\n\t'class',\n\t// `class:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^class:/u', sort: 'alphabetical' },\n\t// other attributes. (Alphabetical order within the same group.)\n\t{\n\t\tmatch: ['!/:/u', '!/^(?:this|id|name|style|class)$/u', '!/^--/u'],\n\t\tsort: 'alphabetical'\n\t},\n\t// `bind:` directives (other then `bind:this`), and `on:` directives.\n\t['/^bind:/u', '!bind:this', '/^on:/u'],\n\t// `use:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^use:/u', sort: 'alphabetical' },\n\t// `transition:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^transition:/u', sort: 'alphabetical' },\n\t// `in:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^in:/u', sort: 'alphabetical' },\n\t// `out:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^out:/u', sort: 'alphabetical' },\n\t// `animate:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^animate:/u', sort: 'alphabetical' },\n\t// `let:` directives. (Alphabetical order within the same group.)\n\t{ match: '/^let:/u', sort: 'alphabetical' }\n];\n\n/** Parse options */\nfunction parseOption(option?: { order: UserOrderOption[] }): ParsedOption {\n\tconst order: UserOrderOption[] = option?.order ?? DEFAULT_ORDER;\n\n\tconst compiled: CompiledOption[] = order.map(compileOption);\n\n\treturn {\n\t\tignore: (key) => {\n\t\t\treturn !compiled.some((c) => c.match(key));\n\t\t},\n\t\tcompare: (a, b) => {\n\t\t\tfor (const c of compiled) {\n\t\t\t\tconst matchA = c.match(a);\n\t\t\t\tconst matchB = c.match(b);\n\t\t\t\tif (matchA && matchB) {\n\t\t\t\t\tif (c.sort === 'alphabetical') {\n\t\t\t\t\t\treturn a === b ? 0 : a < b ? -1 : 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif (matchA) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif (matchB) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new Error('Illegal state');\n\t\t}\n\t};\n}\n\n/** Compile order option */\nfunction compileOption(option: UserOrderOption): CompiledOption {\n\tconst cache: Record<string, boolean> = {};\n\tconst compiled = compileOptionWithoutCache(option);\n\n\treturn {\n\t\tmatch: (str) => {\n\t\t\tif (cache[str] != null) return cache[str];\n\t\t\treturn (cache[str] = compiled.match(str));\n\t\t},\n\t\tsort: compiled.sort\n\t};\n\n\t/** Compile order option without cache */\n\tfunction compileOptionWithoutCache(option: UserOrderOption): CompiledOption {\n\t\tif (typeof option === 'string') {\n\t\t\tconst match = compileMatcher([option]);\n\t\t\treturn { match, sort: 'ignore' };\n\t\t}\n\t\tif (Array.isArray(option)) {\n\t\t\tconst match = compileMatcher(option);\n\t\t\treturn { match, sort: 'ignore' };\n\t\t}\n\t\tconst { match } = compileOptionWithoutCache(option.match);\n\t\treturn { match, sort: option.sort || 'ignore' };\n\t}\n}\n\n/** Compile matcher */\nfunction compileMatcher(pattern: string[]): (str: string) => boolean {\n\tconst rules: { negative: boolean; match: (str: string) => boolean }[] = [];\n\tfor (const p of pattern) {\n\t\tlet negative: boolean, patternStr: string;\n\t\tif (p.startsWith('!')) {\n\t\t\t// If there is `!` at the beginning, it will be parsed with a negative pattern.\n\t\t\tnegative = true;\n\t\t\tpatternStr = p.substring(1);\n\t\t} else {\n\t\t\tnegative = false;\n\t\t\tpatternStr = p;\n\t\t}\n\t\tconst regex = toRegExp(patternStr);\n\t\trules.push({ negative, match: (str) => regex.test(str) });\n\t}\n\treturn (str) => {\n\t\t// If the first rule is a negative pattern, they are considered to match if they do not match that pattern.\n\t\tlet result = Boolean(rules[0]?.negative);\n\t\tfor (const { negative, match } of rules) {\n\t\t\tif (result === !negative) {\n\t\t\t\t// Even if it matches, the result does not change, so skip it.\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (match(str)) {\n\t\t\t\tresult = !negative;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n}\n\nexport default createRule('sort-attributes', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce order of attributes',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\torder: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tanyOf: [\n\t\t\t\t\t\t\t\t{ type: 'string' },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tuniqueItems: true,\n\t\t\t\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\t\t\tmatch: {\n\t\t\t\t\t\t\t\t\t\t\tanyOf: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ type: 'string' },\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tuniqueItems: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\tminItems: 1\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\t\t\t\t\tenum: ['alphabetical', 'ignore']\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\trequired: ['match', 'sort'],\n\t\t\t\t\t\t\t\t\tadditionalProperties: false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tuniqueItems: true,\n\t\t\t\t\t\tadditionalItems: false\n\t\t\t\t\t},\n\t\t\t\t\talphabetical: { type: 'boolean' }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\tshouldBefore: \"Attribute '{{currentKey}}' should go before '{{prevKey}}'.\"\n\t\t},\n\t\ttype: 'layout',\n\t\tfixable: 'code'\n\t},\n\tcreate(context) {\n\t\tconst option = parseOption(context.options[0]);\n\n\t\tconst cacheKeyText = new Map<HasKeyAttr, string>();\n\n\t\t/** Get key text */\n\t\tfunction getKeyText(node: HasKeyAttr) {\n\t\t\tconst k = cacheKeyText.get(node);\n\t\t\tif (k != null) return k;\n\n\t\t\tconst result = getAttributeKeyText(node, context);\n\t\t\tcacheKeyText.set(node, result);\n\t\t\treturn result;\n\t\t}\n\n\t\t/** Report */\n\t\tfunction report(node: HasKeyAttr, previousNode: HasKeyAttr) {\n\t\t\tconst currentKey = getKeyText(node);\n\t\t\tconst prevKey = getKeyText(previousNode);\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'shouldBefore',\n\t\t\t\tdata: {\n\t\t\t\t\tcurrentKey,\n\t\t\t\t\tprevKey\n\t\t\t\t},\n\n\t\t\t\tfix(fixer) {\n\t\t\t\t\tconst attributes = node.parent.attributes;\n\n\t\t\t\t\tconst previousNodes = attributes.slice(\n\t\t\t\t\t\tattributes.indexOf(previousNode),\n\t\t\t\t\t\tattributes.indexOf(node)\n\t\t\t\t\t);\n\t\t\t\t\tconst moveNodes = [node, ...previousNodes];\n\t\t\t\t\tconst sourceCode = context.sourceCode;\n\t\t\t\t\treturn moveNodes.map((moveNode, index) => {\n\t\t\t\t\t\tconst text = sourceCode.getText(moveNode);\n\t\t\t\t\t\treturn fixer.replaceText(previousNodes[index] || node, text);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks whether have a spread attribute between the node and the previous node.\n\t\t */\n\t\tfunction hasSpreadAttribute(\n\t\t\tnode: AST.SvelteAttribute,\n\t\t\tpreviousNode: HasKeyAttr\n\t\t): node is AST.SvelteAttribute {\n\t\t\tconst attributes = node.parent.attributes;\n\t\t\tconst previousNodes = attributes.slice(\n\t\t\t\tattributes.indexOf(previousNode),\n\t\t\t\tattributes.indexOf(node)\n\t\t\t);\n\t\t\treturn previousNodes.some((a) => a.type === 'SvelteSpreadAttribute');\n\t\t}\n\n\t\t/**\n\t\t * Verify the order for which the spread attribute exists.\n\t\t */\n\t\tfunction verifyForSpreadAttributeExist(node: AST.SvelteAttribute) {\n\t\t\tconst previousNodes: HasKeyAttr[] = [];\n\t\t\tconst attributes = node.parent.attributes;\n\t\t\tfor (const previousNode of attributes.slice(0, attributes.indexOf(node)).reverse()) {\n\t\t\t\tif (previousNode.type === 'SvelteSpreadAttribute') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tpreviousNodes.unshift(previousNode);\n\t\t\t}\n\t\t\tconst key = getKeyText(node);\n\t\t\tconst invalidPreviousNode = previousNodes.find((previousNode) => {\n\t\t\t\tconst prevKey = getKeyText(previousNode);\n\t\t\t\tif (option.ignore(prevKey)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn option.compare(prevKey, key) > 0;\n\t\t\t});\n\n\t\t\tif (invalidPreviousNode) {\n\t\t\t\treport(node, invalidPreviousNode);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteStartTag(node) {\n\t\t\t\tconst validPreviousNodes: HasKeyAttr[] = [];\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tif (attr.type === 'SvelteSpreadAttribute') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst key = getKeyText(attr);\n\t\t\t\t\tif (option.ignore(key)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst invalidPreviousNode = validPreviousNodes.find(\n\t\t\t\t\t\t(previousNode) => option.compare(getKeyText(previousNode), key) > 0\n\t\t\t\t\t);\n\t\t\t\t\tif (invalidPreviousNode) {\n\t\t\t\t\t\tif (attr.type !== 'SvelteAttribute' || !hasSpreadAttribute(attr, invalidPreviousNode)) {\n\t\t\t\t\t\t\treport(attr, invalidPreviousNode);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Verify the order for which the spread attribute exists.\n\t\t\t\t\t\t\tverifyForSpreadAttributeExist(attr);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalidPreviousNodes.push(attr);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/spaced-html-comment.ts",
    "content": "import { createRule } from '../utils/index.js';\n\nexport default createRule('spaced-html-comment', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'enforce consistent spacing after the `<!--` and before the `-->` in a HTML comment',\n\t\t\tcategory: 'Stylistic Issues',\n\t\t\trecommended: false,\n\t\t\tconflictWithPrettier: false\n\t\t},\n\t\tfixable: 'whitespace',\n\t\tschema: [\n\t\t\t{\n\t\t\t\tenum: ['always', 'never']\n\t\t\t}\n\t\t],\n\t\tmessages: {\n\t\t\texpectedSpaceBefore: \"Expected space or tab before '-->' in comment.\",\n\t\t\texpectedSpaceAfter: \"Expected space or tab after '<!--' in comment.\",\n\t\t\tunexpectedSpaceBefore: \"Unexpected space or tab before '-->' in comment.\",\n\t\t\tunexpectedSpaceAfter: \"Unexpected space or tab after '<!--' in comment.\"\n\t\t},\n\t\ttype: 'layout'\n\t},\n\tcreate(context) {\n\t\t// Unless the first option is never, require a space\n\t\tconst requireSpace = context.options[0] !== 'never';\n\n\t\treturn {\n\t\t\tSvelteHTMLComment(node) {\n\t\t\t\tif (!node.value.trim()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (requireSpace) {\n\t\t\t\t\tif (/^\\S/u.test(node.value)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'expectedSpaceAfter',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.insertTextBeforeRange([node.range[0] + 4, node.range[1]], ' ');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (/\\S$/u.test(node.value)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'expectedSpaceBefore',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.insertTextAfterRange([node.range[0], node.range[1] - 3], ' ');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst beginSpaces = /^[^\\S\\n\\r]/u.exec(node.value)?.[0];\n\t\t\t\t\tif (beginSpaces) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'unexpectedSpaceAfter',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.removeRange([\n\t\t\t\t\t\t\t\t\tnode.range[0] + 4,\n\t\t\t\t\t\t\t\t\tnode.range[0] + 4 + beginSpaces.length\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst endSpaces = /(?<=\\S)[^\\S\\n\\r]$/u.exec(node.value)?.[0];\n\t\t\t\t\tif (endSpaces) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'unexpectedSpaceBefore',\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.removeRange([node.range[1] - 3 - endSpaces.length, node.range[1] - 3]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/system.ts",
    "content": "import { getShared } from '../shared/index.js';\nimport { createRule } from '../utils/index.js';\nimport { isRegExp, toRegExp } from '../utils/regexp.js';\n\nexport default createRule('system', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'system rule for working this plugin',\n\t\t\tcategory: 'System',\n\t\t\trecommended: 'base'\n\t\t},\n\t\tschema: [],\n\t\tmessages: {},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst shared = getShared(context.filename);\n\t\tif (!shared) return {};\n\n\t\tconst directives = shared.newCommentDirectives({\n\t\t\truleId: 'svelte/system'\n\t\t});\n\n\t\tconst ignoreWarnings = context.settings?.svelte?.ignoreWarnings;\n\t\tif (ignoreWarnings && !Array.isArray(ignoreWarnings)) {\n\t\t\tcontext.report({\n\t\t\t\tloc: { line: 1, column: 0 },\n\t\t\t\tmessage: 'The `settings.svelte.ignoreWarnings` must be an array.'\n\t\t\t});\n\t\t\treturn {};\n\t\t}\n\t\tconst ignoreTests: ((ruleId: string) => boolean)[] = [];\n\t\tfor (const ignoreWarning of Array.isArray(ignoreWarnings) ? ignoreWarnings : []) {\n\t\t\tif (typeof ignoreWarning !== 'string') {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: { line: 1, column: 0 },\n\t\t\t\t\tmessage: 'The array element in the `settings.svelte.ignoreWarnings` must be a string.'\n\t\t\t\t});\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tif (isRegExp(ignoreWarning)) {\n\t\t\t\tconst regexp = toRegExp(ignoreWarning);\n\t\t\t\tignoreTests.push((ruleId) => regexp.test(ruleId));\n\t\t\t} else {\n\t\t\t\tignoreTests.push((ruleId) => ruleId === ignoreWarning);\n\t\t\t}\n\t\t}\n\n\t\t/** Checks wether given rule is ignore rule or not */\n\t\tfunction isIgnoreRule(ruleId: string): boolean {\n\t\t\treturn ignoreTests.some((test) => test(ruleId));\n\t\t}\n\n\t\tdirectives.disableBlock({ line: 1, column: 0 }, isIgnoreRule, {\n\t\t\tloc: { line: 1, column: 0 }\n\t\t});\n\t\treturn {\n\t\t\tSvelteScriptElement(node) {\n\t\t\t\tdirectives.enableBlock(node.startTag.loc.end, isIgnoreRule, {\n\t\t\t\t\tloc: node.startTag.loc.end\n\t\t\t\t});\n\t\t\t\tif (node.endTag) {\n\t\t\t\t\tdirectives.disableBlock(node.endTag.loc.start, isIgnoreRule, {\n\t\t\t\t\t\tloc: node.endTag.loc.start\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/valid-compile.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport type { SvelteCompileWarnings, Warning } from '../shared/svelte-compile-warns/index.js';\nimport { getSvelteCompileWarnings } from '../shared/svelte-compile-warns/index.js';\nimport type { Position } from 'svelte-eslint-parser/lib/ast/common.js';\n\nconst ignores: string[] = ['missing-declaration'] as const;\n\nconst unusedSelectorWarnings: string[] = ['css_unused_selector', 'css-unused-selector'] as const;\n\nfunction isGlobalStyleNode(\n\tglobalStyleRanges: [Position, Position][],\n\tstart?: Position,\n\tend?: Position\n) {\n\tif (start == null || end == null) {\n\t\treturn false;\n\t}\n\treturn globalStyleRanges.some(([rangeStart, rangeEnd]) => {\n\t\treturn (\n\t\t\t(rangeStart.line < start.line ||\n\t\t\t\t(rangeStart.line === start.line && rangeStart.column <= start.column)) &&\n\t\t\t(end.line < rangeEnd.line || (end.line === rangeEnd.line && end.column <= rangeEnd.column))\n\t\t);\n\t});\n}\n\nexport default createRule('valid-compile', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow warnings when compiling.',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tignoreWarnings: { type: 'boolean' }\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t],\n\t\tmessages: {},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tif (!sourceCode.parserServices.isSvelte) {\n\t\t\treturn {};\n\t\t}\n\t\tconst { onwarn, warningFilter } =\n\t\t\tsourceCode.parserServices.svelteParseContext?.svelteConfig ?? {};\n\n\t\tconst transform: (warning: Warning) => Warning | null = warningFilter\n\t\t\t? (warning) => {\n\t\t\t\t\tif (!warning.code) return warning;\n\t\t\t\t\treturn warningFilter(warning) ? warning : null;\n\t\t\t\t}\n\t\t\t: onwarn\n\t\t\t\t? (warning) => {\n\t\t\t\t\t\tif (!warning.code) return warning;\n\t\t\t\t\t\tlet result: Warning | null = null;\n\t\t\t\t\t\tonwarn(warning, (reportWarn) => (result = reportWarn));\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t: (warning) => warning;\n\n\t\tconst ignoreWarnings = Boolean(context.options[0]?.ignoreWarnings);\n\t\tconst globalStyleRanges: [Position, Position][] = [];\n\n\t\t/**\n\t\t * report\n\t\t */\n\t\tfunction report({ warnings, kind }: SvelteCompileWarnings) {\n\t\t\tfor (const warn of warnings) {\n\t\t\t\tif (\n\t\t\t\t\twarn.code &&\n\t\t\t\t\t(ignores.includes(warn.code) ||\n\t\t\t\t\t\t(isGlobalStyleNode(globalStyleRanges, warn.start, warn.end) &&\n\t\t\t\t\t\t\tunusedSelectorWarnings.includes(warn.code)))\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst reportWarn = kind === 'warn' ? transform(warn) : warn;\n\t\t\t\tif (!reportWarn) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: {\n\t\t\t\t\t\tstart: reportWarn.start || reportWarn.end || { line: 1, column: 0 },\n\t\t\t\t\t\tend: reportWarn.end || reportWarn.start || { line: 1, column: 0 }\n\t\t\t\t\t},\n\t\t\t\t\tmessage: `${reportWarn.message}${reportWarn.code ? `(${reportWarn.code})` : ''}`\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tSvelteStyleElement(node) {\n\t\t\t\tconst { attributes } = node.startTag;\n\t\t\t\tfor (const attr of attributes) {\n\t\t\t\t\tif (attr.type === 'SvelteAttribute' && attr.key.name === 'global') {\n\t\t\t\t\t\tglobalStyleRanges.push([node.loc.start, node.loc.end]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tconst result = getSvelteCompileWarnings(context);\n\t\t\t\tif (ignoreWarnings && result.kind === 'warn') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treport(result);\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/valid-each-key.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport { createRule } from '../utils/index.js';\nimport { getScope } from '../utils/ast-utils.js';\n\nexport default createRule('valid-each-key', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'enforce keys to use variables defined in the `{#each}` block',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tkeyUseEachVars: 'Expected key to use the variables which are defined by the `{#each}` block.'\n\t\t},\n\t\ttype: 'suggestion'\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tSvelteEachBlock(node: AST.SvelteEachBlock) {\n\t\t\t\tif (node.key == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst scope = getScope(context, node.key);\n\t\t\t\tfor (const variable of scope.variables) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!variable.defs.some(\n\t\t\t\t\t\t\t(def) =>\n\t\t\t\t\t\t\t\t(node.context &&\n\t\t\t\t\t\t\t\t\tnode.context.range[0] <= def.name.range[0] &&\n\t\t\t\t\t\t\t\t\tdef.name.range[1] <= node.context.range[1]) ||\n\t\t\t\t\t\t\t\t(node.index &&\n\t\t\t\t\t\t\t\t\tnode.index.range[0] <= def.name.range[0] &&\n\t\t\t\t\t\t\t\t\tdef.name.range[1] <= node.index.range[1]) ||\n\t\t\t\t\t\t\t\t(node.expression &&\n\t\t\t\t\t\t\t\t\tnode.expression.range[0] <= def.name.range[0] &&\n\t\t\t\t\t\t\t\t\tdef.name.range[1] <= node.expression.range[1])\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// It's not an iteration variable.\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const reference of variable.references) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnode.key.range[0] <= reference.identifier.range[0] &&\n\t\t\t\t\t\t\treference.identifier.range[1] <= node.key.range[1]\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// A variable is used in the key.\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: node.key,\n\t\t\t\t\tmessageId: 'keyUseEachVars'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport { createRule } from '../utils/index.js';\nimport type { RuleContext } from '../types.js';\nimport { getSvelteVersion } from '../utils/svelte-context.js';\n\nconst EXPECTED_PROP_NAMES = ['data', 'errors', 'form', 'params', 'snapshot'];\nconst EXPECTED_PROP_NAMES_SVELTE5 = [...EXPECTED_PROP_NAMES, 'children'];\n\nfunction checkProp(\n\tnode: TSESTree.VariableDeclarator,\n\tcontext: RuleContext,\n\texpectedPropNames: string[]\n) {\n\tif (node.id.type !== 'ObjectPattern') return;\n\tfor (const p of node.id.properties) {\n\t\tif (\n\t\t\tp.type === 'Property' &&\n\t\t\tp.key.type === 'Identifier' &&\n\t\t\t!expectedPropNames.includes(p.key.name)\n\t\t) {\n\t\t\tcontext.report({\n\t\t\t\tnode: p.key,\n\t\t\t\tloc: p.key.loc,\n\t\t\t\tmessageId: 'unexpected'\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction isModuleScript(node: AST.SvelteAttribute) {\n\t// <script context=\"module\">\n\tif (\n\t\tnode.key.name === 'context' &&\n\t\tnode.value.some((v) => v.type === 'SvelteLiteral' && v.value === 'module')\n\t) {\n\t\treturn true;\n\t}\n\n\t// <script module>\n\tif (node.key.name === 'module' && node.value.length === 0) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport default createRule('valid-prop-names-in-kit-pages', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'disallow props other than data or errors in SvelteKit page components.',\n\t\t\tcategory: 'SvelteKit',\n\t\t\trecommended: true\n\t\t},\n\t\tschema: [],\n\t\tmessages: {\n\t\t\tunexpected: 'disallow props other than data or errors in SvelteKit page components.'\n\t\t},\n\t\ttype: 'problem',\n\t\tconditions: [\n\t\t\t{\n\t\t\t\tsvelteKitFileTypes: ['+page.svelte', '+error.svelte', '+layout.svelte']\n\t\t\t}\n\t\t]\n\t},\n\tcreate(context) {\n\t\tlet isScript = false;\n\t\tconst isSvelte5 = getSvelteVersion() === '5';\n\t\tconst expectedPropNames = isSvelte5 ? EXPECTED_PROP_NAMES_SVELTE5 : EXPECTED_PROP_NAMES;\n\t\treturn {\n\t\t\t// <script>\n\t\t\t'Program > SvelteScriptElement > SvelteStartTag': (node: AST.SvelteStartTag) => {\n\t\t\t\t// except for <script context=\"module\">\n\t\t\t\tisScript = !node.attributes.some((a) => a.type === 'SvelteAttribute' && isModuleScript(a));\n\t\t\t},\n\n\t\t\t// </script>\n\t\t\t'Program > SvelteScriptElement:exit': () => {\n\t\t\t\tisScript = false;\n\t\t\t},\n\n\t\t\t// Svelte3,4\n\t\t\t'ExportNamedDeclaration > VariableDeclaration > VariableDeclarator': (\n\t\t\t\tnode: TSESTree.VariableDeclarator\n\t\t\t) => {\n\t\t\t\tif (!isScript) return;\n\n\t\t\t\t// export let foo\n\t\t\t\tif (node.id.type === 'Identifier') {\n\t\t\t\t\tif (!expectedPropNames.includes(node.id.name)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\t\tmessageId: 'unexpected'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// export let { xxx, yyy } = zzz\n\t\t\t\tcheckProp(node, context, expectedPropNames);\n\t\t\t},\n\n\t\t\t// Svelte5\n\t\t\t// let { foo, bar } = $props();\n\t\t\t'VariableDeclaration > VariableDeclarator': (node: TSESTree.VariableDeclarator) => {\n\t\t\t\tif (!isScript) return;\n\t\t\t\tif (\n\t\t\t\t\tnode.init?.type !== 'CallExpression' ||\n\t\t\t\t\tnode.init.callee?.type !== 'Identifier' ||\n\t\t\t\t\tnode.init.callee?.name !== '$props'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcheckProp(node, context, expectedPropNames);\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/rules/valid-style-parse.ts",
    "content": "import { createRule } from '../utils/index.js';\nimport path from 'path';\n\nexport default createRule('valid-style-parse', {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'require valid style element parsing',\n\t\t\tcategory: 'Possible Errors',\n\t\t\trecommended: false\n\t\t},\n\t\tschema: [],\n\t\tmessages: {},\n\t\ttype: 'problem'\n\t},\n\tcreate(context) {\n\t\tconst sourceCode = context.sourceCode;\n\t\tif (!sourceCode.parserServices.isSvelte) {\n\t\t\treturn {};\n\t\t}\n\t\tconst cwd = `${context.cwd ?? process.cwd()}${path.sep}`;\n\n\t\treturn {\n\t\t\tSvelteStyleElement(node) {\n\t\t\t\tconst styleContext = sourceCode.parserServices.getStyleContext!();\n\t\t\t\tif (styleContext.status === 'parse-error') {\n\t\t\t\t\t// This will replace backslashes to forward slashes only\n\t\t\t\t\t// \tif Node.js reports Windows style path separators\n\t\t\t\t\tlet message = styleContext.error.message.replace(cwd, '');\n\t\t\t\t\tif (path.sep === '\\\\') message = message.replace(/\\\\/g, '/');\n\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\tmessage: `Error parsing style element. Error message: \"${message}\"`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (styleContext.status === 'unknown-lang') {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\tmessage: `Found unsupported style element language \"${styleContext.sourceLang}\"`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/comment-directives.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { Linter } from 'eslint';\nconst COMPUTED = Symbol();\nconst ALL = Symbol();\n\ntype Define = {\n\tloc: AST.Position;\n};\ntype Block = {\n\tloc: AST.Position;\n\trule: (ruleId: string) => boolean;\n\tkind: 'enable' | 'disable';\n\tdefine: Define;\n\ttargetRule: string | typeof ALL;\n};\ntype Line = {\n\tline: number;\n\trule: (ruleId: string) => boolean;\n\tdefine: Define;\n};\nexport class CommentDirectives {\n\tprivate readonly reportUnusedDisableDirectives: boolean;\n\n\tprivate readonly ruleId: string;\n\n\tprivate readonly lineDisableDirectives = new Map<string | typeof COMPUTED, Map<number, Line[]>>();\n\n\tprivate readonly blockDirectives = new Map<string | typeof COMPUTED, Block[]>();\n\n\tpublic constructor(options: { reportUnusedDisableDirectives?: boolean; ruleId: string }) {\n\t\tthis.ruleId = options.ruleId;\n\t\tthis.reportUnusedDisableDirectives = Boolean(options?.reportUnusedDisableDirectives);\n\t}\n\n\tpublic filterMessages(messages: Linter.LintMessage[]): Linter.LintMessage[] {\n\t\tconst { lineDisableDirectives, blockDirectives, reportUnusedDisableDirectives } = this;\n\t\tconst usedDirectives = new Set<Line | Block>();\n\t\tif (reportUnusedDisableDirectives) {\n\t\t\tconst allBlocks = [];\n\t\t\tfor (const bs of blockDirectives.values()) {\n\t\t\t\tfor (const b of bs) {\n\t\t\t\t\tallBlocks.push(b);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst blockEnableDirectives = new Set<Block>();\n\t\t\tfor (const block of allBlocks.sort((a, b) => comparePos(b.loc, a.loc))) {\n\t\t\t\tif (block.kind === 'enable') {\n\t\t\t\t\tif (block.targetRule === ALL) {\n\t\t\t\t\t\tblockEnableDirectives.clear();\n\t\t\t\t\t}\n\t\t\t\t\tblockEnableDirectives.add(block);\n\t\t\t\t} else if (block.kind === 'disable') {\n\t\t\t\t\tif (block.targetRule === ALL) {\n\t\t\t\t\t\tfor (const b of blockEnableDirectives) {\n\t\t\t\t\t\t\tusedDirectives.add(b);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblockEnableDirectives.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const b of [...blockEnableDirectives]) {\n\t\t\t\t\t\t\tif (block.targetRule === b.targetRule || b.targetRule === ALL) {\n\t\t\t\t\t\t\t\tusedDirectives.add(b);\n\t\t\t\t\t\t\t\tblockEnableDirectives.delete(b);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet filteredMessages = messages.filter(isEnable);\n\n\t\tif (reportUnusedDisableDirectives) {\n\t\t\tconst usedDirectiveKeys = new Set([...usedDirectives].map((d) => locToKey(d.define.loc)));\n\t\t\tfilteredMessages = filteredMessages.filter((m) => {\n\t\t\t\tif (m.ruleId !== this.ruleId) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (usedDirectiveKeys.has(messageToKey(m))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\n\t\treturn filteredMessages;\n\n\t\t/** Checks wether given rule is enable */\n\t\tfunction isEnable(message: Linter.LintMessage) {\n\t\t\tif (!message.ruleId) {\n\t\t\t\t// Maybe fatal error\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const disableLines of getFromRule(lineDisableDirectives, message.ruleId)) {\n\t\t\t\tfor (const disableLine of disableLines.get(message.line) ?? []) {\n\t\t\t\t\tif (!disableLine.rule(message.ruleId)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tusedDirectives.add(disableLine);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst blocks = getFromRule(blockDirectives, message.ruleId)\n\t\t\t\t.reduce((p, c) => p.concat(c), [])\n\t\t\t\t.sort((a, b) => comparePos(b.loc, a.loc));\n\t\t\tfor (const block of blocks) {\n\t\t\t\tif (comparePos(message, block.loc) < 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!block.rule(message.ruleId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (block.kind === 'enable') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// block.kind === \"disable\"\n\t\t\t\tusedDirectives.add(block);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/** Compare locations */\n\t\tfunction comparePos(a: AST.Position, b: AST.Position) {\n\t\t\treturn a.line - b.line || a.column - b.column;\n\t\t}\n\t}\n\n\tpublic disableLine(\n\t\tline: number,\n\t\trule: string | ((ruleId: string) => boolean),\n\t\tdefine: Define\n\t): void {\n\t\tconst key = typeof rule === 'string' ? rule : COMPUTED;\n\n\t\tlet disableLines = this.lineDisableDirectives.get(key);\n\t\tif (!disableLines) {\n\t\t\tdisableLines = new Map();\n\t\t\tthis.lineDisableDirectives.set(key, disableLines);\n\t\t}\n\t\tlet disableLine = disableLines.get(line);\n\t\tif (!disableLine) {\n\t\t\tdisableLine = [];\n\t\t\tdisableLines.set(line, disableLine);\n\t\t}\n\n\t\tconst disable: Line = {\n\t\t\tline,\n\t\t\trule: typeof rule === 'string' ? (id) => id === rule : rule,\n\t\t\tdefine\n\t\t};\n\t\tdisableLine.push(disable);\n\t}\n\n\tpublic disableBlock(\n\t\tpos: AST.Position,\n\t\trule: string | ((ruleId: string) => boolean),\n\t\tdefine: Define\n\t): void {\n\t\tthis.block(pos, rule, define, 'disable');\n\t}\n\n\tpublic enableBlock(\n\t\tpos: AST.Position,\n\t\trule: string | ((ruleId: string) => boolean),\n\t\tdefine: Define\n\t): void {\n\t\tthis.block(pos, rule, define, 'enable');\n\t}\n\n\tprivate block(\n\t\tpos: AST.Position,\n\t\trule: string | ((ruleId: string) => boolean),\n\t\tdefine: Define,\n\t\tkind: 'disable' | 'enable'\n\t): void {\n\t\tconst key = typeof rule === 'string' ? rule : COMPUTED;\n\t\tlet blocks = this.blockDirectives.get(key);\n\t\tif (!blocks) {\n\t\t\tblocks = [];\n\t\t\tthis.blockDirectives.set(key, blocks);\n\t\t}\n\n\t\tconst disable: Block = {\n\t\t\tloc: pos,\n\t\t\trule: typeof rule === 'string' ? (id) => id === rule : rule,\n\t\t\tkind,\n\t\t\ttargetRule: typeof rule === 'string' ? rule : ALL,\n\t\t\tdefine\n\t\t};\n\t\tblocks.push(disable);\n\t}\n}\n\n/** Get the list of directives from given rule  */\nfunction getFromRule<E>(map: Map<string | typeof COMPUTED, E>, ruleId: string): E[] {\n\treturn [map.get(ruleId), map.get(COMPUTED)].filter((a): a is E => Boolean(a));\n}\n\n/**\n * Gets the key of location\n */\nfunction locToKey(location: AST.Position): string {\n\treturn `line:${location.line},column${location.column}`;\n}\n\n/**\n * Gets the key of message location\n */\nfunction messageToKey(message: Linter.LintMessage): string {\n\treturn `line:${message.line},column${\n\t\t// -1 because +1 by ESLint's `report-translator`.\n\t\tmessage.column - 1\n\t}`;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/index.ts",
    "content": "import { CommentDirectives } from './comment-directives.js';\n\nexport class Shared {\n\tpublic readonly commentDirectives: CommentDirectives[] = [];\n\n\tpublic newCommentDirectives(\n\t\toptions: ConstructorParameters<typeof CommentDirectives>[0]\n\t): CommentDirectives {\n\t\tconst directives = new CommentDirectives(options);\n\t\tthis.commentDirectives.push(directives);\n\t\treturn directives;\n\t}\n}\nconst sharedMap = new Map<string, Shared>();\n/** Start sharing and make the data available. */\nexport function beginShared(filename: string): void {\n\tsharedMap.set(filename, new Shared());\n}\n/** Get the shared data and end the sharing. */\nexport function terminateShared(filename: string): Shared | null {\n\tconst result = sharedMap.get(filename);\n\tsharedMap.delete(filename);\n\treturn result ?? null;\n}\n\n/** If sharing has started, get the shared data. */\nexport function getShared(filename: string): Shared | null {\n\treturn sharedMap.get(filename) ?? null;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/runes.ts",
    "content": "export const SVELTE_RUNES = new Set([\n\t'$state',\n\t'$derived',\n\t'$effect',\n\t'$props',\n\t'$bindable',\n\t'$inspect',\n\t'$host'\n]);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/extract-leading-comments.ts",
    "content": "import { isOpeningParenToken } from '@eslint-community/eslint-utils';\nimport type { AST } from 'svelte-eslint-parser';\nimport type { RuleContext } from '../../types.js';\nimport type { ASTNodeWithParent } from '../../types-for-node.js';\n\n/** Extract comments */\nexport function extractLeadingComments(\n\tcontext: RuleContext,\n\tnode: ASTNodeWithParent\n): (AST.Token | AST.Comment)[] {\n\tconst sourceCode = context.sourceCode;\n\tconst beforeToken = sourceCode.getTokenBefore(node, {\n\t\tincludeComments: false,\n\t\tfilter(token) {\n\t\t\tif (isOpeningParenToken(token)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst astToken = token as AST.Token;\n\t\t\tif (astToken.type === 'HTMLText') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn astToken.type !== 'HTMLComment';\n\t\t}\n\t});\n\tif (beforeToken) {\n\t\treturn sourceCode\n\t\t\t.getTokensBetween(beforeToken, node, { includeComments: true })\n\t\t\t.filter(isComment);\n\t}\n\treturn sourceCode.getTokensBefore(node, { includeComments: true }).filter(isComment);\n}\n\n/** Checks whether given token is comment token */\nfunction isComment(token: AST.Token | AST.Comment): boolean {\n\treturn token.type === 'HTMLComment' || token.type === 'Block' || token.type === 'Line';\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/ignore-comment.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { RuleContext } from '../../types.js';\n\nconst SVELTE_IGNORE_PATTERN = /^\\s*svelte-ignore\\s+/;\n\n/** Matches parenthetical notes in svelte-ignore comments, e.g. \"(because of reasons)\" */\nconst PARENTHETICAL_NOTE_PATTERN = /\\([^)]*\\)/gu;\n\n/**\n * Map of legacy code -> new code\n * See https://github.com/sveltejs/svelte/blob/c9202a889612df3c2fcb369096a5573668be99d6/packages/svelte/src/compiler/utils/extract_svelte_ignore.js#L6\n */\nconst V5_REPLACEMENTS: Record<string, string | undefined> = {\n\t'non-top-level-reactive-declaration': 'reactive_declaration_invalid_placement',\n\t'module-script-reactive-declaration': 'reactive_declaration_module_script',\n\t'empty-block': 'block_empty',\n\t'avoid-is': 'attribute_avoid_is',\n\t'invalid-html-attribute': 'attribute_invalid_property_name',\n\t'a11y-structure': 'a11y_figcaption_parent',\n\t'illegal-attribute-character': 'attribute_illegal_colon',\n\t'invalid-rest-eachblock-binding': 'bind_invalid_each_rest',\n\t'unused-export-let': 'export_let_unused'\n};\n\nexport type IgnoreItemWithoutCode = {\n\trange: [number, number];\n\tcode: null;\n\ttoken: AST.Token | AST.Comment;\n};\nexport type IgnoreItem = {\n\trange: [number, number];\n\tcode: string;\n\tcodeForV5: string; // Code targeting Svelte v5.\n\ttoken: AST.Token | AST.Comment;\n};\n\n/** Extract all svelte-ignore comment items */\nexport function getSvelteIgnoreItems(context: RuleContext): (IgnoreItem | IgnoreItemWithoutCode)[] {\n\tconst sourceCode = context.sourceCode;\n\n\tconst ignoreComments: (IgnoreItem | IgnoreItemWithoutCode)[] = [];\n\tfor (const comment of sourceCode.getAllComments()) {\n\t\tconst match = SVELTE_IGNORE_PATTERN.exec(comment.value);\n\t\tif (!match) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst codeListStart = match.index + match[0].length;\n\t\tconst codeList = comment.value.slice(codeListStart);\n\t\tif (hasMissingCodeIgnore(codeList)) {\n\t\t\tignoreComments.push({\n\t\t\t\trange: comment.range,\n\t\t\t\tcode: null,\n\t\t\t\ttoken: comment\n\t\t\t});\n\t\t} else {\n\t\t\tconst ignores = extractSvelteIgnore(comment.range[0] + 2, comment, codeList, codeListStart);\n\t\t\tif (ignores) {\n\t\t\t\tignoreComments.push(...ignores);\n\t\t\t}\n\t\t}\n\t}\n\tfor (const token of sourceCode.ast.tokens) {\n\t\tif (token.type === 'HTMLComment') {\n\t\t\tconst text = token.value.slice(4, -3);\n\t\t\tconst match = SVELTE_IGNORE_PATTERN.exec(text);\n\t\t\tif (!match) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst codeListStart = match.index + match[0].length;\n\t\t\tconst codeList = text.slice(codeListStart);\n\t\t\tif (hasMissingCodeIgnore(codeList)) {\n\t\t\t\tignoreComments.push({\n\t\t\t\t\trange: token.range,\n\t\t\t\t\tcode: null,\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst ignores = extractSvelteIgnore(token.range[0] + 4, token, codeList, codeListStart);\n\t\t\t\tif (ignores) {\n\t\t\t\t\tignoreComments.push(...ignores);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tignoreComments.sort((a, b) => b.range[0] - a.range[0]);\n\treturn ignoreComments;\n}\n\n/** Extract svelte-ignore rule names */\nfunction extractSvelteIgnore(\n\tstartIndex: number,\n\ttoken: AST.Token | AST.Comment,\n\tcodeList: string,\n\tignoreStart: number\n): IgnoreItem[] | null {\n\tconst start = startIndex + ignoreStart;\n\tconst results: IgnoreItem[] = [];\n\t// Replace parenthetical notes (e.g., \"(because of reasons)\") with spaces of the same length\n\t// to preserve character positions while preventing note words from being treated as rule names.\n\tconst processedCodeList = codeList.replace(PARENTHETICAL_NOTE_PATTERN, (match) =>\n\t\t' '.repeat(match.length)\n\t);\n\tconst separatorPattern = /\\s*[\\s,]\\s*/g;\n\tconst separators = processedCodeList.matchAll(separatorPattern);\n\tlet lastSeparatorEnd = 0;\n\tfor (const separator of separators) {\n\t\tconst code = processedCodeList.slice(lastSeparatorEnd, separator.index);\n\t\tif (code) {\n\t\t\tresults.push({\n\t\t\t\tcode,\n\t\t\t\tcodeForV5: V5_REPLACEMENTS[code] || code.replace(/-/gu, '_'),\n\t\t\t\trange: [start + lastSeparatorEnd, start + separator.index],\n\t\t\t\ttoken\n\t\t\t});\n\t\t}\n\t\tlastSeparatorEnd = separator.index + separator[0].length;\n\t}\n\tif (results.length === 0) {\n\t\tconst code = processedCodeList;\n\t\tresults.push({\n\t\t\tcode,\n\t\t\tcodeForV5: V5_REPLACEMENTS[code] || code.replace(/-/gu, '_'),\n\t\t\trange: [start, start + code.length],\n\t\t\ttoken\n\t\t});\n\t}\n\n\treturn results;\n}\n\n/** Checks whether given comment has missing code svelte-ignore */\nfunction hasMissingCodeIgnore(codeList: string) {\n\treturn !codeList.replace(PARENTHETICAL_NOTE_PATTERN, '').trim();\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/index.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport * as compiler from 'svelte/compiler';\nimport type { SourceMapMappings } from '@jridgewell/sourcemap-codec';\nimport { decode } from '@jridgewell/sourcemap-codec';\nimport type { ASTNodeWithParent, RuleContext } from '../../types.js';\nimport { LinesAndColumns } from '../../utils/lines-and-columns.js';\nimport type { TransformResult } from './transform/types.js';\nimport { hasTypeScript, transform as transformWithTypescript } from './transform/typescript.js';\nimport { transform as transformWithBabel } from './transform/babel.js';\nimport { transform as transformWithPostCSS } from './transform/postcss.js';\nimport { transform as transformWithSass } from './transform/sass.js';\nimport { transform as transformWithLess } from './transform/less.js';\nimport { transform as transformWithStylus } from './transform/stylus.js';\nimport type { IgnoreItem } from './ignore-comment.js';\nimport { getSvelteIgnoreItems } from './ignore-comment.js';\nimport { extractLeadingComments } from './extract-leading-comments.js';\nimport { findAttribute, getLangValue } from '../../utils/ast-utils.js';\nimport { getSvelteVersion } from '../../utils/svelte-context.js';\nimport path from 'path';\nimport fs from 'fs';\n\ntype WarningTargetNode =\n\t| (AST.SvelteProgram & ASTNodeWithParent)\n\t| (AST.SvelteElement & ASTNodeWithParent)\n\t| (AST.SvelteStyleElement & ASTNodeWithParent)\n\t| (AST.SvelteScriptElement['body'][number] & ASTNodeWithParent);\ntype IgnoreTargetNode =\n\t| WarningTargetNode\n\t| (AST.SvelteIfBlock & ASTNodeWithParent)\n\t| (AST.SvelteKeyBlock & ASTNodeWithParent)\n\t| (AST.SvelteEachBlock & ASTNodeWithParent)\n\t| (AST.SvelteAwaitBlock & ASTNodeWithParent);\n\nconst STYLE_TRANSFORMS: Record<string, typeof transformWithPostCSS | undefined> = {\n\tpostcss: transformWithPostCSS,\n\tpcss: transformWithPostCSS,\n\tscss: (node, text, context) => transformWithSass(node, text, context, 'scss'),\n\tsass: (node, text, context) => transformWithSass(node, text, context, 'sass'),\n\tless: transformWithLess,\n\tstylus: transformWithStylus,\n\tstyl: transformWithStylus\n};\n\nconst CSS_WARN_CODES = new Set([\n\t'css-unused-selector',\n\t'css_unused_selector',\n\t'css-invalid-global',\n\t'css-invalid-global-selector'\n]);\nconst cacheAll = new WeakMap<AST.SvelteProgram, SvelteCompileWarnings>();\nexport type SvelteCompileWarnings = {\n\twarnings: Warning[];\n\tunusedIgnores: IgnoreItem[];\n\tkind: 'warn' | 'error';\n\tstripStyleElements: AST.SvelteStyleElement[];\n};\nexport type Loc = {\n\tstart?: {\n\t\tline: number;\n\t\tcolumn: number;\n\t\tcharacter: number;\n\t};\n\tend?: {\n\t\tline: number;\n\t\tcolumn: number;\n\t\tcharacter: number;\n\t};\n};\nexport type Warning = (\n\t| {\n\t\t\tcode: string;\n\t\t\tmessage: string;\n\t  }\n\t| {\n\t\t\tcode?: undefined;\n\t\t\tmessage: string;\n\t  }\n) &\n\tLoc;\n\n/**\n * Get svelte compile warnings\n */\nexport function getSvelteCompileWarnings(context: RuleContext): SvelteCompileWarnings {\n\tconst sourceCode = context.sourceCode;\n\tconst cache = cacheAll.get(sourceCode.ast);\n\tif (cache) {\n\t\treturn cache;\n\t}\n\tconst result = getSvelteCompileWarningsWithoutCache(context);\n\tcacheAll.set(sourceCode.ast, result);\n\treturn result;\n}\n\n/**\n * Get svelte compile warnings\n */\nfunction getSvelteCompileWarningsWithoutCache(context: RuleContext): SvelteCompileWarnings {\n\tconst sourceCode = context.sourceCode;\n\n\t// Process for styles\n\tconst styleElementsWithNotCSS = [...extractStyleElementsWithLangOtherThanCSS(context)];\n\tconst stripStyleElements: AST.SvelteStyleElement[] = [];\n\tconst transformResults: TransformResult[] = [];\n\tfor (const style of styleElementsWithNotCSS) {\n\t\tconst transform = STYLE_TRANSFORMS[style.lang];\n\t\tif (transform) {\n\t\t\tconst result = transform(style.node, context.sourceCode.text, context);\n\t\t\tif (result) {\n\t\t\t\ttransformResults.push(result);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tstripStyleElements.push(style.node);\n\t}\n\n\tconst stripStyleTokens = stripStyleElements.flatMap((e) => e.children);\n\tconst ignoreComments = getSvelteIgnoreItems(context).filter(\n\t\t(item): item is IgnoreItem => item.code != null\n\t);\n\n\tconst text = buildStrippedText(context, ignoreComments, stripStyleTokens);\n\n\ttransformResults.push(...transformScripts(context, text));\n\n\tif (!transformResults.length) {\n\t\tconst warnings = getWarningsFromCode(text, context);\n\t\treturn {\n\t\t\t...processIgnore(\n\t\t\t\twarnings.warnings,\n\t\t\t\twarnings.kind,\n\t\t\t\tstripStyleElements,\n\t\t\t\tignoreComments,\n\t\t\t\tcontext\n\t\t\t),\n\t\t\tkind: warnings.kind,\n\t\t\tstripStyleElements\n\t\t};\n\t}\n\n\tclass RemapContext {\n\t\tprivate originalStart = 0;\n\n\t\tprivate code = '';\n\n\t\tprivate locs: LinesAndColumns | null = null;\n\n\t\tprivate readonly mapIndexes: {\n\t\t\trange: [number, number];\n\t\t\tremap: (index: number) => number;\n\t\t}[] = [];\n\n\t\tpublic appendOriginal(endIndex: number) {\n\t\t\tconst codeStart = this.code.length;\n\t\t\tconst start = this.originalStart;\n\t\t\tthis.code += text.slice(start, endIndex);\n\t\t\tthis.originalStart = endIndex;\n\t\t\tconst offset = start - codeStart;\n\t\t\tthis.mapIndexes.push({\n\t\t\t\trange: [codeStart, this.code.length],\n\t\t\t\tremap(index) {\n\t\t\t\t\treturn index + offset;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tpublic postprocess(): string {\n\t\t\tthis.appendOriginal(text.length);\n\t\t\treturn this.code;\n\t\t}\n\n\t\tpublic appendTranspile(output: TransformResult) {\n\t\t\tconst endIndex: number = output.inputRange[1];\n\t\t\tconst codeStart = this.code.length;\n\t\t\tconst start = this.originalStart;\n\t\t\tconst inputText = text.slice(start, endIndex);\n\n\t\t\tconst outputText = `${output.output}\\n`;\n\n\t\t\tthis.code += outputText;\n\t\t\tthis.originalStart = endIndex;\n\n\t\t\tlet outputLocs: LinesAndColumns | null = null;\n\t\t\tlet inputLocs: LinesAndColumns | null = null;\n\t\t\tlet decoded: SourceMapMappings | null = null;\n\t\t\tthis.mapIndexes.push({\n\t\t\t\trange: [codeStart, this.code.length],\n\t\t\t\tremap: (index) => {\n\t\t\t\t\toutputLocs = outputLocs ?? new LinesAndColumns(outputText);\n\t\t\t\t\tinputLocs = inputLocs ?? new LinesAndColumns(inputText);\n\t\t\t\t\tconst outputCodePos = outputLocs.getLocFromIndex(index - codeStart);\n\t\t\t\t\tconst inputCodePos = remapPosition(outputCodePos);\n\t\t\t\t\treturn inputLocs.getIndexFromLoc(inputCodePos) + start;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/** Remapping source position */\n\t\t\tfunction remapPosition(pos: { line: number; column: number }): {\n\t\t\t\tline: number;\n\t\t\t\tcolumn: number;\n\t\t\t} {\n\t\t\t\tdecoded = decoded ?? decode(output.mappings);\n\n\t\t\t\tconst lineMaps = decoded[pos.line - 1];\n\n\t\t\t\tif (!lineMaps?.length) {\n\t\t\t\t\tfor (let line = pos.line - 1; line >= 0; line--) {\n\t\t\t\t\t\tconst prevLineMaps = decoded[line];\n\t\t\t\t\t\tif (prevLineMaps?.length) {\n\t\t\t\t\t\t\tconst [, , sourceCodeLine, sourceCodeColumn] = prevLineMaps[prevLineMaps.length - 1];\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tline: sourceCodeLine! + 1,\n\t\t\t\t\t\t\t\tcolumn: sourceCodeColumn!\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn { line: -1, column: -1 };\n\t\t\t\t}\n\n\t\t\t\tfor (let index = 0; index < lineMaps.length - 1; index++) {\n\t\t\t\t\tconst [generateCodeColumn, , sourceCodeLine, sourceCodeColumn] = lineMaps[index];\n\t\t\t\t\tif (generateCodeColumn <= pos.column && pos.column < lineMaps[index + 1][0]) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tline: sourceCodeLine! + 1,\n\t\t\t\t\t\t\tcolumn: sourceCodeColumn! + (pos.column - generateCodeColumn)\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst [generateCodeColumn, , sourceCodeLine, sourceCodeColumn] =\n\t\t\t\t\tlineMaps[lineMaps.length - 1];\n\t\t\t\treturn {\n\t\t\t\t\tline: sourceCodeLine! + 1,\n\t\t\t\t\tcolumn: sourceCodeColumn! + (pos.column - generateCodeColumn)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tpublic remapLocs(points: Loc): Loc {\n\t\t\tconst mapIndexes = this.mapIndexes;\n\t\t\tconst locs = (this.locs = this.locs ?? new LinesAndColumns(this.code));\n\t\t\tlet start: Loc['start'] | undefined = undefined;\n\t\t\tlet end: Loc['end'] | undefined = undefined;\n\t\t\tif (points.start) {\n\t\t\t\tconst index = locs.getIndexFromLoc(points.start);\n\t\t\t\tconst remapped = remapIndex(index);\n\t\t\t\tif (remapped) {\n\t\t\t\t\tstart = { ...sourceCode.getLocFromIndex(remapped), character: remapped };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (points.end) {\n\t\t\t\tconst index = locs.getIndexFromLoc(points.end);\n\t\t\t\tconst remapped = remapIndex(index - 1 /* include index */);\n\t\t\t\tif (remapped) {\n\t\t\t\t\tconst character = remapped + 1; /* restore */\n\t\t\t\t\tend = { ...sourceCode.getLocFromIndex(character), character };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { start, end };\n\n\t\t\t/** remap index */\n\t\t\tfunction remapIndex(index: number) {\n\t\t\t\tfor (const mapIndex of mapIndexes) {\n\t\t\t\t\tif (mapIndex.range[0] <= index && index < mapIndex.range[1]) {\n\t\t\t\t\t\treturn mapIndex.remap(index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst remapContext = new RemapContext();\n\n\tfor (const result of transformResults.sort((a, b) => a.inputRange[0] - b.inputRange[0])) {\n\t\tremapContext.appendOriginal(result.inputRange[0]);\n\t\tremapContext.appendTranspile(result);\n\t}\n\n\tconst code = remapContext.postprocess();\n\tconst baseWarnings = getWarningsFromCode(code, context);\n\n\tconst warnings: Warning[] = [];\n\tfor (const warn of baseWarnings.warnings) {\n\t\tlet loc: Loc | null = null;\n\n\t\t/** Get re-mapped location */\n\t\t// eslint-disable-next-line func-style -- ignore\n\t\tconst getLoc = function getLoc() {\n\t\t\tif (loc) {\n\t\t\t\treturn loc;\n\t\t\t}\n\t\t\treturn (loc = remapContext.remapLocs(warn));\n\t\t};\n\n\t\twarnings.push({\n\t\t\tcode: warn.code,\n\t\t\tmessage: warn.message,\n\t\t\tget start() {\n\t\t\t\treturn getLoc().start;\n\t\t\t},\n\t\t\tget end() {\n\t\t\t\treturn getLoc().end;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn {\n\t\t...processIgnore(warnings, baseWarnings.kind, stripStyleElements, ignoreComments, context),\n\t\tkind: baseWarnings.kind,\n\t\tstripStyleElements\n\t};\n}\n\n/**\n * Extracts the style with the lang attribute other than CSS.\n */\nfunction* extractStyleElementsWithLangOtherThanCSS(context: RuleContext): Iterable<{\n\tnode: AST.SvelteStyleElement;\n\treadonly lang: string;\n}> {\n\tconst sourceCode = context.sourceCode;\n\tconst root = sourceCode.ast;\n\tfor (const node of root.body) {\n\t\tif (node.type === 'SvelteStyleElement') {\n\t\t\tconst lang = getLangValue(node);\n\t\t\tif (lang != null && lang.toLowerCase() !== 'css') {\n\t\t\t\tyield { node, lang: lang.toLowerCase() };\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Build the text stripped of tokens that are not needed for compilation.\n */\nfunction buildStrippedText(\n\tcontext: RuleContext,\n\tignoreComments: IgnoreItem[],\n\tstripStyleTokens: AST.SvelteText[]\n) {\n\tconst sourceCode = context.sourceCode;\n\tconst baseText = sourceCode.text;\n\n\tconst stripTokens = new Set([...ignoreComments.map((item) => item.token), ...stripStyleTokens]);\n\tif (!stripTokens.size) {\n\t\treturn baseText;\n\t}\n\n\tlet code = '';\n\tlet start = 0;\n\tfor (const token of [...stripTokens].sort((a, b) => a.range[0] - b.range[0])) {\n\t\tcode +=\n\t\t\tbaseText.slice(start, token.range[0]) +\n\t\t\tbaseText.slice(...token.range).replace(/[^\\t\\n\\r ]/g, ' ');\n\t\tstart = token.range[1];\n\t}\n\tcode += baseText.slice(start);\n\treturn code;\n}\n\n/** Returns the result of transforming the required script for the transform. */\nfunction* transformScripts(context: RuleContext, text: string) {\n\tconst transform = isUseTypeScript(context)\n\t\t? hasTypeScript(context)\n\t\t\t? transformWithTypescript\n\t\t\t: transformWithBabel\n\t\t: isUseBabel(context)\n\t\t\t? transformWithBabel\n\t\t\t: null;\n\n\tconst sourceCode = context.sourceCode;\n\tif (transform) {\n\t\tconst root = sourceCode.ast;\n\t\tfor (const node of root.body) {\n\t\t\tif (node.type === 'SvelteScriptElement') {\n\t\t\t\tconst result = transform(node, text, context);\n\t\t\t\tif (result) {\n\t\t\t\t\tyield result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction isCustomElement(program: AST.SvelteProgram) {\n\treturn program.body.some((body) => {\n\t\tif (body.type !== 'SvelteElement' || body.kind !== 'special') {\n\t\t\treturn false;\n\t\t}\n\t\tif (body.name.name !== 'svelte:options') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn Boolean(findAttribute(body, 'tag')) || Boolean(findAttribute(body, 'customElement'));\n\t});\n}\n\nconst svelteVersion = getSvelteVersion();\n\n/**\n * Get compile warnings\n */\nfunction getWarningsFromCode(\n\tcode: string,\n\tcontext: RuleContext\n): {\n\twarnings: Warning[];\n\tkind: 'warn' | 'error';\n} {\n\ttry {\n\t\tconst svelteConfig = context.sourceCode.parserServices.svelteParseContext?.svelteConfig;\n\t\tconst compilerOptions = svelteConfig?.compilerOptions ?? {};\n\t\tconst result = compiler.compile(code, {\n\t\t\t...(svelteVersion === '5'\n\t\t\t\t? {\n\t\t\t\t\t\texperimental: {\n\t\t\t\t\t\t\tasync: compilerOptions.experimental?.async\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\tgenerate: false,\n\t\t\t...(isCustomElement(context.sourceCode.ast) ? { customElement: true } : {})\n\t\t});\n\n\t\treturn { warnings: result.warnings as Warning[], kind: 'warn' };\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\t} catch (e: any) {\n\t\treturn {\n\t\t\twarnings: [\n\t\t\t\t{\n\t\t\t\t\tcode: e.code,\n\t\t\t\t\tmessage: e.message,\n\t\t\t\t\tstart: e.start,\n\t\t\t\t\tend: e.end\n\t\t\t\t}\n\t\t\t],\n\t\t\tkind: 'error'\n\t\t};\n\t}\n}\n\n/** Ignore process */\nfunction processIgnore(\n\twarnings: Warning[],\n\tkind: 'warn' | 'error',\n\tstripStyleElements: AST.SvelteStyleElement[],\n\tignoreComments: IgnoreItem[],\n\tcontext: RuleContext\n): {\n\twarnings: Warning[];\n\tunusedIgnores: IgnoreItem[];\n} {\n\tif (kind === 'error') {\n\t\treturn {\n\t\t\twarnings,\n\t\t\tunusedIgnores: ignoreComments\n\t\t};\n\t}\n\tconst sourceCode = context.sourceCode;\n\tconst unusedIgnores = new Set(ignoreComments);\n\tconst remainingWarning = new Set(warnings);\n\n\tfor (const warning of warnings) {\n\t\tif (!warning.code) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet node: IgnoreTargetNode | null = getWarningNode(warning);\n\t\twhile (node) {\n\t\t\tfor (const comment of extractLeadingComments(context, node).reverse()) {\n\t\t\t\tconst ignoreItem = ignoreComments.find(\n\t\t\t\t\t(item) =>\n\t\t\t\t\t\titem.token === comment &&\n\t\t\t\t\t\t(item.code === warning.code || item.codeForV5 === warning.code)\n\t\t\t\t);\n\t\t\t\tif (ignoreItem) {\n\t\t\t\t\tunusedIgnores.delete(ignoreItem);\n\t\t\t\t\tremainingWarning.delete(warning);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode = getIgnoreParent(node);\n\t\t}\n\t}\n\n\t// Stripped styles are ignored from compilation and cannot determine css errors.\n\tfor (const node of stripStyleElements) {\n\t\tfor (const comment of extractLeadingComments(context, node).reverse()) {\n\t\t\tconst ignoreItem = ignoreComments.find(\n\t\t\t\t(item) =>\n\t\t\t\t\titem.token === comment &&\n\t\t\t\t\t(CSS_WARN_CODES.has(item.code) || CSS_WARN_CODES.has(item.codeForV5))\n\t\t\t);\n\t\t\tif (ignoreItem) {\n\t\t\t\tunusedIgnores.delete(ignoreItem);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\twarnings: [...remainingWarning],\n\t\tunusedIgnores: [...unusedIgnores]\n\t};\n\n\t/** Get ignore target parent node */\n\tfunction getIgnoreParent(node: IgnoreTargetNode): IgnoreTargetNode | null {\n\t\tif (\n\t\t\tnode.type !== 'SvelteElement' &&\n\t\t\tnode.type !== 'SvelteIfBlock' &&\n\t\t\tnode.type !== 'SvelteKeyBlock' &&\n\t\t\tnode.type !== 'SvelteEachBlock' &&\n\t\t\tnode.type !== 'SvelteAwaitBlock'\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst parent = node.parent;\n\t\tif (parent.type === 'SvelteElseBlock') {\n\t\t\treturn parent.parent; // SvelteIfBlock or SvelteEachBlock\n\t\t}\n\t\tif (\n\t\t\tparent.type === 'SvelteAwaitPendingBlock' ||\n\t\t\tparent.type === 'SvelteAwaitThenBlock' ||\n\t\t\tparent.type === 'SvelteAwaitCatchBlock'\n\t\t) {\n\t\t\treturn parent.parent; // SvelteAwaitBlock\n\t\t}\n\t\tif (\n\t\t\tparent.type !== 'SvelteElement' &&\n\t\t\tparent.type !== 'SvelteIfBlock' &&\n\t\t\tparent.type !== 'SvelteKeyBlock' &&\n\t\t\tparent.type !== 'SvelteEachBlock'\n\t\t\t// && parent.type !== \"SvelteAwaitBlock\"\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\treturn parent;\n\t}\n\n\t/** Get warning node */\n\tfunction getWarningNode(warning: Warning): WarningTargetNode | null {\n\t\tconst indexes = getWarningIndexes(warning);\n\t\tif (indexes.start != null) {\n\t\t\tconst node = getWarningTargetNodeFromIndex(indexes.start);\n\t\t\tif (node) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tif (indexes.end != null) {\n\t\t\t\tconst center = Math.floor(indexes.start + (indexes.end - indexes.start) / 2);\n\t\t\t\treturn getWarningTargetNodeFromIndex(center);\n\t\t\t}\n\t\t}\n\t\tif (indexes.end != null) {\n\t\t\treturn getWarningTargetNodeFromIndex(indexes.end);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Get warning target node from the given index\n\t */\n\tfunction getWarningTargetNodeFromIndex(index: number): WarningTargetNode | null {\n\t\tlet targetNode = sourceCode.getNodeByRangeIndex(index);\n\t\twhile (targetNode) {\n\t\t\tif (targetNode.type === 'SvelteElement' || targetNode.type === 'SvelteStyleElement') {\n\t\t\t\treturn targetNode;\n\t\t\t}\n\t\t\tif (targetNode.parent) {\n\t\t\t\tif (\n\t\t\t\t\ttargetNode.parent.type === 'Program' ||\n\t\t\t\t\ttargetNode.parent.type === 'SvelteScriptElement'\n\t\t\t\t) {\n\t\t\t\t\treturn targetNode as WarningTargetNode;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttargetNode = targetNode.parent || null;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Get warning index */\n\tfunction getWarningIndexes(warning: Warning) {\n\t\tconst start = warning.start && sourceCode.getIndexFromLoc(warning.start);\n\t\tconst end = warning.end && sourceCode.getIndexFromLoc(warning.end);\n\t\treturn { start, end };\n\t}\n}\n\n/**\n * Check if using TypeScript.\n */\nfunction isUseTypeScript(context: RuleContext) {\n\tconst sourceCode = context.sourceCode;\n\tif (sourceCode.parserServices.esTreeNodeToTSNodeMap) return true;\n\tconst root = sourceCode.ast;\n\n\tfor (const node of root.body) {\n\t\tif (node.type === 'SvelteScriptElement') {\n\t\t\tconst lang = getLangValue(node)?.toLowerCase();\n\t\t\tif (lang === 'ts' || lang === 'typescript') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Check if using Babel.\n */\nfunction isUseBabel(context: RuleContext) {\n\tconst parser = context.parserOptions?.parser;\n\tif (!parser) {\n\t\treturn false;\n\t}\n\tconst sourceCode = context.sourceCode;\n\tconst root = sourceCode.ast;\n\n\tlet scriptLang = 'js';\n\n\tfor (const node of root.body) {\n\t\tif (node.type === 'SvelteScriptElement') {\n\t\t\tconst lang = getLangValue(node)?.toLowerCase();\n\t\t\tif (lang === 'ts' || lang === 'typescript') {\n\t\t\t\tscriptLang = lang;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst parserName = getParserName(scriptLang, parser);\n\tif (!parserName) {\n\t\treturn false;\n\t}\n\tif (parserName === '@babel/eslint-parser') {\n\t\treturn true;\n\t}\n\tif (parserName.includes('@babel/eslint-parser')) {\n\t\tlet targetPath = parserName;\n\t\twhile (targetPath) {\n\t\t\tconst pkgPath = path.join(targetPath, 'package.json');\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))?.name === '@babel/eslint-parser';\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst parent = path.dirname(targetPath);\n\t\t\tif (targetPath === parent) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttargetPath = parent;\n\t\t}\n\t}\n\treturn false;\n\n\t/** Get script parser name */\n\tfunction getParserName(lang: string, parser: string | Record<string, string>): string | null {\n\t\tif (typeof parser === 'string') {\n\t\t\treturn parser;\n\t\t} else if (typeof parser === 'object') {\n\t\t\tconst name = parser[lang];\n\t\t\tif (typeof name === 'string') {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/babel.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type babelCore from '@babel/core';\nimport type { RuleContext } from '../../../types.js';\nimport type { TransformResult } from './types.js';\nimport { loadModule } from '../../../utils/load-module.js';\n\ntype BabelCore = typeof babelCore;\n/**\n * Transpile with babel\n */\nexport function transform(\n\tnode: AST.SvelteScriptElement,\n\ttext: string,\n\tcontext: RuleContext\n): TransformResult | null {\n\tconst babel = loadBabel(context);\n\tif (!babel) {\n\t\treturn null;\n\t}\n\tlet inputRange: AST.Range;\n\tif (node.endTag) {\n\t\tinputRange = [node.startTag.range[1], node.endTag.range[0]];\n\t} else {\n\t\tinputRange = [node.startTag.range[1], node.range[1]];\n\t}\n\tconst code = text.slice(...inputRange);\n\n\ttry {\n\t\tconst output = babel.transformSync(code, {\n\t\t\tsourceType: 'module',\n\t\t\tsourceMaps: true,\n\t\t\tminified: false,\n\t\t\tast: false,\n\t\t\tcode: true,\n\t\t\tcwd: context.cwd ?? process.cwd()\n\t\t});\n\t\tif (!output) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tinputRange,\n\t\t\toutput: output.code!,\n\t\t\tmappings: output.map!.mappings\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Check if project has Babel. */\nexport function hasBabel(context: RuleContext): boolean {\n\treturn Boolean(loadBabel(context));\n}\n\n/**\n * Load babel\n */\nfunction loadBabel(context: RuleContext): BabelCore | null {\n\treturn loadModule(context, '@babel/core');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/less.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type less from 'less';\nimport type { RuleContext } from '../../../types.js';\nimport type { TransformResult } from './types.js';\nimport { loadModule } from '../../../utils/load-module.js';\n\ntype Less = typeof less;\n/**\n * Transpile with less\n */\nexport function transform(\n\tnode: AST.SvelteStyleElement,\n\ttext: string,\n\tcontext: RuleContext\n): TransformResult | null {\n\tconst less = loadLess(context);\n\tif (!less) {\n\t\treturn null;\n\t}\n\tlet inputRange: AST.Range;\n\tif (node.endTag) {\n\t\tinputRange = [node.startTag.range[1], node.endTag.range[0]];\n\t} else {\n\t\tinputRange = [node.startTag.range[1], node.range[1]];\n\t}\n\tconst code = text.slice(...inputRange);\n\n\tconst filename = `${context.filename}.less`;\n\ttry {\n\t\tlet output: Awaited<ReturnType<Less['render']>> | undefined;\n\n\t\tless.render(\n\t\t\tcode,\n\t\t\t{\n\t\t\t\tsourceMap: {},\n\t\t\t\tsyncImport: true,\n\t\t\t\tfilename,\n\t\t\t\tlint: false\n\t\t\t},\n\t\t\t(_error, result) => {\n\t\t\t\toutput = result;\n\t\t\t}\n\t\t);\n\t\tif (!output) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tinputRange,\n\t\t\toutput: output.css,\n\t\t\tmappings: JSON.parse(output.map).mappings\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Load less\n */\nfunction loadLess(context: RuleContext): Less | null {\n\treturn loadModule(context, 'less');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/postcss.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport postcss from 'postcss';\nimport postcssLoadConfig from 'postcss-load-config';\nimport type { RuleContext } from '../../../types.js';\nimport type { TransformResult } from './types.js';\n\n/**\n * Transform with postcss\n */\nexport function transform(\n\tnode: AST.SvelteStyleElement,\n\ttext: string,\n\tcontext: RuleContext\n): TransformResult | null {\n\tconst postcssConfig = context.settings?.svelte?.compileOptions?.postcss;\n\tif (postcssConfig === false) {\n\t\treturn null;\n\t}\n\tlet inputRange: AST.Range;\n\tif (node.endTag) {\n\t\tinputRange = [node.startTag.range[1], node.endTag.range[0]];\n\t} else {\n\t\tinputRange = [node.startTag.range[1], node.range[1]];\n\t}\n\tconst code = text.slice(...inputRange);\n\n\tconst filename = `${context.filename}.css`;\n\ttry {\n\t\tconst configFilePath = postcssConfig?.configFilePath;\n\n\t\tconst config = postcssLoadConfig.sync(\n\t\t\t{\n\t\t\t\tcwd: context.cwd ?? process.cwd(),\n\t\t\t\tfrom: filename\n\t\t\t},\n\t\t\ttypeof configFilePath === 'string' ? configFilePath : undefined\n\t\t);\n\n\t\tconst result = postcss(config.plugins).process(code, {\n\t\t\t...config.options,\n\t\t\tmap: {\n\t\t\t\tinline: false\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tinputRange,\n\t\t\toutput: result.content,\n\t\t\tmappings: result.map.toJSON().mappings\n\t\t};\n\t} catch {\n\t\t// console.log(e)\n\t\treturn null;\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/sass.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type sass from 'sass';\nimport type { RuleContext } from '../../../types.js';\nimport type { TransformResult } from './types.js';\nimport { loadModule } from '../../../utils/load-module.js';\n\ntype Sass = typeof sass;\n/**\n * Transpile with sass\n */\nexport function transform(\n\tnode: AST.SvelteStyleElement,\n\ttext: string,\n\tcontext: RuleContext,\n\ttype: 'scss' | 'sass'\n): TransformResult | null {\n\tconst sass = loadSass(context);\n\tif (!sass) {\n\t\treturn null;\n\t}\n\tlet inputRange: AST.Range;\n\tif (node.endTag) {\n\t\tinputRange = [node.startTag.range[1], node.endTag.range[0]];\n\t} else {\n\t\tinputRange = [node.startTag.range[1], node.range[1]];\n\t}\n\tconst code = text.slice(...inputRange);\n\n\ttry {\n\t\tconst output = sass.compileString(code, {\n\t\t\tsourceMap: true,\n\t\t\tsyntax: type === 'sass' ? 'indented' : undefined\n\t\t});\n\t\tif (!output) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tinputRange,\n\t\t\toutput: output.css,\n\t\t\tmappings: output.sourceMap!.mappings\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Load sass\n */\nfunction loadSass(context: RuleContext): Sass | null {\n\treturn loadModule(context, 'sass');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/stylus.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type stylus from 'stylus';\nimport type { RawSourceMap } from 'source-map-js';\nimport type { RuleContext } from '../../../types.js';\nimport type { TransformResult } from './types.js';\nimport { loadModule } from '../../../utils/load-module.js';\n\ntype Stylus = typeof stylus;\n/**\n * Transpile with stylus\n */\nexport function transform(\n\tnode: AST.SvelteStyleElement,\n\ttext: string,\n\tcontext: RuleContext\n): TransformResult | null {\n\tconst stylus = loadStylus(context);\n\tif (!stylus) {\n\t\treturn null;\n\t}\n\tlet inputRange: AST.Range;\n\tif (node.endTag) {\n\t\tinputRange = [node.startTag.range[1], node.endTag.range[0]];\n\t} else {\n\t\tinputRange = [node.startTag.range[1], node.range[1]];\n\t}\n\tconst code = text.slice(...inputRange);\n\n\tconst filename = `${context.filename}.stylus`;\n\ttry {\n\t\tlet output: string | undefined;\n\n\t\tconst style = stylus(code, {\n\t\t\tfilename\n\t\t}).set('sourcemap', {});\n\t\tstyle.render((_error, code) => {\n\t\t\toutput = code;\n\t\t});\n\t\tif (output == null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tinputRange,\n\t\t\toutput,\n\t\t\tmappings: (style as unknown as { sourcemap: RawSourceMap }).sourcemap.mappings\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Load stylus\n */\nfunction loadStylus(context: RuleContext): Stylus | null {\n\treturn loadModule(context, 'stylus');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/types.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nexport type TransformResult = {\n\tinputRange: AST.Range;\n\toutput: string;\n\tmappings: string;\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/typescript.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type typescript from 'typescript';\nimport type { RuleContext } from '../../../types.js';\nimport type { TransformResult } from './types.js';\nimport { loadModule } from '../../../utils/load-module.js';\n\ntype TS = typeof typescript;\n/**\n * Transpile with typescript\n */\nexport function transform(\n\tnode: AST.SvelteScriptElement,\n\ttext: string,\n\tcontext: RuleContext\n): TransformResult | null {\n\tconst ts = loadTs(context);\n\tif (!ts) {\n\t\treturn null;\n\t}\n\tlet inputRange: AST.Range;\n\tif (node.endTag) {\n\t\tinputRange = [node.startTag.range[1], node.endTag.range[0]];\n\t} else {\n\t\tinputRange = [node.startTag.range[1], node.range[1]];\n\t}\n\tconst code = text.slice(...inputRange);\n\n\ttry {\n\t\tconst output = ts.transpileModule(code, {\n\t\t\treportDiagnostics: false,\n\t\t\tcompilerOptions: {\n\t\t\t\ttarget:\n\t\t\t\t\tcontext.sourceCode.parserServices.program?.getCompilerOptions()?.target ||\n\t\t\t\t\tts.ScriptTarget.ESNext,\n\t\t\t\tmodule: ts.ModuleKind.ESNext,\n\t\t\t\timportsNotUsedAsValues: ts.ImportsNotUsedAsValues.Preserve,\n\t\t\t\tpreserveValueImports: true,\n\t\t\t\tverbatimModuleSyntax: true,\n\t\t\t\tsourceMap: true\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tinputRange,\n\t\t\toutput: output.outputText,\n\t\t\tmappings: JSON.parse(output.sourceMapText!).mappings\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Check if project has TypeScript. */\nexport function hasTypeScript(context: RuleContext): boolean {\n\treturn Boolean(loadTs(context));\n}\n\n/**\n * Load typescript\n */\nfunction loadTs(context: RuleContext): TS | null {\n\treturn loadModule(context, 'typescript');\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/type-defs/@eslint-community/eslint-utils.d.ts",
    "content": "import type {\n\tCALL,\n\tCONSTRUCT,\n\tESM,\n\tREAD,\n\tStaticValue,\n\tTraceMap,\n\tTrackedReferences,\n\tReferenceTrackerOptions\n} from '../../../node_modules/@eslint-community/eslint-utils/index.mjs';\nimport type { AST } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { Scope } from '@typescript-eslint/scope-manager';\n\ndeclare module '@eslint-community/eslint-utils' {\n\ttype Token = { type: string; value: string };\n\texport function isArrowToken(token: Token): boolean;\n\texport function isCommaToken(token: Token): boolean;\n\texport function isSemicolonToken(token: Token): boolean;\n\texport function isColonToken(token: Token): boolean;\n\texport function isOpeningParenToken(token: Token): boolean;\n\texport function isClosingParenToken(token: Token): boolean;\n\texport function isOpeningBracketToken(token: Token): boolean;\n\texport function isClosingBracketToken(token: Token): boolean;\n\texport function isOpeningBraceToken(token: Token): boolean;\n\texport function isClosingBraceToken(token: Token): boolean;\n\texport function isCommentToken(token: Token): token is AST.Comment;\n\texport function isNotArrowToken(token: Token): boolean;\n\texport function isNotCommaToken(token: Token): boolean;\n\texport function isNotSemicolonToken(token: Token): boolean;\n\texport function isNotColonToken(token: Token): boolean;\n\texport function isNotOpeningParenToken(token: Token): boolean;\n\texport function isNotClosingParenToken(token: Token): boolean;\n\texport function isNotOpeningBracketToken(token: Token): boolean;\n\texport function isNotClosingBracketToken(token: Token): boolean;\n\texport function isNotOpeningBraceToken(token: Token): boolean;\n\texport function isNotClosingBraceToken(token: Token): boolean;\n\texport function isNotCommentToken(token: Token): boolean;\n\n\texport function findVariable(\n\t\tinitialScope: Scope,\n\t\tnameOrNode: TSESTree.Identifier | string\n\t): Scope.Variable;\n\n\t/**\n\t * Get the property name from a MemberExpression node or a Property node.\n\t */\n\texport function getPropertyName(\n\t\tnode:\n\t\t\t| TSESTree.MemberExpression\n\t\t\t| TSESTree.MethodDefinition\n\t\t\t| TSESTree.Property\n\t\t\t| TSESTree.PropertyDefinition,\n\t\tinitialScope?: Scope\n\t): string | null;\n\n\t/**\n\t * Get the innermost scope which contains a given location.\n\t */\n\texport function getInnermostScope(initialScope: Scope, node: TSESTree.Node): Scope;\n\n\texport class ReferenceTracker {\n\t\tpublic static readonly CALL: typeof CALL;\n\n\t\tpublic static readonly CONSTRUCT: typeof CONSTRUCT;\n\n\t\tpublic static readonly ESM: typeof ESM;\n\n\t\tpublic static readonly READ: typeof READ;\n\n\t\tpublic constructor(globalScope: Scope, options?: ReferenceTrackerOptions);\n\n\t\t/**\n\t\t * Iterate the references of CommonJS modules.\n\t\t */\n\t\tpublic iterateCjsReferences<T = unknown>(\n\t\t\ttraceMap: TraceMap<T>\n\t\t): IterableIterator<TrackedReferences<T>>;\n\n\t\t/**\n\t\t * Iterate the references of ES modules.\n\t\t */\n\t\tpublic iterateEsmReferences<T = unknown>(\n\t\t\ttraceMap: TraceMap<T>\n\t\t): IterableIterator<TrackedReferences<T>>;\n\n\t\t/**\n\t\t * Iterate the references of global variables.\n\t\t */\n\t\tpublic iterateGlobalReferences<T = unknown>(\n\t\t\ttraceMap: TraceMap<T>\n\t\t): IterableIterator<TrackedReferences<T>>;\n\n\t\t/**\n\t\t * Iterate the property references for a given expression AST node.\n\t\t */\n\t\tpublic iteratePropertyReferences<T = unknown>(\n\t\t\tnode: TSESTree.Expression,\n\t\t\ttraceMap: TraceMap<T>\n\t\t): IterableIterator<TrackedReferences<T>>;\n\t}\n\texport function getStaticValue(\n\t\tnode: TSESTree.Node,\n\t\tinitialScope?: Scope | null | undefined\n\t): StaticValue | null;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/type-defs/estree.d.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\n//\n// Replace type information to use \"@typescript-eslint/types\" instead of \"estree\".\n//\ndeclare module 'estree' {\n\timport type { TSESTree } from '@typescript-eslint/types';\n\n\texport type Node = TSESTree.Node;\n\texport type Program = TSESTree.Program;\n\texport type Expression = TSESTree.Expression;\n\texport type Statement = TSESTree.Statement;\n\texport type Pattern = TSESTree.DestructuringPattern;\n\texport type AccessorProperty = TSESTree.AccessorProperty;\n\texport type ArrayExpression = TSESTree.ArrayExpression;\n\texport type ArrayPattern = TSESTree.ArrayPattern;\n\texport type ArrowFunctionExpression = TSESTree.ArrowFunctionExpression;\n\texport type AssignmentExpression = TSESTree.AssignmentExpression;\n\texport type AssignmentPattern = TSESTree.AssignmentPattern;\n\texport type AwaitExpression = TSESTree.AwaitExpression;\n\texport type BinaryExpression = TSESTree.BinaryExpression;\n\texport type BlockStatement = TSESTree.BlockStatement;\n\texport type BreakStatement = TSESTree.BreakStatement;\n\texport type CallExpression = TSESTree.CallExpression;\n\texport type CatchClause = TSESTree.CatchClause;\n\texport type ChainExpression = TSESTree.ChainExpression;\n\texport type ClassBody = TSESTree.ClassBody;\n\texport type ClassDeclaration = TSESTree.ClassDeclaration;\n\texport type ClassExpression = TSESTree.ClassExpression;\n\texport type ConditionalExpression = TSESTree.ConditionalExpression;\n\texport type ContinueStatement = TSESTree.ContinueStatement;\n\texport type DebuggerStatement = TSESTree.DebuggerStatement;\n\texport type DoWhileStatement = TSESTree.DoWhileStatement;\n\texport type EmptyStatement = TSESTree.EmptyStatement;\n\texport type ExportAllDeclaration = TSESTree.ExportAllDeclaration;\n\texport type ExportDefaultDeclaration = TSESTree.ExportDefaultDeclaration;\n\texport type ExportNamedDeclaration = TSESTree.ExportNamedDeclaration;\n\texport type ExportSpecifier = TSESTree.ExportSpecifier;\n\texport type ExpressionStatement = TSESTree.ExpressionStatement;\n\texport type ForInStatement = TSESTree.ForInStatement;\n\texport type ForOfStatement = TSESTree.ForOfStatement;\n\texport type ForStatement = TSESTree.ForStatement;\n\texport type FunctionDeclaration = TSESTree.FunctionDeclaration;\n\texport type FunctionExpression = TSESTree.FunctionExpression;\n\texport type Identifier = TSESTree.Identifier;\n\texport type IfStatement = TSESTree.IfStatement;\n\texport type ImportDeclaration = TSESTree.ImportDeclaration;\n\texport type ImportDefaultSpecifier = TSESTree.ImportDefaultSpecifier;\n\texport type ImportExpression = TSESTree.ImportExpression;\n\texport type ImportNamespaceSpecifier = TSESTree.ImportNamespaceSpecifier;\n\texport type ImportSpecifier = TSESTree.ImportSpecifier;\n\texport type LabeledStatement = TSESTree.LabeledStatement;\n\texport type Literal = TSESTree.Literal;\n\texport type LogicalExpression = TSESTree.LogicalExpression;\n\texport type MemberExpression = TSESTree.MemberExpression;\n\texport type MetaProperty = TSESTree.MetaProperty;\n\texport type MethodDefinition = TSESTree.MethodDefinition;\n\texport type NewExpression = TSESTree.NewExpression;\n\texport type ObjectExpression = TSESTree.ObjectExpression;\n\texport type ObjectPattern = TSESTree.ObjectPattern;\n\texport type PrivateIdentifier = TSESTree.PrivateIdentifier;\n\texport type Property = TSESTree.Property;\n\texport type PropertyDefinition = TSESTree.PropertyDefinition;\n\texport type RestElement = TSESTree.RestElement;\n\texport type ReturnStatement = TSESTree.ReturnStatement;\n\texport type SequenceExpression = TSESTree.SequenceExpression;\n\texport type SpreadElement = TSESTree.SpreadElement;\n\texport type Super = TSESTree.Super;\n\texport type SwitchCase = TSESTree.SwitchCase;\n\texport type SwitchStatement = TSESTree.SwitchStatement;\n\texport type TaggedTemplateExpression = TSESTree.TaggedTemplateExpression;\n\texport type TemplateElement = TSESTree.TemplateElement;\n\texport type TemplateLiteral = TSESTree.TemplateLiteral;\n\texport type ThisExpression = TSESTree.ThisExpression;\n\texport type ThrowStatement = TSESTree.ThrowStatement;\n\texport type TryStatement = TSESTree.TryStatement;\n\texport type UnaryExpression = TSESTree.UnaryExpression;\n\texport type UpdateExpression = TSESTree.UpdateExpression;\n\texport type VariableDeclaration = TSESTree.VariableDeclaration;\n\texport type VariableDeclarator = TSESTree.VariableDeclarator;\n\texport type WhileStatement = TSESTree.WhileStatement;\n\texport type WithStatement = TSESTree.WithStatement;\n\texport type YieldExpression = TSESTree.YieldExpression;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/type-defs/postcss/lib/tokenize.d.ts",
    "content": "declare module 'postcss/lib/tokenize' {\n\timport type { Input } from 'postcss';\n\texport type Token = [string, string, number?, number?];\n\texport type Tokenizer = {\n\t\tback: (token: Token) => void;\n\t\tnextToken: (opts?: { ignoreUnclosed?: boolean }) => Token | undefined;\n\t\tendOfFile: () => boolean;\n\t\tposition: () => number;\n\t};\n\texport default function tokenizer(input: Input, options?: { ignoreErrors?: boolean }): Tokenizer;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts",
    "content": "declare module 'postcss-safe-parser/lib/safe-parser.js' {\n\timport type { Tokenizer } from 'postcss/lib/tokenize';\n\timport type { Root, Input } from 'postcss';\n\n\tdeclare class Parser {\n\t\tprotected input: Input;\n\n\t\tpublic root: Root;\n\n\t\tprotected tokenizer: Tokenizer;\n\n\t\tpublic constructor(input: Input);\n\n\t\tpublic parse(): void;\n\n\t\tprotected createTokenizer(): void;\n\t}\n\texport default Parser;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/types-for-node.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\n//\n// The information here can be calculated by calculating the type,\n// but is pre-defined to avoid the computational cost.\n//\n\nimport type { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/types';\nimport type { AST } from 'svelte-eslint-parser';\n\nexport type ASTNode =\n\t| AST.SvelteNode\n\t| Exclude<Omit<TSESTree.Node, 'parent'>, { type: AST.SvelteNode['type'] }>;\nexport type ASTNodeWithParent =\n\t| (Exclude<ASTNode, AST.SvelteProgram> & { parent: ASTNodeWithParent })\n\t| AST.SvelteProgram;\n\nexport type ASTNodeListener = {\n\tAccessorProperty?: (node: TSESTree.AccessorProperty & ASTNodeWithParent) => void;\n\t'AccessorProperty:exit'?: (node: TSESTree.AccessorProperty & ASTNodeWithParent) => void;\n\tArrayExpression?: (node: TSESTree.ArrayExpression & ASTNodeWithParent) => void;\n\t'ArrayExpression:exit'?: (node: TSESTree.ArrayExpression & ASTNodeWithParent) => void;\n\tArrayPattern?: (node: TSESTree.ArrayPattern & ASTNodeWithParent) => void;\n\t'ArrayPattern:exit'?: (node: TSESTree.ArrayPattern & ASTNodeWithParent) => void;\n\tArrowFunctionExpression?: (node: TSESTree.ArrowFunctionExpression & ASTNodeWithParent) => void;\n\t'ArrowFunctionExpression:exit'?: (\n\t\tnode: TSESTree.ArrowFunctionExpression & ASTNodeWithParent\n\t) => void;\n\tAssignmentExpression?: (node: TSESTree.AssignmentExpression & ASTNodeWithParent) => void;\n\t'AssignmentExpression:exit'?: (node: TSESTree.AssignmentExpression & ASTNodeWithParent) => void;\n\tAssignmentPattern?: (node: TSESTree.AssignmentPattern & ASTNodeWithParent) => void;\n\t'AssignmentPattern:exit'?: (node: TSESTree.AssignmentPattern & ASTNodeWithParent) => void;\n\tAwaitExpression?: (node: TSESTree.AwaitExpression & ASTNodeWithParent) => void;\n\t'AwaitExpression:exit'?: (node: TSESTree.AwaitExpression & ASTNodeWithParent) => void;\n\tBinaryExpression?: (node: TSESTree.BinaryExpression & ASTNodeWithParent) => void;\n\t'BinaryExpression:exit'?: (node: TSESTree.BinaryExpression & ASTNodeWithParent) => void;\n\tBlockStatement?: (node: TSESTree.BlockStatement & ASTNodeWithParent) => void;\n\t'BlockStatement:exit'?: (node: TSESTree.BlockStatement & ASTNodeWithParent) => void;\n\tBreakStatement?: (node: TSESTree.BreakStatement & ASTNodeWithParent) => void;\n\t'BreakStatement:exit'?: (node: TSESTree.BreakStatement & ASTNodeWithParent) => void;\n\tCallExpression?: (node: TSESTree.CallExpression & ASTNodeWithParent) => void;\n\t'CallExpression:exit'?: (node: TSESTree.CallExpression & ASTNodeWithParent) => void;\n\tCatchClause?: (node: TSESTree.CatchClause & ASTNodeWithParent) => void;\n\t'CatchClause:exit'?: (node: TSESTree.CatchClause & ASTNodeWithParent) => void;\n\tChainExpression?: (node: TSESTree.ChainExpression & ASTNodeWithParent) => void;\n\t'ChainExpression:exit'?: (node: TSESTree.ChainExpression & ASTNodeWithParent) => void;\n\tClassBody?: (node: TSESTree.ClassBody & ASTNodeWithParent) => void;\n\t'ClassBody:exit'?: (node: TSESTree.ClassBody & ASTNodeWithParent) => void;\n\tClassDeclaration?: (node: TSESTree.ClassDeclaration & ASTNodeWithParent) => void;\n\t'ClassDeclaration:exit'?: (node: TSESTree.ClassDeclaration & ASTNodeWithParent) => void;\n\tClassExpression?: (node: TSESTree.ClassExpression & ASTNodeWithParent) => void;\n\t'ClassExpression:exit'?: (node: TSESTree.ClassExpression & ASTNodeWithParent) => void;\n\tConditionalExpression?: (node: TSESTree.ConditionalExpression & ASTNodeWithParent) => void;\n\t'ConditionalExpression:exit'?: (node: TSESTree.ConditionalExpression & ASTNodeWithParent) => void;\n\tContinueStatement?: (node: TSESTree.ContinueStatement & ASTNodeWithParent) => void;\n\t'ContinueStatement:exit'?: (node: TSESTree.ContinueStatement & ASTNodeWithParent) => void;\n\tDebuggerStatement?: (node: TSESTree.DebuggerStatement & ASTNodeWithParent) => void;\n\t'DebuggerStatement:exit'?: (node: TSESTree.DebuggerStatement & ASTNodeWithParent) => void;\n\tDecorator?: (node: TSESTree.Decorator & ASTNodeWithParent) => void;\n\t'Decorator:exit'?: (node: TSESTree.Decorator & ASTNodeWithParent) => void;\n\tDoWhileStatement?: (node: TSESTree.DoWhileStatement & ASTNodeWithParent) => void;\n\t'DoWhileStatement:exit'?: (node: TSESTree.DoWhileStatement & ASTNodeWithParent) => void;\n\tEmptyStatement?: (node: TSESTree.EmptyStatement & ASTNodeWithParent) => void;\n\t'EmptyStatement:exit'?: (node: TSESTree.EmptyStatement & ASTNodeWithParent) => void;\n\tExportAllDeclaration?: (node: TSESTree.ExportAllDeclaration & ASTNodeWithParent) => void;\n\t'ExportAllDeclaration:exit'?: (node: TSESTree.ExportAllDeclaration & ASTNodeWithParent) => void;\n\tExportDefaultDeclaration?: (node: TSESTree.ExportDefaultDeclaration & ASTNodeWithParent) => void;\n\t'ExportDefaultDeclaration:exit'?: (\n\t\tnode: TSESTree.ExportDefaultDeclaration & ASTNodeWithParent\n\t) => void;\n\tExportNamedDeclaration?: (node: TSESTree.ExportNamedDeclaration & ASTNodeWithParent) => void;\n\t'ExportNamedDeclaration:exit'?: (\n\t\tnode: TSESTree.ExportNamedDeclaration & ASTNodeWithParent\n\t) => void;\n\tExportSpecifier?: (node: TSESTree.ExportSpecifier & ASTNodeWithParent) => void;\n\t'ExportSpecifier:exit'?: (node: TSESTree.ExportSpecifier & ASTNodeWithParent) => void;\n\tExpressionStatement?: (node: TSESTree.ExpressionStatement & ASTNodeWithParent) => void;\n\t'ExpressionStatement:exit'?: (node: TSESTree.ExpressionStatement & ASTNodeWithParent) => void;\n\tForInStatement?: (node: TSESTree.ForInStatement & ASTNodeWithParent) => void;\n\t'ForInStatement:exit'?: (node: TSESTree.ForInStatement & ASTNodeWithParent) => void;\n\tForOfStatement?: (node: TSESTree.ForOfStatement & ASTNodeWithParent) => void;\n\t'ForOfStatement:exit'?: (node: TSESTree.ForOfStatement & ASTNodeWithParent) => void;\n\tForStatement?: (node: TSESTree.ForStatement & ASTNodeWithParent) => void;\n\t'ForStatement:exit'?: (node: TSESTree.ForStatement & ASTNodeWithParent) => void;\n\tFunctionDeclaration?: (node: TSESTree.FunctionDeclaration & ASTNodeWithParent) => void;\n\t'FunctionDeclaration:exit'?: (node: TSESTree.FunctionDeclaration & ASTNodeWithParent) => void;\n\tFunctionExpression?: (node: TSESTree.FunctionExpression & ASTNodeWithParent) => void;\n\t'FunctionExpression:exit'?: (node: TSESTree.FunctionExpression & ASTNodeWithParent) => void;\n\tIdentifier?: (node: TSESTree.Identifier & ASTNodeWithParent) => void;\n\t'Identifier:exit'?: (node: TSESTree.Identifier & ASTNodeWithParent) => void;\n\tIfStatement?: (node: TSESTree.IfStatement & ASTNodeWithParent) => void;\n\t'IfStatement:exit'?: (node: TSESTree.IfStatement & ASTNodeWithParent) => void;\n\tImportAttribute?: (node: TSESTree.ImportAttribute & ASTNodeWithParent) => void;\n\t'ImportAttribute:exit'?: (node: TSESTree.ImportAttribute & ASTNodeWithParent) => void;\n\tImportDeclaration?: (node: TSESTree.ImportDeclaration & ASTNodeWithParent) => void;\n\t'ImportDeclaration:exit'?: (node: TSESTree.ImportDeclaration & ASTNodeWithParent) => void;\n\tImportDefaultSpecifier?: (node: TSESTree.ImportDefaultSpecifier & ASTNodeWithParent) => void;\n\t'ImportDefaultSpecifier:exit'?: (\n\t\tnode: TSESTree.ImportDefaultSpecifier & ASTNodeWithParent\n\t) => void;\n\tImportExpression?: (node: TSESTree.ImportExpression & ASTNodeWithParent) => void;\n\t'ImportExpression:exit'?: (node: TSESTree.ImportExpression & ASTNodeWithParent) => void;\n\tImportNamespaceSpecifier?: (node: TSESTree.ImportNamespaceSpecifier & ASTNodeWithParent) => void;\n\t'ImportNamespaceSpecifier:exit'?: (\n\t\tnode: TSESTree.ImportNamespaceSpecifier & ASTNodeWithParent\n\t) => void;\n\tImportSpecifier?: (node: TSESTree.ImportSpecifier & ASTNodeWithParent) => void;\n\t'ImportSpecifier:exit'?: (node: TSESTree.ImportSpecifier & ASTNodeWithParent) => void;\n\tJSXAttribute?: (node: TSESTree.JSXAttribute & ASTNodeWithParent) => void;\n\t'JSXAttribute:exit'?: (node: TSESTree.JSXAttribute & ASTNodeWithParent) => void;\n\tJSXClosingElement?: (node: TSESTree.JSXClosingElement & ASTNodeWithParent) => void;\n\t'JSXClosingElement:exit'?: (node: TSESTree.JSXClosingElement & ASTNodeWithParent) => void;\n\tJSXClosingFragment?: (node: TSESTree.JSXClosingFragment & ASTNodeWithParent) => void;\n\t'JSXClosingFragment:exit'?: (node: TSESTree.JSXClosingFragment & ASTNodeWithParent) => void;\n\tJSXElement?: (node: TSESTree.JSXElement & ASTNodeWithParent) => void;\n\t'JSXElement:exit'?: (node: TSESTree.JSXElement & ASTNodeWithParent) => void;\n\tJSXEmptyExpression?: (node: TSESTree.JSXEmptyExpression & ASTNodeWithParent) => void;\n\t'JSXEmptyExpression:exit'?: (node: TSESTree.JSXEmptyExpression & ASTNodeWithParent) => void;\n\tJSXExpressionContainer?: (node: TSESTree.JSXExpressionContainer & ASTNodeWithParent) => void;\n\t'JSXExpressionContainer:exit'?: (\n\t\tnode: TSESTree.JSXExpressionContainer & ASTNodeWithParent\n\t) => void;\n\tJSXFragment?: (node: TSESTree.JSXFragment & ASTNodeWithParent) => void;\n\t'JSXFragment:exit'?: (node: TSESTree.JSXFragment & ASTNodeWithParent) => void;\n\tJSXIdentifier?: (node: TSESTree.JSXIdentifier & ASTNodeWithParent) => void;\n\t'JSXIdentifier:exit'?: (node: TSESTree.JSXIdentifier & ASTNodeWithParent) => void;\n\tJSXMemberExpression?: (node: TSESTree.JSXMemberExpression & ASTNodeWithParent) => void;\n\t'JSXMemberExpression:exit'?: (node: TSESTree.JSXMemberExpression & ASTNodeWithParent) => void;\n\tJSXNamespacedName?: (node: TSESTree.JSXNamespacedName & ASTNodeWithParent) => void;\n\t'JSXNamespacedName:exit'?: (node: TSESTree.JSXNamespacedName & ASTNodeWithParent) => void;\n\tJSXOpeningElement?: (node: TSESTree.JSXOpeningElement & ASTNodeWithParent) => void;\n\t'JSXOpeningElement:exit'?: (node: TSESTree.JSXOpeningElement & ASTNodeWithParent) => void;\n\tJSXOpeningFragment?: (node: TSESTree.JSXOpeningFragment & ASTNodeWithParent) => void;\n\t'JSXOpeningFragment:exit'?: (node: TSESTree.JSXOpeningFragment & ASTNodeWithParent) => void;\n\tJSXSpreadAttribute?: (node: TSESTree.JSXSpreadAttribute & ASTNodeWithParent) => void;\n\t'JSXSpreadAttribute:exit'?: (node: TSESTree.JSXSpreadAttribute & ASTNodeWithParent) => void;\n\tJSXSpreadChild?: (node: TSESTree.JSXSpreadChild & ASTNodeWithParent) => void;\n\t'JSXSpreadChild:exit'?: (node: TSESTree.JSXSpreadChild & ASTNodeWithParent) => void;\n\tJSXText?: (node: TSESTree.JSXText & ASTNodeWithParent) => void;\n\t'JSXText:exit'?: (node: TSESTree.JSXText & ASTNodeWithParent) => void;\n\tLabeledStatement?: (node: TSESTree.LabeledStatement & ASTNodeWithParent) => void;\n\t'LabeledStatement:exit'?: (node: TSESTree.LabeledStatement & ASTNodeWithParent) => void;\n\tLiteral?: (node: TSESTree.Literal & ASTNodeWithParent) => void;\n\t'Literal:exit'?: (node: TSESTree.Literal & ASTNodeWithParent) => void;\n\tLogicalExpression?: (node: TSESTree.LogicalExpression & ASTNodeWithParent) => void;\n\t'LogicalExpression:exit'?: (node: TSESTree.LogicalExpression & ASTNodeWithParent) => void;\n\tMemberExpression?: (node: TSESTree.MemberExpression & ASTNodeWithParent) => void;\n\t'MemberExpression:exit'?: (node: TSESTree.MemberExpression & ASTNodeWithParent) => void;\n\tMetaProperty?: (node: TSESTree.MetaProperty & ASTNodeWithParent) => void;\n\t'MetaProperty:exit'?: (node: TSESTree.MetaProperty & ASTNodeWithParent) => void;\n\tMethodDefinition?: (node: TSESTree.MethodDefinition & ASTNodeWithParent) => void;\n\t'MethodDefinition:exit'?: (node: TSESTree.MethodDefinition & ASTNodeWithParent) => void;\n\tNewExpression?: (node: TSESTree.NewExpression & ASTNodeWithParent) => void;\n\t'NewExpression:exit'?: (node: TSESTree.NewExpression & ASTNodeWithParent) => void;\n\tObjectExpression?: (node: TSESTree.ObjectExpression & ASTNodeWithParent) => void;\n\t'ObjectExpression:exit'?: (node: TSESTree.ObjectExpression & ASTNodeWithParent) => void;\n\tObjectPattern?: (node: TSESTree.ObjectPattern & ASTNodeWithParent) => void;\n\t'ObjectPattern:exit'?: (node: TSESTree.ObjectPattern & ASTNodeWithParent) => void;\n\tPrivateIdentifier?: (node: TSESTree.PrivateIdentifier & ASTNodeWithParent) => void;\n\t'PrivateIdentifier:exit'?: (node: TSESTree.PrivateIdentifier & ASTNodeWithParent) => void;\n\tProperty?: (node: TSESTree.Property & ASTNodeWithParent) => void;\n\t'Property:exit'?: (node: TSESTree.Property & ASTNodeWithParent) => void;\n\tPropertyDefinition?: (node: TSESTree.PropertyDefinition & ASTNodeWithParent) => void;\n\t'PropertyDefinition:exit'?: (node: TSESTree.PropertyDefinition & ASTNodeWithParent) => void;\n\tRestElement?: (node: TSESTree.RestElement & ASTNodeWithParent) => void;\n\t'RestElement:exit'?: (node: TSESTree.RestElement & ASTNodeWithParent) => void;\n\tReturnStatement?: (node: TSESTree.ReturnStatement & ASTNodeWithParent) => void;\n\t'ReturnStatement:exit'?: (node: TSESTree.ReturnStatement & ASTNodeWithParent) => void;\n\tSequenceExpression?: (node: TSESTree.SequenceExpression & ASTNodeWithParent) => void;\n\t'SequenceExpression:exit'?: (node: TSESTree.SequenceExpression & ASTNodeWithParent) => void;\n\tSpreadElement?: (node: TSESTree.SpreadElement & ASTNodeWithParent) => void;\n\t'SpreadElement:exit'?: (node: TSESTree.SpreadElement & ASTNodeWithParent) => void;\n\tStaticBlock?: (node: TSESTree.StaticBlock & ASTNodeWithParent) => void;\n\t'StaticBlock:exit'?: (node: TSESTree.StaticBlock & ASTNodeWithParent) => void;\n\tSuper?: (node: TSESTree.Super & ASTNodeWithParent) => void;\n\t'Super:exit'?: (node: TSESTree.Super & ASTNodeWithParent) => void;\n\tSwitchCase?: (node: TSESTree.SwitchCase & ASTNodeWithParent) => void;\n\t'SwitchCase:exit'?: (node: TSESTree.SwitchCase & ASTNodeWithParent) => void;\n\tSwitchStatement?: (node: TSESTree.SwitchStatement & ASTNodeWithParent) => void;\n\t'SwitchStatement:exit'?: (node: TSESTree.SwitchStatement & ASTNodeWithParent) => void;\n\tTaggedTemplateExpression?: (node: TSESTree.TaggedTemplateExpression & ASTNodeWithParent) => void;\n\t'TaggedTemplateExpression:exit'?: (\n\t\tnode: TSESTree.TaggedTemplateExpression & ASTNodeWithParent\n\t) => void;\n\tTemplateElement?: (node: TSESTree.TemplateElement & ASTNodeWithParent) => void;\n\t'TemplateElement:exit'?: (node: TSESTree.TemplateElement & ASTNodeWithParent) => void;\n\tTemplateLiteral?: (node: TSESTree.TemplateLiteral & ASTNodeWithParent) => void;\n\t'TemplateLiteral:exit'?: (node: TSESTree.TemplateLiteral & ASTNodeWithParent) => void;\n\tThisExpression?: (node: TSESTree.ThisExpression & ASTNodeWithParent) => void;\n\t'ThisExpression:exit'?: (node: TSESTree.ThisExpression & ASTNodeWithParent) => void;\n\tThrowStatement?: (node: TSESTree.ThrowStatement & ASTNodeWithParent) => void;\n\t'ThrowStatement:exit'?: (node: TSESTree.ThrowStatement & ASTNodeWithParent) => void;\n\tTryStatement?: (node: TSESTree.TryStatement & ASTNodeWithParent) => void;\n\t'TryStatement:exit'?: (node: TSESTree.TryStatement & ASTNodeWithParent) => void;\n\tUnaryExpression?: (node: TSESTree.UnaryExpression & ASTNodeWithParent) => void;\n\t'UnaryExpression:exit'?: (node: TSESTree.UnaryExpression & ASTNodeWithParent) => void;\n\tUpdateExpression?: (node: TSESTree.UpdateExpression & ASTNodeWithParent) => void;\n\t'UpdateExpression:exit'?: (node: TSESTree.UpdateExpression & ASTNodeWithParent) => void;\n\tVariableDeclaration?: (node: TSESTree.VariableDeclaration & ASTNodeWithParent) => void;\n\t'VariableDeclaration:exit'?: (node: TSESTree.VariableDeclaration & ASTNodeWithParent) => void;\n\tVariableDeclarator?: (node: TSESTree.VariableDeclarator & ASTNodeWithParent) => void;\n\t'VariableDeclarator:exit'?: (node: TSESTree.VariableDeclarator & ASTNodeWithParent) => void;\n\tWhileStatement?: (node: TSESTree.WhileStatement & ASTNodeWithParent) => void;\n\t'WhileStatement:exit'?: (node: TSESTree.WhileStatement & ASTNodeWithParent) => void;\n\tWithStatement?: (node: TSESTree.WithStatement & ASTNodeWithParent) => void;\n\t'WithStatement:exit'?: (node: TSESTree.WithStatement & ASTNodeWithParent) => void;\n\tYieldExpression?: (node: TSESTree.YieldExpression & ASTNodeWithParent) => void;\n\t'YieldExpression:exit'?: (node: TSESTree.YieldExpression & ASTNodeWithParent) => void;\n\tTSAbstractAccessorProperty?: (\n\t\tnode: TSESTree.TSAbstractAccessorProperty & ASTNodeWithParent\n\t) => void;\n\t'TSAbstractAccessorProperty:exit'?: (\n\t\tnode: TSESTree.TSAbstractAccessorProperty & ASTNodeWithParent\n\t) => void;\n\tTSAbstractKeyword?: (node: TSESTree.TSAbstractKeyword & ASTNodeWithParent) => void;\n\t'TSAbstractKeyword:exit'?: (node: TSESTree.TSAbstractKeyword & ASTNodeWithParent) => void;\n\tTSAbstractMethodDefinition?: (\n\t\tnode: TSESTree.TSAbstractMethodDefinition & ASTNodeWithParent\n\t) => void;\n\t'TSAbstractMethodDefinition:exit'?: (\n\t\tnode: TSESTree.TSAbstractMethodDefinition & ASTNodeWithParent\n\t) => void;\n\tTSAbstractPropertyDefinition?: (\n\t\tnode: TSESTree.TSAbstractPropertyDefinition & ASTNodeWithParent\n\t) => void;\n\t'TSAbstractPropertyDefinition:exit'?: (\n\t\tnode: TSESTree.TSAbstractPropertyDefinition & ASTNodeWithParent\n\t) => void;\n\tTSAnyKeyword?: (node: TSESTree.TSAnyKeyword & ASTNodeWithParent) => void;\n\t'TSAnyKeyword:exit'?: (node: TSESTree.TSAnyKeyword & ASTNodeWithParent) => void;\n\tTSArrayType?: (node: TSESTree.TSArrayType & ASTNodeWithParent) => void;\n\t'TSArrayType:exit'?: (node: TSESTree.TSArrayType & ASTNodeWithParent) => void;\n\tTSAsExpression?: (node: TSESTree.TSAsExpression & ASTNodeWithParent) => void;\n\t'TSAsExpression:exit'?: (node: TSESTree.TSAsExpression & ASTNodeWithParent) => void;\n\tTSAsyncKeyword?: (node: TSESTree.TSAsyncKeyword & ASTNodeWithParent) => void;\n\t'TSAsyncKeyword:exit'?: (node: TSESTree.TSAsyncKeyword & ASTNodeWithParent) => void;\n\tTSBigIntKeyword?: (node: TSESTree.TSBigIntKeyword & ASTNodeWithParent) => void;\n\t'TSBigIntKeyword:exit'?: (node: TSESTree.TSBigIntKeyword & ASTNodeWithParent) => void;\n\tTSBooleanKeyword?: (node: TSESTree.TSBooleanKeyword & ASTNodeWithParent) => void;\n\t'TSBooleanKeyword:exit'?: (node: TSESTree.TSBooleanKeyword & ASTNodeWithParent) => void;\n\tTSCallSignatureDeclaration?: (\n\t\tnode: TSESTree.TSCallSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSCallSignatureDeclaration:exit'?: (\n\t\tnode: TSESTree.TSCallSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSClassImplements?: (node: TSESTree.TSClassImplements & ASTNodeWithParent) => void;\n\t'TSClassImplements:exit'?: (node: TSESTree.TSClassImplements & ASTNodeWithParent) => void;\n\tTSConditionalType?: (node: TSESTree.TSConditionalType & ASTNodeWithParent) => void;\n\t'TSConditionalType:exit'?: (node: TSESTree.TSConditionalType & ASTNodeWithParent) => void;\n\tTSConstructorType?: (node: TSESTree.TSConstructorType & ASTNodeWithParent) => void;\n\t'TSConstructorType:exit'?: (node: TSESTree.TSConstructorType & ASTNodeWithParent) => void;\n\tTSConstructSignatureDeclaration?: (\n\t\tnode: TSESTree.TSConstructSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSConstructSignatureDeclaration:exit'?: (\n\t\tnode: TSESTree.TSConstructSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSDeclareFunction?: (node: TSESTree.TSDeclareFunction & ASTNodeWithParent) => void;\n\t'TSDeclareFunction:exit'?: (node: TSESTree.TSDeclareFunction & ASTNodeWithParent) => void;\n\tTSDeclareKeyword?: (node: TSESTree.TSDeclareKeyword & ASTNodeWithParent) => void;\n\t'TSDeclareKeyword:exit'?: (node: TSESTree.TSDeclareKeyword & ASTNodeWithParent) => void;\n\tTSEmptyBodyFunctionExpression?: (\n\t\tnode: TSESTree.TSEmptyBodyFunctionExpression & ASTNodeWithParent\n\t) => void;\n\t'TSEmptyBodyFunctionExpression:exit'?: (\n\t\tnode: TSESTree.TSEmptyBodyFunctionExpression & ASTNodeWithParent\n\t) => void;\n\tTSEnumBody?: (node: TSESTree.TSEnumBody & ASTNodeWithParent) => void;\n\t'TSEnumBody:exit'?: (node: TSESTree.TSEnumBody & ASTNodeWithParent) => void;\n\tTSEnumDeclaration?: (node: TSESTree.TSEnumDeclaration & ASTNodeWithParent) => void;\n\t'TSEnumDeclaration:exit'?: (node: TSESTree.TSEnumDeclaration & ASTNodeWithParent) => void;\n\tTSEnumMember?: (node: TSESTree.TSEnumMember & ASTNodeWithParent) => void;\n\t'TSEnumMember:exit'?: (node: TSESTree.TSEnumMember & ASTNodeWithParent) => void;\n\tTSExportAssignment?: (node: TSESTree.TSExportAssignment & ASTNodeWithParent) => void;\n\t'TSExportAssignment:exit'?: (node: TSESTree.TSExportAssignment & ASTNodeWithParent) => void;\n\tTSExportKeyword?: (node: TSESTree.TSExportKeyword & ASTNodeWithParent) => void;\n\t'TSExportKeyword:exit'?: (node: TSESTree.TSExportKeyword & ASTNodeWithParent) => void;\n\tTSExternalModuleReference?: (\n\t\tnode: TSESTree.TSExternalModuleReference & ASTNodeWithParent\n\t) => void;\n\t'TSExternalModuleReference:exit'?: (\n\t\tnode: TSESTree.TSExternalModuleReference & ASTNodeWithParent\n\t) => void;\n\tTSFunctionType?: (node: TSESTree.TSFunctionType & ASTNodeWithParent) => void;\n\t'TSFunctionType:exit'?: (node: TSESTree.TSFunctionType & ASTNodeWithParent) => void;\n\tTSImportEqualsDeclaration?: (\n\t\tnode: TSESTree.TSImportEqualsDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSImportEqualsDeclaration:exit'?: (\n\t\tnode: TSESTree.TSImportEqualsDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSImportType?: (node: TSESTree.TSImportType & ASTNodeWithParent) => void;\n\t'TSImportType:exit'?: (node: TSESTree.TSImportType & ASTNodeWithParent) => void;\n\tTSIndexedAccessType?: (node: TSESTree.TSIndexedAccessType & ASTNodeWithParent) => void;\n\t'TSIndexedAccessType:exit'?: (node: TSESTree.TSIndexedAccessType & ASTNodeWithParent) => void;\n\tTSIndexSignature?: (node: TSESTree.TSIndexSignature & ASTNodeWithParent) => void;\n\t'TSIndexSignature:exit'?: (node: TSESTree.TSIndexSignature & ASTNodeWithParent) => void;\n\tTSInferType?: (node: TSESTree.TSInferType & ASTNodeWithParent) => void;\n\t'TSInferType:exit'?: (node: TSESTree.TSInferType & ASTNodeWithParent) => void;\n\tTSInstantiationExpression?: (\n\t\tnode: TSESTree.TSInstantiationExpression & ASTNodeWithParent\n\t) => void;\n\t'TSInstantiationExpression:exit'?: (\n\t\tnode: TSESTree.TSInstantiationExpression & ASTNodeWithParent\n\t) => void;\n\tTSInterfaceBody?: (node: TSESTree.TSInterfaceBody & ASTNodeWithParent) => void;\n\t'TSInterfaceBody:exit'?: (node: TSESTree.TSInterfaceBody & ASTNodeWithParent) => void;\n\tTSInterfaceDeclaration?: (node: TSESTree.TSInterfaceDeclaration & ASTNodeWithParent) => void;\n\t'TSInterfaceDeclaration:exit'?: (\n\t\tnode: TSESTree.TSInterfaceDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSInterfaceHeritage?: (node: TSESTree.TSInterfaceHeritage & ASTNodeWithParent) => void;\n\t'TSInterfaceHeritage:exit'?: (node: TSESTree.TSInterfaceHeritage & ASTNodeWithParent) => void;\n\tTSIntersectionType?: (node: TSESTree.TSIntersectionType & ASTNodeWithParent) => void;\n\t'TSIntersectionType:exit'?: (node: TSESTree.TSIntersectionType & ASTNodeWithParent) => void;\n\tTSIntrinsicKeyword?: (\n\t\tnode: TSESTree.Node & { type: AST_NODE_TYPES.TSIntrinsicKeyword } & ASTNodeWithParent\n\t) => void;\n\t'TSIntrinsicKeyword:exit'?: (\n\t\tnode: TSESTree.Node & { type: AST_NODE_TYPES.TSIntrinsicKeyword } & ASTNodeWithParent\n\t) => void;\n\tTSLiteralType?: (node: TSESTree.TSLiteralType & ASTNodeWithParent) => void;\n\t'TSLiteralType:exit'?: (node: TSESTree.TSLiteralType & ASTNodeWithParent) => void;\n\tTSMappedType?: (node: TSESTree.TSMappedType & ASTNodeWithParent) => void;\n\t'TSMappedType:exit'?: (node: TSESTree.TSMappedType & ASTNodeWithParent) => void;\n\tTSMethodSignature?: (node: TSESTree.TSMethodSignature & ASTNodeWithParent) => void;\n\t'TSMethodSignature:exit'?: (node: TSESTree.TSMethodSignature & ASTNodeWithParent) => void;\n\tTSModuleBlock?: (node: TSESTree.TSModuleBlock & ASTNodeWithParent) => void;\n\t'TSModuleBlock:exit'?: (node: TSESTree.TSModuleBlock & ASTNodeWithParent) => void;\n\tTSModuleDeclaration?: (node: TSESTree.TSModuleDeclaration & ASTNodeWithParent) => void;\n\t'TSModuleDeclaration:exit'?: (node: TSESTree.TSModuleDeclaration & ASTNodeWithParent) => void;\n\tTSNamedTupleMember?: (node: TSESTree.TSNamedTupleMember & ASTNodeWithParent) => void;\n\t'TSNamedTupleMember:exit'?: (node: TSESTree.TSNamedTupleMember & ASTNodeWithParent) => void;\n\tTSNamespaceExportDeclaration?: (\n\t\tnode: TSESTree.TSNamespaceExportDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSNamespaceExportDeclaration:exit'?: (\n\t\tnode: TSESTree.TSNamespaceExportDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSNeverKeyword?: (node: TSESTree.TSNeverKeyword & ASTNodeWithParent) => void;\n\t'TSNeverKeyword:exit'?: (node: TSESTree.TSNeverKeyword & ASTNodeWithParent) => void;\n\tTSNonNullExpression?: (node: TSESTree.TSNonNullExpression & ASTNodeWithParent) => void;\n\t'TSNonNullExpression:exit'?: (node: TSESTree.TSNonNullExpression & ASTNodeWithParent) => void;\n\tTSNullKeyword?: (node: TSESTree.TSNullKeyword & ASTNodeWithParent) => void;\n\t'TSNullKeyword:exit'?: (node: TSESTree.TSNullKeyword & ASTNodeWithParent) => void;\n\tTSNumberKeyword?: (node: TSESTree.TSNumberKeyword & ASTNodeWithParent) => void;\n\t'TSNumberKeyword:exit'?: (node: TSESTree.TSNumberKeyword & ASTNodeWithParent) => void;\n\tTSObjectKeyword?: (node: TSESTree.TSObjectKeyword & ASTNodeWithParent) => void;\n\t'TSObjectKeyword:exit'?: (node: TSESTree.TSObjectKeyword & ASTNodeWithParent) => void;\n\tTSOptionalType?: (node: TSESTree.TSOptionalType & ASTNodeWithParent) => void;\n\t'TSOptionalType:exit'?: (node: TSESTree.TSOptionalType & ASTNodeWithParent) => void;\n\tTSParameterProperty?: (node: TSESTree.TSParameterProperty & ASTNodeWithParent) => void;\n\t'TSParameterProperty:exit'?: (node: TSESTree.TSParameterProperty & ASTNodeWithParent) => void;\n\tTSPrivateKeyword?: (node: TSESTree.TSPrivateKeyword & ASTNodeWithParent) => void;\n\t'TSPrivateKeyword:exit'?: (node: TSESTree.TSPrivateKeyword & ASTNodeWithParent) => void;\n\tTSPropertySignature?: (node: TSESTree.TSPropertySignature & ASTNodeWithParent) => void;\n\t'TSPropertySignature:exit'?: (node: TSESTree.TSPropertySignature & ASTNodeWithParent) => void;\n\tTSProtectedKeyword?: (node: TSESTree.TSProtectedKeyword & ASTNodeWithParent) => void;\n\t'TSProtectedKeyword:exit'?: (node: TSESTree.TSProtectedKeyword & ASTNodeWithParent) => void;\n\tTSPublicKeyword?: (node: TSESTree.TSPublicKeyword & ASTNodeWithParent) => void;\n\t'TSPublicKeyword:exit'?: (node: TSESTree.TSPublicKeyword & ASTNodeWithParent) => void;\n\tTSQualifiedName?: (node: TSESTree.TSQualifiedName & ASTNodeWithParent) => void;\n\t'TSQualifiedName:exit'?: (node: TSESTree.TSQualifiedName & ASTNodeWithParent) => void;\n\tTSReadonlyKeyword?: (node: TSESTree.TSReadonlyKeyword & ASTNodeWithParent) => void;\n\t'TSReadonlyKeyword:exit'?: (node: TSESTree.TSReadonlyKeyword & ASTNodeWithParent) => void;\n\tTSRestType?: (node: TSESTree.TSRestType & ASTNodeWithParent) => void;\n\t'TSRestType:exit'?: (node: TSESTree.TSRestType & ASTNodeWithParent) => void;\n\tTSSatisfiesExpression?: (node: TSESTree.TSSatisfiesExpression & ASTNodeWithParent) => void;\n\t'TSSatisfiesExpression:exit'?: (node: TSESTree.TSSatisfiesExpression & ASTNodeWithParent) => void;\n\tTSStaticKeyword?: (node: TSESTree.TSStaticKeyword & ASTNodeWithParent) => void;\n\t'TSStaticKeyword:exit'?: (node: TSESTree.TSStaticKeyword & ASTNodeWithParent) => void;\n\tTSStringKeyword?: (node: TSESTree.TSStringKeyword & ASTNodeWithParent) => void;\n\t'TSStringKeyword:exit'?: (node: TSESTree.TSStringKeyword & ASTNodeWithParent) => void;\n\tTSSymbolKeyword?: (node: TSESTree.TSSymbolKeyword & ASTNodeWithParent) => void;\n\t'TSSymbolKeyword:exit'?: (node: TSESTree.TSSymbolKeyword & ASTNodeWithParent) => void;\n\tTSTemplateLiteralType?: (node: TSESTree.TSTemplateLiteralType & ASTNodeWithParent) => void;\n\t'TSTemplateLiteralType:exit'?: (node: TSESTree.TSTemplateLiteralType & ASTNodeWithParent) => void;\n\tTSThisType?: (node: TSESTree.TSThisType & ASTNodeWithParent) => void;\n\t'TSThisType:exit'?: (node: TSESTree.TSThisType & ASTNodeWithParent) => void;\n\tTSTupleType?: (node: TSESTree.TSTupleType & ASTNodeWithParent) => void;\n\t'TSTupleType:exit'?: (node: TSESTree.TSTupleType & ASTNodeWithParent) => void;\n\tTSTypeAliasDeclaration?: (node: TSESTree.TSTypeAliasDeclaration & ASTNodeWithParent) => void;\n\t'TSTypeAliasDeclaration:exit'?: (\n\t\tnode: TSESTree.TSTypeAliasDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSTypeAnnotation?: (node: TSESTree.TSTypeAnnotation & ASTNodeWithParent) => void;\n\t'TSTypeAnnotation:exit'?: (node: TSESTree.TSTypeAnnotation & ASTNodeWithParent) => void;\n\tTSTypeAssertion?: (node: TSESTree.TSTypeAssertion & ASTNodeWithParent) => void;\n\t'TSTypeAssertion:exit'?: (node: TSESTree.TSTypeAssertion & ASTNodeWithParent) => void;\n\tTSTypeLiteral?: (node: TSESTree.TSTypeLiteral & ASTNodeWithParent) => void;\n\t'TSTypeLiteral:exit'?: (node: TSESTree.TSTypeLiteral & ASTNodeWithParent) => void;\n\tTSTypeOperator?: (node: TSESTree.TSTypeOperator & ASTNodeWithParent) => void;\n\t'TSTypeOperator:exit'?: (node: TSESTree.TSTypeOperator & ASTNodeWithParent) => void;\n\tTSTypeParameter?: (node: TSESTree.TSTypeParameter & ASTNodeWithParent) => void;\n\t'TSTypeParameter:exit'?: (node: TSESTree.TSTypeParameter & ASTNodeWithParent) => void;\n\tTSTypeParameterDeclaration?: (\n\t\tnode: TSESTree.TSTypeParameterDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSTypeParameterDeclaration:exit'?: (\n\t\tnode: TSESTree.TSTypeParameterDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSTypeParameterInstantiation?: (\n\t\tnode: TSESTree.TSTypeParameterInstantiation & ASTNodeWithParent\n\t) => void;\n\t'TSTypeParameterInstantiation:exit'?: (\n\t\tnode: TSESTree.TSTypeParameterInstantiation & ASTNodeWithParent\n\t) => void;\n\tTSTypePredicate?: (node: TSESTree.TSTypePredicate & ASTNodeWithParent) => void;\n\t'TSTypePredicate:exit'?: (node: TSESTree.TSTypePredicate & ASTNodeWithParent) => void;\n\tTSTypeQuery?: (node: TSESTree.TSTypeQuery & ASTNodeWithParent) => void;\n\t'TSTypeQuery:exit'?: (node: TSESTree.TSTypeQuery & ASTNodeWithParent) => void;\n\tTSTypeReference?: (node: TSESTree.TSTypeReference & ASTNodeWithParent) => void;\n\t'TSTypeReference:exit'?: (node: TSESTree.TSTypeReference & ASTNodeWithParent) => void;\n\tTSUndefinedKeyword?: (node: TSESTree.TSUndefinedKeyword & ASTNodeWithParent) => void;\n\t'TSUndefinedKeyword:exit'?: (node: TSESTree.TSUndefinedKeyword & ASTNodeWithParent) => void;\n\tTSUnionType?: (node: TSESTree.TSUnionType & ASTNodeWithParent) => void;\n\t'TSUnionType:exit'?: (node: TSESTree.TSUnionType & ASTNodeWithParent) => void;\n\tTSUnknownKeyword?: (node: TSESTree.TSUnknownKeyword & ASTNodeWithParent) => void;\n\t'TSUnknownKeyword:exit'?: (node: TSESTree.TSUnknownKeyword & ASTNodeWithParent) => void;\n\tTSVoidKeyword?: (node: TSESTree.TSVoidKeyword & ASTNodeWithParent) => void;\n\t'TSVoidKeyword:exit'?: (node: TSESTree.TSVoidKeyword & ASTNodeWithParent) => void;\n\tProgram?: (node: AST.SvelteProgram & ASTNodeWithParent) => void;\n\t'Program:exit'?: (node: AST.SvelteProgram & ASTNodeWithParent) => void;\n\tSvelteScriptElement?: (node: AST.SvelteScriptElement & ASTNodeWithParent) => void;\n\t'SvelteScriptElement:exit'?: (node: AST.SvelteScriptElement & ASTNodeWithParent) => void;\n\tSvelteStyleElement?: (node: AST.SvelteStyleElement & ASTNodeWithParent) => void;\n\t'SvelteStyleElement:exit'?: (node: AST.SvelteStyleElement & ASTNodeWithParent) => void;\n\tSvelteElement?: (node: AST.SvelteElement & ASTNodeWithParent) => void;\n\t'SvelteElement:exit'?: (node: AST.SvelteElement & ASTNodeWithParent) => void;\n\tSvelteStartTag?: (node: AST.SvelteStartTag & ASTNodeWithParent) => void;\n\t'SvelteStartTag:exit'?: (node: AST.SvelteStartTag & ASTNodeWithParent) => void;\n\tSvelteEndTag?: (node: AST.SvelteEndTag & ASTNodeWithParent) => void;\n\t'SvelteEndTag:exit'?: (node: AST.SvelteEndTag & ASTNodeWithParent) => void;\n\tSvelteName?: (node: AST.SvelteName & ASTNodeWithParent) => void;\n\t'SvelteName:exit'?: (node: AST.SvelteName & ASTNodeWithParent) => void;\n\tSvelteMemberExpressionName?: (node: AST.SvelteMemberExpressionName & ASTNodeWithParent) => void;\n\t'SvelteMemberExpressionName:exit'?: (\n\t\tnode: AST.SvelteMemberExpressionName & ASTNodeWithParent\n\t) => void;\n\tSvelteLiteral?: (node: AST.SvelteLiteral & ASTNodeWithParent) => void;\n\t'SvelteLiteral:exit'?: (node: AST.SvelteLiteral & ASTNodeWithParent) => void;\n\tSvelteMustacheTag?: (node: AST.SvelteMustacheTag & ASTNodeWithParent) => void;\n\t'SvelteMustacheTag:exit'?: (node: AST.SvelteMustacheTag & ASTNodeWithParent) => void;\n\tSvelteDebugTag?: (node: AST.SvelteDebugTag & ASTNodeWithParent) => void;\n\t'SvelteDebugTag:exit'?: (node: AST.SvelteDebugTag & ASTNodeWithParent) => void;\n\tSvelteConstTag?: (node: AST.SvelteConstTag & ASTNodeWithParent) => void;\n\t'SvelteConstTag:exit'?: (node: AST.SvelteConstTag & ASTNodeWithParent) => void;\n\tSvelteRenderTag?: (node: AST.SvelteRenderTag & ASTNodeWithParent) => void;\n\t'SvelteRenderTag:exit'?: (node: AST.SvelteRenderTag & ASTNodeWithParent) => void;\n\tSvelteIfBlock?: (node: AST.SvelteIfBlock & ASTNodeWithParent) => void;\n\t'SvelteIfBlock:exit'?: (node: AST.SvelteIfBlock & ASTNodeWithParent) => void;\n\tSvelteElseBlock?: (node: AST.SvelteElseBlock & ASTNodeWithParent) => void;\n\t'SvelteElseBlock:exit'?: (node: AST.SvelteElseBlock & ASTNodeWithParent) => void;\n\tSvelteEachBlock?: (node: AST.SvelteEachBlock & ASTNodeWithParent) => void;\n\t'SvelteEachBlock:exit'?: (node: AST.SvelteEachBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitBlock?: (node: AST.SvelteAwaitBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitBlock:exit'?: (node: AST.SvelteAwaitBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitPendingBlock?: (node: AST.SvelteAwaitPendingBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitPendingBlock:exit'?: (node: AST.SvelteAwaitPendingBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitThenBlock?: (node: AST.SvelteAwaitThenBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitThenBlock:exit'?: (node: AST.SvelteAwaitThenBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitCatchBlock?: (node: AST.SvelteAwaitCatchBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitCatchBlock:exit'?: (node: AST.SvelteAwaitCatchBlock & ASTNodeWithParent) => void;\n\tSvelteKeyBlock?: (node: AST.SvelteKeyBlock & ASTNodeWithParent) => void;\n\t'SvelteKeyBlock:exit'?: (node: AST.SvelteKeyBlock & ASTNodeWithParent) => void;\n\tSvelteSnippetBlock?: (node: AST.SvelteSnippetBlock & ASTNodeWithParent) => void;\n\t'SvelteSnippetBlock:exit'?: (node: AST.SvelteSnippetBlock & ASTNodeWithParent) => void;\n\tSvelteAttribute?: (node: AST.SvelteAttribute & ASTNodeWithParent) => void;\n\t'SvelteAttribute:exit'?: (node: AST.SvelteAttribute & ASTNodeWithParent) => void;\n\tSvelteShorthandAttribute?: (node: AST.SvelteShorthandAttribute & ASTNodeWithParent) => void;\n\t'SvelteShorthandAttribute:exit'?: (\n\t\tnode: AST.SvelteShorthandAttribute & ASTNodeWithParent\n\t) => void;\n\tSvelteSpreadAttribute?: (node: AST.SvelteSpreadAttribute & ASTNodeWithParent) => void;\n\t'SvelteSpreadAttribute:exit'?: (node: AST.SvelteSpreadAttribute & ASTNodeWithParent) => void;\n\tSvelteAttachTag?: (node: AST.SvelteAttachTag & ASTNodeWithParent) => void;\n\t'SvelteAttachTag:exit'?: (node: AST.SvelteAttachTag & ASTNodeWithParent) => void;\n\tSvelteDirective?: (node: AST.SvelteDirective & ASTNodeWithParent) => void;\n\t'SvelteDirective:exit'?: (node: AST.SvelteDirective & ASTNodeWithParent) => void;\n\tSvelteStyleDirective?: (node: AST.SvelteStyleDirective & ASTNodeWithParent) => void;\n\t'SvelteStyleDirective:exit'?: (node: AST.SvelteStyleDirective & ASTNodeWithParent) => void;\n\tSvelteSpecialDirective?: (node: AST.SvelteSpecialDirective & ASTNodeWithParent) => void;\n\t'SvelteSpecialDirective:exit'?: (node: AST.SvelteSpecialDirective & ASTNodeWithParent) => void;\n\tSvelteGenericsDirective?: (node: AST.SvelteGenericsDirective & ASTNodeWithParent) => void;\n\t'SvelteGenericsDirective:exit'?: (node: AST.SvelteGenericsDirective & ASTNodeWithParent) => void;\n\tSvelteDirectiveKey?: (node: AST.SvelteDirectiveKey & ASTNodeWithParent) => void;\n\t'SvelteDirectiveKey:exit'?: (node: AST.SvelteDirectiveKey & ASTNodeWithParent) => void;\n\tSvelteSpecialDirectiveKey?: (node: AST.SvelteSpecialDirectiveKey & ASTNodeWithParent) => void;\n\t'SvelteSpecialDirectiveKey:exit'?: (\n\t\tnode: AST.SvelteSpecialDirectiveKey & ASTNodeWithParent\n\t) => void;\n\tSvelteText?: (node: AST.SvelteText & ASTNodeWithParent) => void;\n\t'SvelteText:exit'?: (node: AST.SvelteText & ASTNodeWithParent) => void;\n\tSvelteHTMLComment?: (node: AST.SvelteHTMLComment & ASTNodeWithParent) => void;\n\t'SvelteHTMLComment:exit'?: (node: AST.SvelteHTMLComment & ASTNodeWithParent) => void;\n\tSvelteReactiveStatement?: (node: AST.SvelteReactiveStatement & ASTNodeWithParent) => void;\n\t'SvelteReactiveStatement:exit'?: (node: AST.SvelteReactiveStatement & ASTNodeWithParent) => void;\n\tSvelteFunctionBindingsExpression?: (\n\t\tnode: AST.SvelteFunctionBindingsExpression & ASTNodeWithParent\n\t) => void;\n\t'SvelteFunctionBindingsExpression:exit'?: (\n\t\tnode: AST.SvelteFunctionBindingsExpression & ASTNodeWithParent\n\t) => void;\n};\n\nexport type ESNodeListener = {\n\tAccessorProperty?: (node: TSESTree.AccessorProperty & ASTNodeWithParent) => void;\n\t'AccessorProperty:exit'?: (node: TSESTree.AccessorProperty & ASTNodeWithParent) => void;\n\tArrayExpression?: (node: TSESTree.ArrayExpression & ASTNodeWithParent) => void;\n\t'ArrayExpression:exit'?: (node: TSESTree.ArrayExpression & ASTNodeWithParent) => void;\n\tArrayPattern?: (node: TSESTree.ArrayPattern & ASTNodeWithParent) => void;\n\t'ArrayPattern:exit'?: (node: TSESTree.ArrayPattern & ASTNodeWithParent) => void;\n\tArrowFunctionExpression?: (node: TSESTree.ArrowFunctionExpression & ASTNodeWithParent) => void;\n\t'ArrowFunctionExpression:exit'?: (\n\t\tnode: TSESTree.ArrowFunctionExpression & ASTNodeWithParent\n\t) => void;\n\tAssignmentExpression?: (node: TSESTree.AssignmentExpression & ASTNodeWithParent) => void;\n\t'AssignmentExpression:exit'?: (node: TSESTree.AssignmentExpression & ASTNodeWithParent) => void;\n\tAssignmentPattern?: (node: TSESTree.AssignmentPattern & ASTNodeWithParent) => void;\n\t'AssignmentPattern:exit'?: (node: TSESTree.AssignmentPattern & ASTNodeWithParent) => void;\n\tAwaitExpression?: (node: TSESTree.AwaitExpression & ASTNodeWithParent) => void;\n\t'AwaitExpression:exit'?: (node: TSESTree.AwaitExpression & ASTNodeWithParent) => void;\n\tBinaryExpression?: (node: TSESTree.BinaryExpression & ASTNodeWithParent) => void;\n\t'BinaryExpression:exit'?: (node: TSESTree.BinaryExpression & ASTNodeWithParent) => void;\n\tBlockStatement?: (node: TSESTree.BlockStatement & ASTNodeWithParent) => void;\n\t'BlockStatement:exit'?: (node: TSESTree.BlockStatement & ASTNodeWithParent) => void;\n\tBreakStatement?: (node: TSESTree.BreakStatement & ASTNodeWithParent) => void;\n\t'BreakStatement:exit'?: (node: TSESTree.BreakStatement & ASTNodeWithParent) => void;\n\tCallExpression?: (node: TSESTree.CallExpression & ASTNodeWithParent) => void;\n\t'CallExpression:exit'?: (node: TSESTree.CallExpression & ASTNodeWithParent) => void;\n\tCatchClause?: (node: TSESTree.CatchClause & ASTNodeWithParent) => void;\n\t'CatchClause:exit'?: (node: TSESTree.CatchClause & ASTNodeWithParent) => void;\n\tChainExpression?: (node: TSESTree.ChainExpression & ASTNodeWithParent) => void;\n\t'ChainExpression:exit'?: (node: TSESTree.ChainExpression & ASTNodeWithParent) => void;\n\tClassBody?: (node: TSESTree.ClassBody & ASTNodeWithParent) => void;\n\t'ClassBody:exit'?: (node: TSESTree.ClassBody & ASTNodeWithParent) => void;\n\tClassDeclaration?: (node: TSESTree.ClassDeclaration & ASTNodeWithParent) => void;\n\t'ClassDeclaration:exit'?: (node: TSESTree.ClassDeclaration & ASTNodeWithParent) => void;\n\tClassExpression?: (node: TSESTree.ClassExpression & ASTNodeWithParent) => void;\n\t'ClassExpression:exit'?: (node: TSESTree.ClassExpression & ASTNodeWithParent) => void;\n\tConditionalExpression?: (node: TSESTree.ConditionalExpression & ASTNodeWithParent) => void;\n\t'ConditionalExpression:exit'?: (node: TSESTree.ConditionalExpression & ASTNodeWithParent) => void;\n\tContinueStatement?: (node: TSESTree.ContinueStatement & ASTNodeWithParent) => void;\n\t'ContinueStatement:exit'?: (node: TSESTree.ContinueStatement & ASTNodeWithParent) => void;\n\tDebuggerStatement?: (node: TSESTree.DebuggerStatement & ASTNodeWithParent) => void;\n\t'DebuggerStatement:exit'?: (node: TSESTree.DebuggerStatement & ASTNodeWithParent) => void;\n\tDoWhileStatement?: (node: TSESTree.DoWhileStatement & ASTNodeWithParent) => void;\n\t'DoWhileStatement:exit'?: (node: TSESTree.DoWhileStatement & ASTNodeWithParent) => void;\n\tEmptyStatement?: (node: TSESTree.EmptyStatement & ASTNodeWithParent) => void;\n\t'EmptyStatement:exit'?: (node: TSESTree.EmptyStatement & ASTNodeWithParent) => void;\n\tExportAllDeclaration?: (node: TSESTree.ExportAllDeclaration & ASTNodeWithParent) => void;\n\t'ExportAllDeclaration:exit'?: (node: TSESTree.ExportAllDeclaration & ASTNodeWithParent) => void;\n\tExportDefaultDeclaration?: (node: TSESTree.ExportDefaultDeclaration & ASTNodeWithParent) => void;\n\t'ExportDefaultDeclaration:exit'?: (\n\t\tnode: TSESTree.ExportDefaultDeclaration & ASTNodeWithParent\n\t) => void;\n\tExportNamedDeclaration?: (node: TSESTree.ExportNamedDeclaration & ASTNodeWithParent) => void;\n\t'ExportNamedDeclaration:exit'?: (\n\t\tnode: TSESTree.ExportNamedDeclaration & ASTNodeWithParent\n\t) => void;\n\tExportSpecifier?: (node: TSESTree.ExportSpecifier & ASTNodeWithParent) => void;\n\t'ExportSpecifier:exit'?: (node: TSESTree.ExportSpecifier & ASTNodeWithParent) => void;\n\tExpressionStatement?: (node: TSESTree.ExpressionStatement & ASTNodeWithParent) => void;\n\t'ExpressionStatement:exit'?: (node: TSESTree.ExpressionStatement & ASTNodeWithParent) => void;\n\tForInStatement?: (node: TSESTree.ForInStatement & ASTNodeWithParent) => void;\n\t'ForInStatement:exit'?: (node: TSESTree.ForInStatement & ASTNodeWithParent) => void;\n\tForOfStatement?: (node: TSESTree.ForOfStatement & ASTNodeWithParent) => void;\n\t'ForOfStatement:exit'?: (node: TSESTree.ForOfStatement & ASTNodeWithParent) => void;\n\tForStatement?: (node: TSESTree.ForStatement & ASTNodeWithParent) => void;\n\t'ForStatement:exit'?: (node: TSESTree.ForStatement & ASTNodeWithParent) => void;\n\tFunctionDeclaration?: (node: TSESTree.FunctionDeclaration & ASTNodeWithParent) => void;\n\t'FunctionDeclaration:exit'?: (node: TSESTree.FunctionDeclaration & ASTNodeWithParent) => void;\n\tFunctionExpression?: (node: TSESTree.FunctionExpression & ASTNodeWithParent) => void;\n\t'FunctionExpression:exit'?: (node: TSESTree.FunctionExpression & ASTNodeWithParent) => void;\n\tIdentifier?: (node: TSESTree.Identifier & ASTNodeWithParent) => void;\n\t'Identifier:exit'?: (node: TSESTree.Identifier & ASTNodeWithParent) => void;\n\tIfStatement?: (node: TSESTree.IfStatement & ASTNodeWithParent) => void;\n\t'IfStatement:exit'?: (node: TSESTree.IfStatement & ASTNodeWithParent) => void;\n\tImportDeclaration?: (node: TSESTree.ImportDeclaration & ASTNodeWithParent) => void;\n\t'ImportDeclaration:exit'?: (node: TSESTree.ImportDeclaration & ASTNodeWithParent) => void;\n\tImportDefaultSpecifier?: (node: TSESTree.ImportDefaultSpecifier & ASTNodeWithParent) => void;\n\t'ImportDefaultSpecifier:exit'?: (\n\t\tnode: TSESTree.ImportDefaultSpecifier & ASTNodeWithParent\n\t) => void;\n\tImportExpression?: (node: TSESTree.ImportExpression & ASTNodeWithParent) => void;\n\t'ImportExpression:exit'?: (node: TSESTree.ImportExpression & ASTNodeWithParent) => void;\n\tImportNamespaceSpecifier?: (node: TSESTree.ImportNamespaceSpecifier & ASTNodeWithParent) => void;\n\t'ImportNamespaceSpecifier:exit'?: (\n\t\tnode: TSESTree.ImportNamespaceSpecifier & ASTNodeWithParent\n\t) => void;\n\tImportSpecifier?: (node: TSESTree.ImportSpecifier & ASTNodeWithParent) => void;\n\t'ImportSpecifier:exit'?: (node: TSESTree.ImportSpecifier & ASTNodeWithParent) => void;\n\tLabeledStatement?: (node: TSESTree.LabeledStatement & ASTNodeWithParent) => void;\n\t'LabeledStatement:exit'?: (node: TSESTree.LabeledStatement & ASTNodeWithParent) => void;\n\tLiteral?: (node: TSESTree.Literal & ASTNodeWithParent) => void;\n\t'Literal:exit'?: (node: TSESTree.Literal & ASTNodeWithParent) => void;\n\tLogicalExpression?: (node: TSESTree.LogicalExpression & ASTNodeWithParent) => void;\n\t'LogicalExpression:exit'?: (node: TSESTree.LogicalExpression & ASTNodeWithParent) => void;\n\tMemberExpression?: (node: TSESTree.MemberExpression & ASTNodeWithParent) => void;\n\t'MemberExpression:exit'?: (node: TSESTree.MemberExpression & ASTNodeWithParent) => void;\n\tMetaProperty?: (node: TSESTree.MetaProperty & ASTNodeWithParent) => void;\n\t'MetaProperty:exit'?: (node: TSESTree.MetaProperty & ASTNodeWithParent) => void;\n\tMethodDefinition?: (node: TSESTree.MethodDefinition & ASTNodeWithParent) => void;\n\t'MethodDefinition:exit'?: (node: TSESTree.MethodDefinition & ASTNodeWithParent) => void;\n\tNewExpression?: (node: TSESTree.NewExpression & ASTNodeWithParent) => void;\n\t'NewExpression:exit'?: (node: TSESTree.NewExpression & ASTNodeWithParent) => void;\n\tObjectExpression?: (node: TSESTree.ObjectExpression & ASTNodeWithParent) => void;\n\t'ObjectExpression:exit'?: (node: TSESTree.ObjectExpression & ASTNodeWithParent) => void;\n\tObjectPattern?: (node: TSESTree.ObjectPattern & ASTNodeWithParent) => void;\n\t'ObjectPattern:exit'?: (node: TSESTree.ObjectPattern & ASTNodeWithParent) => void;\n\tPrivateIdentifier?: (node: TSESTree.PrivateIdentifier & ASTNodeWithParent) => void;\n\t'PrivateIdentifier:exit'?: (node: TSESTree.PrivateIdentifier & ASTNodeWithParent) => void;\n\tProperty?: (node: TSESTree.Property & ASTNodeWithParent) => void;\n\t'Property:exit'?: (node: TSESTree.Property & ASTNodeWithParent) => void;\n\tPropertyDefinition?: (node: TSESTree.PropertyDefinition & ASTNodeWithParent) => void;\n\t'PropertyDefinition:exit'?: (node: TSESTree.PropertyDefinition & ASTNodeWithParent) => void;\n\tRestElement?: (node: TSESTree.RestElement & ASTNodeWithParent) => void;\n\t'RestElement:exit'?: (node: TSESTree.RestElement & ASTNodeWithParent) => void;\n\tReturnStatement?: (node: TSESTree.ReturnStatement & ASTNodeWithParent) => void;\n\t'ReturnStatement:exit'?: (node: TSESTree.ReturnStatement & ASTNodeWithParent) => void;\n\tSequenceExpression?: (node: TSESTree.SequenceExpression & ASTNodeWithParent) => void;\n\t'SequenceExpression:exit'?: (node: TSESTree.SequenceExpression & ASTNodeWithParent) => void;\n\tSpreadElement?: (node: TSESTree.SpreadElement & ASTNodeWithParent) => void;\n\t'SpreadElement:exit'?: (node: TSESTree.SpreadElement & ASTNodeWithParent) => void;\n\tSuper?: (node: TSESTree.Super & ASTNodeWithParent) => void;\n\t'Super:exit'?: (node: TSESTree.Super & ASTNodeWithParent) => void;\n\tSwitchCase?: (node: TSESTree.SwitchCase & ASTNodeWithParent) => void;\n\t'SwitchCase:exit'?: (node: TSESTree.SwitchCase & ASTNodeWithParent) => void;\n\tSwitchStatement?: (node: TSESTree.SwitchStatement & ASTNodeWithParent) => void;\n\t'SwitchStatement:exit'?: (node: TSESTree.SwitchStatement & ASTNodeWithParent) => void;\n\tTaggedTemplateExpression?: (node: TSESTree.TaggedTemplateExpression & ASTNodeWithParent) => void;\n\t'TaggedTemplateExpression:exit'?: (\n\t\tnode: TSESTree.TaggedTemplateExpression & ASTNodeWithParent\n\t) => void;\n\tTemplateElement?: (node: TSESTree.TemplateElement & ASTNodeWithParent) => void;\n\t'TemplateElement:exit'?: (node: TSESTree.TemplateElement & ASTNodeWithParent) => void;\n\tTemplateLiteral?: (node: TSESTree.TemplateLiteral & ASTNodeWithParent) => void;\n\t'TemplateLiteral:exit'?: (node: TSESTree.TemplateLiteral & ASTNodeWithParent) => void;\n\tThisExpression?: (node: TSESTree.ThisExpression & ASTNodeWithParent) => void;\n\t'ThisExpression:exit'?: (node: TSESTree.ThisExpression & ASTNodeWithParent) => void;\n\tThrowStatement?: (node: TSESTree.ThrowStatement & ASTNodeWithParent) => void;\n\t'ThrowStatement:exit'?: (node: TSESTree.ThrowStatement & ASTNodeWithParent) => void;\n\tTryStatement?: (node: TSESTree.TryStatement & ASTNodeWithParent) => void;\n\t'TryStatement:exit'?: (node: TSESTree.TryStatement & ASTNodeWithParent) => void;\n\tUnaryExpression?: (node: TSESTree.UnaryExpression & ASTNodeWithParent) => void;\n\t'UnaryExpression:exit'?: (node: TSESTree.UnaryExpression & ASTNodeWithParent) => void;\n\tUpdateExpression?: (node: TSESTree.UpdateExpression & ASTNodeWithParent) => void;\n\t'UpdateExpression:exit'?: (node: TSESTree.UpdateExpression & ASTNodeWithParent) => void;\n\tVariableDeclaration?: (node: TSESTree.VariableDeclaration & ASTNodeWithParent) => void;\n\t'VariableDeclaration:exit'?: (node: TSESTree.VariableDeclaration & ASTNodeWithParent) => void;\n\tVariableDeclarator?: (node: TSESTree.VariableDeclarator & ASTNodeWithParent) => void;\n\t'VariableDeclarator:exit'?: (node: TSESTree.VariableDeclarator & ASTNodeWithParent) => void;\n\tWhileStatement?: (node: TSESTree.WhileStatement & ASTNodeWithParent) => void;\n\t'WhileStatement:exit'?: (node: TSESTree.WhileStatement & ASTNodeWithParent) => void;\n\tWithStatement?: (node: TSESTree.WithStatement & ASTNodeWithParent) => void;\n\t'WithStatement:exit'?: (node: TSESTree.WithStatement & ASTNodeWithParent) => void;\n\tYieldExpression?: (node: TSESTree.YieldExpression & ASTNodeWithParent) => void;\n\t'YieldExpression:exit'?: (node: TSESTree.YieldExpression & ASTNodeWithParent) => void;\n\tProgram?: (node: AST.SvelteProgram & ASTNodeWithParent) => void;\n\t'Program:exit'?: (node: AST.SvelteProgram & ASTNodeWithParent) => void;\n\tSvelteReactiveStatement?: (node: AST.SvelteReactiveStatement & ASTNodeWithParent) => void;\n\t'SvelteReactiveStatement:exit'?: (node: AST.SvelteReactiveStatement & ASTNodeWithParent) => void;\n};\n\nexport type TSNodeListener = {\n\tDecorator?: (node: TSESTree.Decorator & ASTNodeWithParent) => void;\n\t'Decorator:exit'?: (node: TSESTree.Decorator & ASTNodeWithParent) => void;\n\tImportAttribute?: (node: TSESTree.ImportAttribute & ASTNodeWithParent) => void;\n\t'ImportAttribute:exit'?: (node: TSESTree.ImportAttribute & ASTNodeWithParent) => void;\n\tStaticBlock?: (node: TSESTree.StaticBlock & ASTNodeWithParent) => void;\n\t'StaticBlock:exit'?: (node: TSESTree.StaticBlock & ASTNodeWithParent) => void;\n\tTSAbstractAccessorProperty?: (\n\t\tnode: TSESTree.TSAbstractAccessorProperty & ASTNodeWithParent\n\t) => void;\n\t'TSAbstractAccessorProperty:exit'?: (\n\t\tnode: TSESTree.TSAbstractAccessorProperty & ASTNodeWithParent\n\t) => void;\n\tTSAbstractKeyword?: (node: TSESTree.TSAbstractKeyword & ASTNodeWithParent) => void;\n\t'TSAbstractKeyword:exit'?: (node: TSESTree.TSAbstractKeyword & ASTNodeWithParent) => void;\n\tTSAbstractMethodDefinition?: (\n\t\tnode: TSESTree.TSAbstractMethodDefinition & ASTNodeWithParent\n\t) => void;\n\t'TSAbstractMethodDefinition:exit'?: (\n\t\tnode: TSESTree.TSAbstractMethodDefinition & ASTNodeWithParent\n\t) => void;\n\tTSAbstractPropertyDefinition?: (\n\t\tnode: TSESTree.TSAbstractPropertyDefinition & ASTNodeWithParent\n\t) => void;\n\t'TSAbstractPropertyDefinition:exit'?: (\n\t\tnode: TSESTree.TSAbstractPropertyDefinition & ASTNodeWithParent\n\t) => void;\n\tTSAnyKeyword?: (node: TSESTree.TSAnyKeyword & ASTNodeWithParent) => void;\n\t'TSAnyKeyword:exit'?: (node: TSESTree.TSAnyKeyword & ASTNodeWithParent) => void;\n\tTSArrayType?: (node: TSESTree.TSArrayType & ASTNodeWithParent) => void;\n\t'TSArrayType:exit'?: (node: TSESTree.TSArrayType & ASTNodeWithParent) => void;\n\tTSAsExpression?: (node: TSESTree.TSAsExpression & ASTNodeWithParent) => void;\n\t'TSAsExpression:exit'?: (node: TSESTree.TSAsExpression & ASTNodeWithParent) => void;\n\tTSAsyncKeyword?: (node: TSESTree.TSAsyncKeyword & ASTNodeWithParent) => void;\n\t'TSAsyncKeyword:exit'?: (node: TSESTree.TSAsyncKeyword & ASTNodeWithParent) => void;\n\tTSBigIntKeyword?: (node: TSESTree.TSBigIntKeyword & ASTNodeWithParent) => void;\n\t'TSBigIntKeyword:exit'?: (node: TSESTree.TSBigIntKeyword & ASTNodeWithParent) => void;\n\tTSBooleanKeyword?: (node: TSESTree.TSBooleanKeyword & ASTNodeWithParent) => void;\n\t'TSBooleanKeyword:exit'?: (node: TSESTree.TSBooleanKeyword & ASTNodeWithParent) => void;\n\tTSCallSignatureDeclaration?: (\n\t\tnode: TSESTree.TSCallSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSCallSignatureDeclaration:exit'?: (\n\t\tnode: TSESTree.TSCallSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSClassImplements?: (node: TSESTree.TSClassImplements & ASTNodeWithParent) => void;\n\t'TSClassImplements:exit'?: (node: TSESTree.TSClassImplements & ASTNodeWithParent) => void;\n\tTSConditionalType?: (node: TSESTree.TSConditionalType & ASTNodeWithParent) => void;\n\t'TSConditionalType:exit'?: (node: TSESTree.TSConditionalType & ASTNodeWithParent) => void;\n\tTSConstructorType?: (node: TSESTree.TSConstructorType & ASTNodeWithParent) => void;\n\t'TSConstructorType:exit'?: (node: TSESTree.TSConstructorType & ASTNodeWithParent) => void;\n\tTSConstructSignatureDeclaration?: (\n\t\tnode: TSESTree.TSConstructSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSConstructSignatureDeclaration:exit'?: (\n\t\tnode: TSESTree.TSConstructSignatureDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSDeclareFunction?: (node: TSESTree.TSDeclareFunction & ASTNodeWithParent) => void;\n\t'TSDeclareFunction:exit'?: (node: TSESTree.TSDeclareFunction & ASTNodeWithParent) => void;\n\tTSDeclareKeyword?: (node: TSESTree.TSDeclareKeyword & ASTNodeWithParent) => void;\n\t'TSDeclareKeyword:exit'?: (node: TSESTree.TSDeclareKeyword & ASTNodeWithParent) => void;\n\tTSEmptyBodyFunctionExpression?: (\n\t\tnode: TSESTree.TSEmptyBodyFunctionExpression & ASTNodeWithParent\n\t) => void;\n\t'TSEmptyBodyFunctionExpression:exit'?: (\n\t\tnode: TSESTree.TSEmptyBodyFunctionExpression & ASTNodeWithParent\n\t) => void;\n\tTSEnumBody?: (node: TSESTree.TSEnumBody & ASTNodeWithParent) => void;\n\t'TSEnumBody:exit'?: (node: TSESTree.TSEnumBody & ASTNodeWithParent) => void;\n\tTSEnumDeclaration?: (node: TSESTree.TSEnumDeclaration & ASTNodeWithParent) => void;\n\t'TSEnumDeclaration:exit'?: (node: TSESTree.TSEnumDeclaration & ASTNodeWithParent) => void;\n\tTSEnumMember?: (node: TSESTree.TSEnumMember & ASTNodeWithParent) => void;\n\t'TSEnumMember:exit'?: (node: TSESTree.TSEnumMember & ASTNodeWithParent) => void;\n\tTSExportAssignment?: (node: TSESTree.TSExportAssignment & ASTNodeWithParent) => void;\n\t'TSExportAssignment:exit'?: (node: TSESTree.TSExportAssignment & ASTNodeWithParent) => void;\n\tTSExportKeyword?: (node: TSESTree.TSExportKeyword & ASTNodeWithParent) => void;\n\t'TSExportKeyword:exit'?: (node: TSESTree.TSExportKeyword & ASTNodeWithParent) => void;\n\tTSExternalModuleReference?: (\n\t\tnode: TSESTree.TSExternalModuleReference & ASTNodeWithParent\n\t) => void;\n\t'TSExternalModuleReference:exit'?: (\n\t\tnode: TSESTree.TSExternalModuleReference & ASTNodeWithParent\n\t) => void;\n\tTSFunctionType?: (node: TSESTree.TSFunctionType & ASTNodeWithParent) => void;\n\t'TSFunctionType:exit'?: (node: TSESTree.TSFunctionType & ASTNodeWithParent) => void;\n\tTSImportEqualsDeclaration?: (\n\t\tnode: TSESTree.TSImportEqualsDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSImportEqualsDeclaration:exit'?: (\n\t\tnode: TSESTree.TSImportEqualsDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSImportType?: (node: TSESTree.TSImportType & ASTNodeWithParent) => void;\n\t'TSImportType:exit'?: (node: TSESTree.TSImportType & ASTNodeWithParent) => void;\n\tTSIndexedAccessType?: (node: TSESTree.TSIndexedAccessType & ASTNodeWithParent) => void;\n\t'TSIndexedAccessType:exit'?: (node: TSESTree.TSIndexedAccessType & ASTNodeWithParent) => void;\n\tTSIndexSignature?: (node: TSESTree.TSIndexSignature & ASTNodeWithParent) => void;\n\t'TSIndexSignature:exit'?: (node: TSESTree.TSIndexSignature & ASTNodeWithParent) => void;\n\tTSInferType?: (node: TSESTree.TSInferType & ASTNodeWithParent) => void;\n\t'TSInferType:exit'?: (node: TSESTree.TSInferType & ASTNodeWithParent) => void;\n\tTSInstantiationExpression?: (\n\t\tnode: TSESTree.TSInstantiationExpression & ASTNodeWithParent\n\t) => void;\n\t'TSInstantiationExpression:exit'?: (\n\t\tnode: TSESTree.TSInstantiationExpression & ASTNodeWithParent\n\t) => void;\n\tTSInterfaceBody?: (node: TSESTree.TSInterfaceBody & ASTNodeWithParent) => void;\n\t'TSInterfaceBody:exit'?: (node: TSESTree.TSInterfaceBody & ASTNodeWithParent) => void;\n\tTSInterfaceDeclaration?: (node: TSESTree.TSInterfaceDeclaration & ASTNodeWithParent) => void;\n\t'TSInterfaceDeclaration:exit'?: (\n\t\tnode: TSESTree.TSInterfaceDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSInterfaceHeritage?: (node: TSESTree.TSInterfaceHeritage & ASTNodeWithParent) => void;\n\t'TSInterfaceHeritage:exit'?: (node: TSESTree.TSInterfaceHeritage & ASTNodeWithParent) => void;\n\tTSIntersectionType?: (node: TSESTree.TSIntersectionType & ASTNodeWithParent) => void;\n\t'TSIntersectionType:exit'?: (node: TSESTree.TSIntersectionType & ASTNodeWithParent) => void;\n\tTSIntrinsicKeyword?: (\n\t\tnode: TSESTree.Node & { type: AST_NODE_TYPES.TSIntrinsicKeyword } & ASTNodeWithParent\n\t) => void;\n\t'TSIntrinsicKeyword:exit'?: (\n\t\tnode: TSESTree.Node & { type: AST_NODE_TYPES.TSIntrinsicKeyword } & ASTNodeWithParent\n\t) => void;\n\tTSLiteralType?: (node: TSESTree.TSLiteralType & ASTNodeWithParent) => void;\n\t'TSLiteralType:exit'?: (node: TSESTree.TSLiteralType & ASTNodeWithParent) => void;\n\tTSMappedType?: (node: TSESTree.TSMappedType & ASTNodeWithParent) => void;\n\t'TSMappedType:exit'?: (node: TSESTree.TSMappedType & ASTNodeWithParent) => void;\n\tTSMethodSignature?: (node: TSESTree.TSMethodSignature & ASTNodeWithParent) => void;\n\t'TSMethodSignature:exit'?: (node: TSESTree.TSMethodSignature & ASTNodeWithParent) => void;\n\tTSModuleBlock?: (node: TSESTree.TSModuleBlock & ASTNodeWithParent) => void;\n\t'TSModuleBlock:exit'?: (node: TSESTree.TSModuleBlock & ASTNodeWithParent) => void;\n\tTSModuleDeclaration?: (node: TSESTree.TSModuleDeclaration & ASTNodeWithParent) => void;\n\t'TSModuleDeclaration:exit'?: (node: TSESTree.TSModuleDeclaration & ASTNodeWithParent) => void;\n\tTSNamedTupleMember?: (node: TSESTree.TSNamedTupleMember & ASTNodeWithParent) => void;\n\t'TSNamedTupleMember:exit'?: (node: TSESTree.TSNamedTupleMember & ASTNodeWithParent) => void;\n\tTSNamespaceExportDeclaration?: (\n\t\tnode: TSESTree.TSNamespaceExportDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSNamespaceExportDeclaration:exit'?: (\n\t\tnode: TSESTree.TSNamespaceExportDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSNeverKeyword?: (node: TSESTree.TSNeverKeyword & ASTNodeWithParent) => void;\n\t'TSNeverKeyword:exit'?: (node: TSESTree.TSNeverKeyword & ASTNodeWithParent) => void;\n\tTSNonNullExpression?: (node: TSESTree.TSNonNullExpression & ASTNodeWithParent) => void;\n\t'TSNonNullExpression:exit'?: (node: TSESTree.TSNonNullExpression & ASTNodeWithParent) => void;\n\tTSNullKeyword?: (node: TSESTree.TSNullKeyword & ASTNodeWithParent) => void;\n\t'TSNullKeyword:exit'?: (node: TSESTree.TSNullKeyword & ASTNodeWithParent) => void;\n\tTSNumberKeyword?: (node: TSESTree.TSNumberKeyword & ASTNodeWithParent) => void;\n\t'TSNumberKeyword:exit'?: (node: TSESTree.TSNumberKeyword & ASTNodeWithParent) => void;\n\tTSObjectKeyword?: (node: TSESTree.TSObjectKeyword & ASTNodeWithParent) => void;\n\t'TSObjectKeyword:exit'?: (node: TSESTree.TSObjectKeyword & ASTNodeWithParent) => void;\n\tTSOptionalType?: (node: TSESTree.TSOptionalType & ASTNodeWithParent) => void;\n\t'TSOptionalType:exit'?: (node: TSESTree.TSOptionalType & ASTNodeWithParent) => void;\n\tTSParameterProperty?: (node: TSESTree.TSParameterProperty & ASTNodeWithParent) => void;\n\t'TSParameterProperty:exit'?: (node: TSESTree.TSParameterProperty & ASTNodeWithParent) => void;\n\tTSPrivateKeyword?: (node: TSESTree.TSPrivateKeyword & ASTNodeWithParent) => void;\n\t'TSPrivateKeyword:exit'?: (node: TSESTree.TSPrivateKeyword & ASTNodeWithParent) => void;\n\tTSPropertySignature?: (node: TSESTree.TSPropertySignature & ASTNodeWithParent) => void;\n\t'TSPropertySignature:exit'?: (node: TSESTree.TSPropertySignature & ASTNodeWithParent) => void;\n\tTSProtectedKeyword?: (node: TSESTree.TSProtectedKeyword & ASTNodeWithParent) => void;\n\t'TSProtectedKeyword:exit'?: (node: TSESTree.TSProtectedKeyword & ASTNodeWithParent) => void;\n\tTSPublicKeyword?: (node: TSESTree.TSPublicKeyword & ASTNodeWithParent) => void;\n\t'TSPublicKeyword:exit'?: (node: TSESTree.TSPublicKeyword & ASTNodeWithParent) => void;\n\tTSQualifiedName?: (node: TSESTree.TSQualifiedName & ASTNodeWithParent) => void;\n\t'TSQualifiedName:exit'?: (node: TSESTree.TSQualifiedName & ASTNodeWithParent) => void;\n\tTSReadonlyKeyword?: (node: TSESTree.TSReadonlyKeyword & ASTNodeWithParent) => void;\n\t'TSReadonlyKeyword:exit'?: (node: TSESTree.TSReadonlyKeyword & ASTNodeWithParent) => void;\n\tTSRestType?: (node: TSESTree.TSRestType & ASTNodeWithParent) => void;\n\t'TSRestType:exit'?: (node: TSESTree.TSRestType & ASTNodeWithParent) => void;\n\tTSSatisfiesExpression?: (node: TSESTree.TSSatisfiesExpression & ASTNodeWithParent) => void;\n\t'TSSatisfiesExpression:exit'?: (node: TSESTree.TSSatisfiesExpression & ASTNodeWithParent) => void;\n\tTSStaticKeyword?: (node: TSESTree.TSStaticKeyword & ASTNodeWithParent) => void;\n\t'TSStaticKeyword:exit'?: (node: TSESTree.TSStaticKeyword & ASTNodeWithParent) => void;\n\tTSStringKeyword?: (node: TSESTree.TSStringKeyword & ASTNodeWithParent) => void;\n\t'TSStringKeyword:exit'?: (node: TSESTree.TSStringKeyword & ASTNodeWithParent) => void;\n\tTSSymbolKeyword?: (node: TSESTree.TSSymbolKeyword & ASTNodeWithParent) => void;\n\t'TSSymbolKeyword:exit'?: (node: TSESTree.TSSymbolKeyword & ASTNodeWithParent) => void;\n\tTSTemplateLiteralType?: (node: TSESTree.TSTemplateLiteralType & ASTNodeWithParent) => void;\n\t'TSTemplateLiteralType:exit'?: (node: TSESTree.TSTemplateLiteralType & ASTNodeWithParent) => void;\n\tTSThisType?: (node: TSESTree.TSThisType & ASTNodeWithParent) => void;\n\t'TSThisType:exit'?: (node: TSESTree.TSThisType & ASTNodeWithParent) => void;\n\tTSTupleType?: (node: TSESTree.TSTupleType & ASTNodeWithParent) => void;\n\t'TSTupleType:exit'?: (node: TSESTree.TSTupleType & ASTNodeWithParent) => void;\n\tTSTypeAliasDeclaration?: (node: TSESTree.TSTypeAliasDeclaration & ASTNodeWithParent) => void;\n\t'TSTypeAliasDeclaration:exit'?: (\n\t\tnode: TSESTree.TSTypeAliasDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSTypeAnnotation?: (node: TSESTree.TSTypeAnnotation & ASTNodeWithParent) => void;\n\t'TSTypeAnnotation:exit'?: (node: TSESTree.TSTypeAnnotation & ASTNodeWithParent) => void;\n\tTSTypeAssertion?: (node: TSESTree.TSTypeAssertion & ASTNodeWithParent) => void;\n\t'TSTypeAssertion:exit'?: (node: TSESTree.TSTypeAssertion & ASTNodeWithParent) => void;\n\tTSTypeLiteral?: (node: TSESTree.TSTypeLiteral & ASTNodeWithParent) => void;\n\t'TSTypeLiteral:exit'?: (node: TSESTree.TSTypeLiteral & ASTNodeWithParent) => void;\n\tTSTypeOperator?: (node: TSESTree.TSTypeOperator & ASTNodeWithParent) => void;\n\t'TSTypeOperator:exit'?: (node: TSESTree.TSTypeOperator & ASTNodeWithParent) => void;\n\tTSTypeParameter?: (node: TSESTree.TSTypeParameter & ASTNodeWithParent) => void;\n\t'TSTypeParameter:exit'?: (node: TSESTree.TSTypeParameter & ASTNodeWithParent) => void;\n\tTSTypeParameterDeclaration?: (\n\t\tnode: TSESTree.TSTypeParameterDeclaration & ASTNodeWithParent\n\t) => void;\n\t'TSTypeParameterDeclaration:exit'?: (\n\t\tnode: TSESTree.TSTypeParameterDeclaration & ASTNodeWithParent\n\t) => void;\n\tTSTypeParameterInstantiation?: (\n\t\tnode: TSESTree.TSTypeParameterInstantiation & ASTNodeWithParent\n\t) => void;\n\t'TSTypeParameterInstantiation:exit'?: (\n\t\tnode: TSESTree.TSTypeParameterInstantiation & ASTNodeWithParent\n\t) => void;\n\tTSTypePredicate?: (node: TSESTree.TSTypePredicate & ASTNodeWithParent) => void;\n\t'TSTypePredicate:exit'?: (node: TSESTree.TSTypePredicate & ASTNodeWithParent) => void;\n\tTSTypeQuery?: (node: TSESTree.TSTypeQuery & ASTNodeWithParent) => void;\n\t'TSTypeQuery:exit'?: (node: TSESTree.TSTypeQuery & ASTNodeWithParent) => void;\n\tTSTypeReference?: (node: TSESTree.TSTypeReference & ASTNodeWithParent) => void;\n\t'TSTypeReference:exit'?: (node: TSESTree.TSTypeReference & ASTNodeWithParent) => void;\n\tTSUndefinedKeyword?: (node: TSESTree.TSUndefinedKeyword & ASTNodeWithParent) => void;\n\t'TSUndefinedKeyword:exit'?: (node: TSESTree.TSUndefinedKeyword & ASTNodeWithParent) => void;\n\tTSUnionType?: (node: TSESTree.TSUnionType & ASTNodeWithParent) => void;\n\t'TSUnionType:exit'?: (node: TSESTree.TSUnionType & ASTNodeWithParent) => void;\n\tTSUnknownKeyword?: (node: TSESTree.TSUnknownKeyword & ASTNodeWithParent) => void;\n\t'TSUnknownKeyword:exit'?: (node: TSESTree.TSUnknownKeyword & ASTNodeWithParent) => void;\n\tTSVoidKeyword?: (node: TSESTree.TSVoidKeyword & ASTNodeWithParent) => void;\n\t'TSVoidKeyword:exit'?: (node: TSESTree.TSVoidKeyword & ASTNodeWithParent) => void;\n};\n\nexport type SvelteNodeListener = {\n\tSvelteScriptElement?: (node: AST.SvelteScriptElement & ASTNodeWithParent) => void;\n\t'SvelteScriptElement:exit'?: (node: AST.SvelteScriptElement & ASTNodeWithParent) => void;\n\tSvelteStyleElement?: (node: AST.SvelteStyleElement & ASTNodeWithParent) => void;\n\t'SvelteStyleElement:exit'?: (node: AST.SvelteStyleElement & ASTNodeWithParent) => void;\n\tSvelteElement?: (node: AST.SvelteElement & ASTNodeWithParent) => void;\n\t'SvelteElement:exit'?: (node: AST.SvelteElement & ASTNodeWithParent) => void;\n\tSvelteStartTag?: (node: AST.SvelteStartTag & ASTNodeWithParent) => void;\n\t'SvelteStartTag:exit'?: (node: AST.SvelteStartTag & ASTNodeWithParent) => void;\n\tSvelteEndTag?: (node: AST.SvelteEndTag & ASTNodeWithParent) => void;\n\t'SvelteEndTag:exit'?: (node: AST.SvelteEndTag & ASTNodeWithParent) => void;\n\tSvelteName?: (node: AST.SvelteName & ASTNodeWithParent) => void;\n\t'SvelteName:exit'?: (node: AST.SvelteName & ASTNodeWithParent) => void;\n\tSvelteMemberExpressionName?: (node: AST.SvelteMemberExpressionName & ASTNodeWithParent) => void;\n\t'SvelteMemberExpressionName:exit'?: (\n\t\tnode: AST.SvelteMemberExpressionName & ASTNodeWithParent\n\t) => void;\n\tSvelteLiteral?: (node: AST.SvelteLiteral & ASTNodeWithParent) => void;\n\t'SvelteLiteral:exit'?: (node: AST.SvelteLiteral & ASTNodeWithParent) => void;\n\tSvelteMustacheTag?: (node: AST.SvelteMustacheTag & ASTNodeWithParent) => void;\n\t'SvelteMustacheTag:exit'?: (node: AST.SvelteMustacheTag & ASTNodeWithParent) => void;\n\tSvelteDebugTag?: (node: AST.SvelteDebugTag & ASTNodeWithParent) => void;\n\t'SvelteDebugTag:exit'?: (node: AST.SvelteDebugTag & ASTNodeWithParent) => void;\n\tSvelteConstTag?: (node: AST.SvelteConstTag & ASTNodeWithParent) => void;\n\t'SvelteConstTag:exit'?: (node: AST.SvelteConstTag & ASTNodeWithParent) => void;\n\tSvelteRenderTag?: (node: AST.SvelteRenderTag & ASTNodeWithParent) => void;\n\t'SvelteRenderTag:exit'?: (node: AST.SvelteRenderTag & ASTNodeWithParent) => void;\n\tSvelteIfBlock?: (node: AST.SvelteIfBlock & ASTNodeWithParent) => void;\n\t'SvelteIfBlock:exit'?: (node: AST.SvelteIfBlock & ASTNodeWithParent) => void;\n\tSvelteElseBlock?: (node: AST.SvelteElseBlock & ASTNodeWithParent) => void;\n\t'SvelteElseBlock:exit'?: (node: AST.SvelteElseBlock & ASTNodeWithParent) => void;\n\tSvelteEachBlock?: (node: AST.SvelteEachBlock & ASTNodeWithParent) => void;\n\t'SvelteEachBlock:exit'?: (node: AST.SvelteEachBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitBlock?: (node: AST.SvelteAwaitBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitBlock:exit'?: (node: AST.SvelteAwaitBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitPendingBlock?: (node: AST.SvelteAwaitPendingBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitPendingBlock:exit'?: (node: AST.SvelteAwaitPendingBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitThenBlock?: (node: AST.SvelteAwaitThenBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitThenBlock:exit'?: (node: AST.SvelteAwaitThenBlock & ASTNodeWithParent) => void;\n\tSvelteAwaitCatchBlock?: (node: AST.SvelteAwaitCatchBlock & ASTNodeWithParent) => void;\n\t'SvelteAwaitCatchBlock:exit'?: (node: AST.SvelteAwaitCatchBlock & ASTNodeWithParent) => void;\n\tSvelteKeyBlock?: (node: AST.SvelteKeyBlock & ASTNodeWithParent) => void;\n\t'SvelteKeyBlock:exit'?: (node: AST.SvelteKeyBlock & ASTNodeWithParent) => void;\n\tSvelteSnippetBlock?: (node: AST.SvelteSnippetBlock & ASTNodeWithParent) => void;\n\t'SvelteSnippetBlock:exit'?: (node: AST.SvelteSnippetBlock & ASTNodeWithParent) => void;\n\tSvelteAttribute?: (node: AST.SvelteAttribute & ASTNodeWithParent) => void;\n\t'SvelteAttribute:exit'?: (node: AST.SvelteAttribute & ASTNodeWithParent) => void;\n\tSvelteShorthandAttribute?: (node: AST.SvelteShorthandAttribute & ASTNodeWithParent) => void;\n\t'SvelteShorthandAttribute:exit'?: (\n\t\tnode: AST.SvelteShorthandAttribute & ASTNodeWithParent\n\t) => void;\n\tSvelteSpreadAttribute?: (node: AST.SvelteSpreadAttribute & ASTNodeWithParent) => void;\n\t'SvelteSpreadAttribute:exit'?: (node: AST.SvelteSpreadAttribute & ASTNodeWithParent) => void;\n\tSvelteAttachTag?: (node: AST.SvelteAttachTag & ASTNodeWithParent) => void;\n\t'SvelteAttachTag:exit'?: (node: AST.SvelteAttachTag & ASTNodeWithParent) => void;\n\tSvelteDirective?: (node: AST.SvelteDirective & ASTNodeWithParent) => void;\n\t'SvelteDirective:exit'?: (node: AST.SvelteDirective & ASTNodeWithParent) => void;\n\tSvelteStyleDirective?: (node: AST.SvelteStyleDirective & ASTNodeWithParent) => void;\n\t'SvelteStyleDirective:exit'?: (node: AST.SvelteStyleDirective & ASTNodeWithParent) => void;\n\tSvelteSpecialDirective?: (node: AST.SvelteSpecialDirective & ASTNodeWithParent) => void;\n\t'SvelteSpecialDirective:exit'?: (node: AST.SvelteSpecialDirective & ASTNodeWithParent) => void;\n\tSvelteGenericsDirective?: (node: AST.SvelteGenericsDirective & ASTNodeWithParent) => void;\n\t'SvelteGenericsDirective:exit'?: (node: AST.SvelteGenericsDirective & ASTNodeWithParent) => void;\n\tSvelteDirectiveKey?: (node: AST.SvelteDirectiveKey & ASTNodeWithParent) => void;\n\t'SvelteDirectiveKey:exit'?: (node: AST.SvelteDirectiveKey & ASTNodeWithParent) => void;\n\tSvelteSpecialDirectiveKey?: (node: AST.SvelteSpecialDirectiveKey & ASTNodeWithParent) => void;\n\t'SvelteSpecialDirectiveKey:exit'?: (\n\t\tnode: AST.SvelteSpecialDirectiveKey & ASTNodeWithParent\n\t) => void;\n\tSvelteText?: (node: AST.SvelteText & ASTNodeWithParent) => void;\n\t'SvelteText:exit'?: (node: AST.SvelteText & ASTNodeWithParent) => void;\n\tSvelteHTMLComment?: (node: AST.SvelteHTMLComment & ASTNodeWithParent) => void;\n\t'SvelteHTMLComment:exit'?: (node: AST.SvelteHTMLComment & ASTNodeWithParent) => void;\n\tSvelteFunctionBindingsExpression?: (\n\t\tnode: AST.SvelteFunctionBindingsExpression & ASTNodeWithParent\n\t) => void;\n\t'SvelteFunctionBindingsExpression:exit'?: (\n\t\tnode: AST.SvelteFunctionBindingsExpression & ASTNodeWithParent\n\t) => void;\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/types.ts",
    "content": "import type { JSONSchema4 } from 'json-schema';\nimport type { Linter, Rule, SourceCode as ESLintSourceCode } from 'eslint';\nimport type { AST, StyleContext, SvelteConfig } from 'svelte-eslint-parser';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { ScopeManager, Scope, Variable } from '@typescript-eslint/scope-manager';\nimport type { Rule as StyleRule, Node } from 'postcss';\nimport type { Root as SelectorRoot, Node as SelectorNode } from 'postcss-selector-parser';\nimport type { ASTNode, ASTNodeWithParent, ASTNodeListener } from './types-for-node.js';\nimport type * as TS from 'typescript';\nimport type { SourceLocation } from 'svelte-eslint-parser/lib/ast/common.js';\nimport type { SvelteContext } from './utils/svelte-context.js';\n\nexport type { ASTNode, ASTNodeWithParent, ASTNodeListener };\nexport interface RuleListener extends ASTNodeListener {\n\tonCodePathStart?(codePath: Rule.CodePath, node: never): void;\n\n\tonCodePathEnd?(codePath: Rule.CodePath, node: never): void;\n\n\tonCodePathSegmentStart?(segment: Rule.CodePathSegment, node: never): void;\n\n\tonCodePathSegmentEnd?(segment: Rule.CodePathSegment, node: never): void;\n\n\tonCodePathSegmentLoop?(\n\t\tfromSegment: Rule.CodePathSegment,\n\t\ttoSegment: Rule.CodePathSegment,\n\t\tnode: never\n\t): void;\n\n\t[key: string]:\n\t\t| ((codePath: Rule.CodePath, node: never) => void)\n\t\t| ((segment: Rule.CodePathSegment, node: never) => void)\n\t\t| ((fromSegment: Rule.CodePathSegment, toSegment: Rule.CodePathSegment, node: never) => void)\n\t\t| ASTNodeListener[keyof ASTNodeListener]\n\t\t| ((node: never) => void)\n\t\t| undefined;\n}\n\nexport interface RuleModule {\n\tmeta: RuleMetaData;\n\tcreate: (context: RuleContext) => RuleListener;\n}\n\nexport type RuleCategory =\n\t| 'Possible Errors'\n\t| 'Security Vulnerability'\n\t| 'Best Practices'\n\t| 'Stylistic Issues'\n\t| 'Extension Rules'\n\t| 'SvelteKit'\n\t| 'Experimental'\n\t| 'System';\n\nexport interface RuleMetaData {\n\tdocs: {\n\t\tdescription: string;\n\t\tcategory: RuleCategory;\n\t\trecommended: boolean | 'base';\n\t\textensionRule?:\n\t\t\t| string\n\t\t\t| {\n\t\t\t\t\tplugin: string;\n\t\t\t\t\turl: string;\n\t\t\t  };\n\t\turl: string;\n\t\truleId: string;\n\t\truleName: string;\n\t\tdefault?: 'error' | 'warn';\n\t\tconflictWithPrettier?: boolean;\n\t};\n\tmessages: { [messageId: string]: string };\n\tfixable?: 'code' | 'whitespace';\n\thasSuggestions?: boolean;\n\tschema: JSONSchema4 | JSONSchema4[];\n\tdeprecated?: boolean;\n\treplacedBy?: string[] | { note: string };\n\ttype: 'problem' | 'suggestion' | 'layout';\n}\n\nexport interface PartialRuleModule {\n\tmeta: PartialRuleMetaData;\n\tcreate: (context: RuleContext) => RuleListener;\n}\n\nexport interface PartialRuleMetaData {\n\tdocs: {\n\t\tdescription: string;\n\t\trecommended: boolean | 'base';\n\t\textensionRule?:\n\t\t\t| string\n\t\t\t| {\n\t\t\t\t\tplugin: string;\n\t\t\t\t\turl: string;\n\t\t\t  };\n\t\tdefault?: 'error' | 'warn';\n\t} & (\n\t\t| {\n\t\t\t\tcategory: Exclude<RuleCategory, 'Stylistic Issues'>;\n\t\t\t\tconflictWithPrettier?: boolean;\n\t\t  }\n\t\t| {\n\t\t\t\tcategory: 'Stylistic Issues';\n\t\t\t\tconflictWithPrettier: boolean;\n\t\t  }\n\t);\n\tmessages: { [messageId: string]: string };\n\tfixable?: 'code' | 'whitespace';\n\thasSuggestions?: boolean;\n\tschema: JSONSchema4 | JSONSchema4[];\n\tdeprecated?: boolean;\n\treplacedBy?: string[] | { note: string };\n\ttype: 'problem' | 'suggestion' | 'layout';\n\t/**\n\t * Conditions to determine whether this rule should be applied.\n\t * Multiple conditions can be specified as array, and the rule will be applied if any one of them matches (logical OR).\n\t * If not specified, the rule will be applied to all files.\n\t */\n\tconditions?: {\n\t\tsvelteVersions?: SvelteContext['svelteVersion'][];\n\t\tsvelteFileTypes?: SvelteContext['svelteFileType'][];\n\t\trunes?: SvelteContext['runes'][];\n\t\tsvelteKitVersions?: SvelteContext['svelteKitVersion'][];\n\t\tsvelteKitFileTypes?: SvelteContext['svelteKitFileType'][];\n\t}[];\n}\n\nexport type RuleContext = {\n\tid: string;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\toptions: any[];\n\tsettings?: {\n\t\tsvelte?: {\n\t\t\tignoreWarnings?: unknown;\n\t\t\tcompileOptions?: {\n\t\t\t\tbabel?: boolean;\n\t\t\t\tpostcss?: false | { configFilePath?: unknown };\n\t\t\t};\n\t\t\tkit?: {\n\t\t\t\tfiles?: {\n\t\t\t\t\troutes?: string;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\tparserPath: string;\n\tparserOptions: Linter.ParserOptions;\n\tparserServices: ESLintSourceCode.ParserServices;\n\n\tgetAncestors(): ASTNode[];\n\n\tgetDeclaredVariables(node: TSESTree.Node): Variable[];\n\n\tfilename: string;\n\n\tgetScope(): Scope;\n\n\tsourceCode: SourceCode;\n\n\tmarkVariableAsUsed(name: string): boolean;\n\n\treport(descriptor: ReportDescriptor): void;\n\n\tcwd?: string;\n\n\tphysicalFilename: string;\n};\n\nexport type NodeOrToken = {\n\ttype: string;\n\tloc?: AST.SourceLocation | null;\n\trange?: [number, number];\n};\n\ninterface ReportDescriptorOptionsBase {\n\tdata?: { [key: string]: string };\n\n\tfix?: null | ((fixer: RuleFixer) => null | Rule.Fix | IterableIterator<Rule.Fix> | Rule.Fix[]);\n}\n\ntype SuggestionDescriptorMessage = { desc: string } | { messageId: string };\nexport type SuggestionReportDescriptor = SuggestionDescriptorMessage & ReportDescriptorOptionsBase;\n\ninterface ReportDescriptorOptions extends ReportDescriptorOptionsBase {\n\tsuggest?: SuggestionReportDescriptor[] | null;\n}\n\ntype ReportDescriptor = ReportDescriptorMessage &\n\tReportDescriptorLocation &\n\tReportDescriptorOptions;\ntype ReportDescriptorMessage = { message: string } | { messageId: string };\ntype ReportDescriptorLocation =\n\t| { node: NodeOrToken }\n\t| { loc: AST.SourceLocation | { line: number; column: number } };\n\nexport interface RuleFixer {\n\tinsertTextAfter(nodeOrToken: NodeOrToken, text: string): Rule.Fix;\n\n\tinsertTextAfterRange(range: AST.Range, text: string): Rule.Fix;\n\n\tinsertTextBefore(nodeOrToken: NodeOrToken, text: string): Rule.Fix;\n\n\tinsertTextBeforeRange(range: AST.Range, text: string): Rule.Fix;\n\n\tremove(nodeOrToken: NodeOrToken): Rule.Fix;\n\n\tremoveRange(range: AST.Range): Rule.Fix;\n\n\treplaceText(nodeOrToken: NodeOrToken, text: string): Rule.Fix;\n\n\treplaceTextRange(range: AST.Range, text: string): Rule.Fix;\n}\n// eslint-disable-next-line @typescript-eslint/no-namespace -- ignore\nexport declare namespace SourceCode {\n\texport function splitLines(text: string): string[];\n}\nexport interface SourceCode {\n\ttext: string;\n\tast: AST.SvelteProgram;\n\tlines: string[];\n\thasBOM: boolean;\n\tparserServices: {\n\t\tisSvelte?: boolean;\n\t\tisSvelteScript?: boolean;\n\t\tgetSvelteHtmlAst?: () => unknown;\n\t\tgetStyleContext?: () => StyleContext;\n\t\tgetStyleSelectorAST?: (rule: StyleRule) => SelectorRoot;\n\t\tstyleNodeLoc?: (node: Node) => Partial<SourceLocation>;\n\t\tstyleNodeRange?: (node: Node) => [number | undefined, number | undefined];\n\t\tstyleSelectorNodeLoc?: (node: SelectorNode) => Partial<SourceLocation>;\n\t\tsvelteParseContext?: {\n\t\t\t/**\n\t\t\t * Whether to use Runes mode.\n\t\t\t * May be `true` if the user is using Svelte v5.\n\t\t\t * Resolved from `svelte.config.js` or `parserOptions`, but may be overridden by `<svelte:options>`.\n\t\t\t */\n\t\t\trunes?: boolean;\n\t\t\t/** The version of \"svelte/compiler\". */\n\t\t\tcompilerVersion?: string;\n\t\t\t/** The result of static analysis of `svelte.config.js`. */\n\t\t\tsvelteConfig?: SvelteConfig | null;\n\t\t};\n\t\tprogram?: TS.Program;\n\t\tesTreeNodeToTSNodeMap?: ReadonlyMap<unknown, TS.Node>;\n\t\ttsNodeToESTreeNodeMap?: ReadonlyMap<TS.Node, ASTNode>;\n\t\thasFullTypeInformation?: boolean; // Old typescript-eslint\n\t\t[key: string]: unknown;\n\t};\n\tscopeManager: ScopeManager;\n\tvisitorKeys: ESLintSourceCode.VisitorKeys;\n\n\tgetText(node?: NodeOrToken, beforeCount?: number, afterCount?: number): string;\n\n\tgetLines(): string[];\n\n\tgetDeclaredVariables(node: TSESTree.Node): Variable[];\n\n\tgetAllComments(): AST.Comment[];\n\n\tgetComments(node: NodeOrToken): {\n\t\tleading: AST.Comment[];\n\t\ttrailing: AST.Comment[];\n\t};\n\n\tgetJSDocComment(node: NodeOrToken): AST.Comment | null;\n\n\tgetNodeByRangeIndex(index: number): ASTNodeWithParent | null;\n\n\tisSpaceBetweenTokens(first: AST.Token, second: AST.Token): boolean;\n\n\tgetLocFromIndex(index: number): AST.Position;\n\n\tgetIndexFromLoc(location: AST.Position): number;\n\n\t// Inherited methods from TokenStore\n\t// ---------------------------------\n\n\tgetTokenByRangeStart(\n\t\toffset: number,\n\t\toptions?: { includeComments?: boolean }\n\t): AST.Token | AST.Comment | null;\n\n\tgetFirstToken(node: NodeOrToken): AST.Token;\n\tgetFirstToken(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getFirstToken']>[1]\n\t): AST.Token | AST.Comment | null;\n\n\tgetFirstTokens(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getFirstTokens']>[1]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetLastToken(node: NodeOrToken): AST.Token;\n\tgetLastToken(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getLastToken']>[1]\n\t): AST.Token | AST.Comment | null;\n\n\tgetLastTokens(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getLastTokens']>[1]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetTokenBefore(node: NodeOrToken): AST.Token | null;\n\tgetTokenBefore(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getTokenBefore']>[1]\n\t): AST.Token | AST.Comment | null;\n\n\tgetTokensBefore(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getTokensBefore']>[1]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetTokenAfter(node: NodeOrToken): AST.Token | null;\n\tgetTokenAfter(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getTokenAfter']>[1]\n\t): AST.Token | AST.Comment | null;\n\n\tgetTokensAfter(\n\t\tnode: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getTokensAfter']>[1]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetFirstTokenBetween(\n\t\tleft: NodeOrToken,\n\t\tright: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getFirstTokenBetween']>[2]\n\t): AST.Token | AST.Comment | null;\n\n\tgetFirstTokensBetween(\n\t\tleft: NodeOrToken,\n\t\tright: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getFirstTokensBetween']>[2]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetLastTokenBetween(\n\t\tleft: NodeOrToken,\n\t\tright: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getLastTokenBetween']>[2]\n\t): AST.Token | AST.Comment | null;\n\n\tgetLastTokensBetween(\n\t\tleft: NodeOrToken,\n\t\tright: NodeOrToken,\n\t\toptions?: Parameters<ESLintSourceCode['getLastTokensBetween']>[2]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetTokensBetween(\n\t\tleft: NodeOrToken,\n\t\tright: NodeOrToken,\n\t\tpadding?: Parameters<ESLintSourceCode['getTokensBetween']>[2]\n\t): (AST.Token | AST.Comment)[];\n\n\tgetTokens(node: NodeOrToken, beforeCount?: number, afterCount?: number): AST.Token[];\n\tgetTokens(\n\t\tnode: NodeOrToken,\n\t\toptions: Parameters<ESLintSourceCode['getTokens']>[1]\n\t): (AST.Token | AST.Comment)[];\n\n\tcommentsExistBetween(left: NodeOrToken, right: NodeOrToken): boolean;\n\n\tgetCommentsBefore(nodeOrToken: NodeOrToken | AST.Token): AST.Comment[];\n\n\tgetCommentsAfter(nodeOrToken: NodeOrToken | AST.Token): AST.Comment[];\n\n\tgetCommentsInside(node: NodeOrToken): AST.Comment[];\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/ast-utils.ts",
    "content": "import type { ASTNode, RuleContext, SourceCode } from '../types.js';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { Scope, Variable } from '@typescript-eslint/scope-manager';\nimport type { AST as SvAST } from 'svelte-eslint-parser';\nimport * as eslintUtils from '@eslint-community/eslint-utils';\nimport { voidElements, svgElements, mathmlElements } from './element-types.js';\n\n/**\n * Checks whether or not the tokens of two given nodes are same.\n * @param left A node 1 to compare.\n * @param right A node 2 to compare.\n * @param sourceCode The ESLint source code object.\n * @returns  the source code for the given node.\n */\nexport function equalTokens(left: ASTNode, right: ASTNode, sourceCode: SourceCode): boolean {\n\tconst tokensL = sourceCode.getTokens(left);\n\tconst tokensR = sourceCode.getTokens(right);\n\n\tif (tokensL.length !== tokensR.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < tokensL.length; ++i) {\n\t\tif (tokensL[i].type !== tokensR[i].type || tokensL[i].value !== tokensR[i].value) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Get the value of a given node if it's a literal or a template literal.\n */\nexport function getStringIfConstant(\n\tnode: TSESTree.Expression | TSESTree.PrivateIdentifier\n): string | null {\n\tif (node.type === 'Literal') {\n\t\tif (typeof node.value === 'string') return node.value;\n\t} else if (node.type === 'TemplateLiteral') {\n\t\tlet str = '';\n\t\tconst quasis = [...node.quasis];\n\t\tconst expressions = [...node.expressions];\n\t\tlet quasi: TSESTree.TemplateElement | undefined, expr: TSESTree.Expression | undefined;\n\t\twhile ((quasi = quasis.shift())) {\n\t\t\tstr += quasi.value.cooked;\n\t\t\texpr = expressions.shift();\n\t\t\tif (expr) {\n\t\t\t\tconst exprStr = getStringIfConstant(expr);\n\t\t\t\tif (exprStr == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tstr += exprStr;\n\t\t\t}\n\t\t}\n\t\treturn str;\n\t} else if (node.type === 'BinaryExpression') {\n\t\tif (node.operator === '+') {\n\t\t\tconst left = getStringIfConstant(node.left);\n\t\t\tif (left == null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst right = getStringIfConstant(node.right);\n\t\t\tif (right == null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn left + right;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Check if it need parentheses.\n */\nexport function needParentheses(node: TSESTree.Expression, kind: 'not' | 'logical'): boolean {\n\tif (\n\t\tnode.type === 'ArrowFunctionExpression' ||\n\t\tnode.type === 'AssignmentExpression' ||\n\t\tnode.type === 'BinaryExpression' ||\n\t\tnode.type === 'ConditionalExpression' ||\n\t\tnode.type === 'LogicalExpression' ||\n\t\tnode.type === 'SequenceExpression' ||\n\t\tnode.type === 'UnaryExpression' ||\n\t\tnode.type === 'UpdateExpression'\n\t)\n\t\treturn true;\n\tif (kind === 'logical') {\n\t\treturn node.type === 'FunctionExpression';\n\t}\n\treturn false;\n}\n\n/** Checks whether the given node is the html element node or <svelte:element> node. */\nexport function isHTMLElementLike(\n\tnode: SvAST.SvelteElement | SvAST.SvelteScriptElement | SvAST.SvelteStyleElement\n): node is\n\t| SvAST.SvelteHTMLElement\n\t| (SvAST.SvelteSpecialElement & {\n\t\t\tname: SvAST.SvelteName & { name: 'svelte:element' };\n\t  }) {\n\tif (node.type !== 'SvelteElement') {\n\t\treturn false;\n\t}\n\n\tswitch (node.kind) {\n\t\tcase 'html':\n\t\t\treturn true;\n\t\tcase 'special':\n\t\t\treturn node.name.name === 'svelte:element';\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\n * Find the attribute from the given element node\n */\nexport function findAttribute<N extends string>(\n\tnode:\n\t\t| SvAST.SvelteElement\n\t\t| SvAST.SvelteScriptElement\n\t\t| SvAST.SvelteStyleElement\n\t\t| SvAST.SvelteStartTag,\n\tname: N\n):\n\t| (SvAST.SvelteAttribute & {\n\t\t\tkey: SvAST.SvelteAttribute['key'] & { name: N };\n\t  })\n\t| null {\n\tconst startTag = node.type === 'SvelteStartTag' ? node : node.startTag;\n\tfor (const attr of startTag.attributes) {\n\t\tif (attr.type === 'SvelteAttribute') {\n\t\t\tif (attr.key.name === name) {\n\t\t\t\treturn attr as never;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n/**\n * Find the shorthand attribute from the given element node\n */\nexport function findShorthandAttribute<N extends string>(\n\tnode:\n\t\t| SvAST.SvelteElement\n\t\t| SvAST.SvelteScriptElement\n\t\t| SvAST.SvelteStyleElement\n\t\t| SvAST.SvelteStartTag,\n\tname: N\n):\n\t| (SvAST.SvelteShorthandAttribute & {\n\t\t\tkey: SvAST.SvelteShorthandAttribute['key'] & { name: N };\n\t  })\n\t| null {\n\tconst startTag = node.type === 'SvelteStartTag' ? node : node.startTag;\n\tfor (const attr of startTag.attributes) {\n\t\tif (attr.type === 'SvelteShorthandAttribute') {\n\t\t\tif (attr.key.name === name) {\n\t\t\t\treturn attr as never;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Find the bind directive from the given element node\n */\nexport function findBindDirective<N extends string>(\n\tnode:\n\t\t| SvAST.SvelteElement\n\t\t| SvAST.SvelteScriptElement\n\t\t| SvAST.SvelteStyleElement\n\t\t| SvAST.SvelteStartTag,\n\tname: N\n):\n\t| (SvAST.SvelteBindingDirective & {\n\t\t\tkey: SvAST.SvelteDirectiveKey & {\n\t\t\t\tname: SvAST.SvelteDirectiveKey['name'] & { name: N };\n\t\t\t};\n\t  })\n\t| null {\n\tconst startTag = node.type === 'SvelteStartTag' ? node : node.startTag;\n\tfor (const attr of startTag.attributes) {\n\t\tif (attr.type === 'SvelteDirective') {\n\t\t\tif (attr.kind === 'Binding' && attr.key.name.name === name) {\n\t\t\t\treturn attr as never;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Get the static attribute value from given attribute\n */\nexport function getStaticAttributeValue(node: SvAST.SvelteAttribute): string | null {\n\tlet str = '';\n\tfor (const value of node.value) {\n\t\tif (value.type === 'SvelteLiteral') {\n\t\t\tstr += value.value;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn str;\n}\n/**\n * Get the static attribute value from given attribute\n */\nexport function getLangValue(\n\tnode: SvAST.SvelteScriptElement | SvAST.SvelteStyleElement\n): string | null {\n\tconst langAttr = findAttribute(node, 'lang');\n\treturn langAttr && getStaticAttributeValue(langAttr);\n}\n\n/**\n * Find the variable of a given name.\n */\nexport function findVariable(context: RuleContext, node: TSESTree.Identifier): Variable | null {\n\tconst initialScope = eslintUtils.getInnermostScope(getScope(context, node), node);\n\tconst variable = eslintUtils.findVariable(initialScope, node);\n\tif (variable) {\n\t\treturn variable;\n\t}\n\tif (!node.name.startsWith('$')) {\n\t\treturn variable;\n\t}\n\t// Remove the $ and search for the variable again, as it may be a store access variable.\n\treturn eslintUtils.findVariable(initialScope, node.name.slice(1));\n}\n\n/**\n * Context for safely finding variables, avoiding infinite recursion.\n * This should be used when the caller function may be called recursively, instead of `findVariable()`.\n *\n * Create an instance of this class at the top of the call stack where you want to start searching for identifiers,\n * and then use it within the recursion.\n */\nexport class FindVariableContext {\n\tpublic readonly findVariable: (node: TSESTree.Identifier) => Variable | null;\n\n\tpublic constructor(context: RuleContext) {\n\t\tconst visited = new Set<TSESTree.Identifier>();\n\t\tthis.findVariable = (node: TSESTree.Identifier) => {\n\t\t\tif (visited.has(node)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvisited.add(node);\n\t\t\treturn findVariable(context, node);\n\t\t};\n\t}\n}\n\n/**\n * Iterate the identifiers of a given pattern node.\n */\nexport function* iterateIdentifiers(\n\tnode: TSESTree.DestructuringPattern\n): Iterable<TSESTree.Identifier> {\n\tconst buffer = [node];\n\tlet pattern: TSESTree.DestructuringPattern | undefined;\n\twhile ((pattern = buffer.shift())) {\n\t\tif (pattern.type === 'Identifier') {\n\t\t\tyield pattern;\n\t\t} else if (pattern.type === 'ArrayPattern') {\n\t\t\tfor (const element of pattern.elements) {\n\t\t\t\tif (element) {\n\t\t\t\t\tbuffer.push(element);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (pattern.type === 'ObjectPattern') {\n\t\t\tfor (const property of pattern.properties) {\n\t\t\t\tif (property.type === 'Property') {\n\t\t\t\t\tbuffer.push(property.value as TSESTree.DestructuringPattern);\n\t\t\t\t} else if (property.type === 'RestElement') {\n\t\t\t\t\tbuffer.push(property);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (pattern.type === 'AssignmentPattern') {\n\t\t\tbuffer.push(pattern.left);\n\t\t} else if (pattern.type === 'RestElement') {\n\t\t\tbuffer.push(pattern.argument);\n\t\t} else if (pattern.type === 'MemberExpression') {\n\t\t\t// noop\n\t\t}\n\t}\n}\n\n/**\n * Gets the scope for the current node\n */\nexport function getScope(context: RuleContext, currentNode: TSESTree.Node): Scope {\n\tconst scopeManager = context.sourceCode.scopeManager;\n\n\tlet node: TSESTree.Node | null = currentNode;\n\tfor (; node; node = node.parent || null) {\n\t\tconst scope = scopeManager.acquire(node, false);\n\n\t\tif (scope) {\n\t\t\tif (scope.type === 'function-expression-name') {\n\t\t\t\treturn scope.childScopes[0];\n\t\t\t}\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\treturn scopeManager.scopes[0];\n}\n\n/** Get the parent node from the given node */\nexport function getParent(node: TSESTree.Node): TSESTree.Node | null {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ignore\n\treturn (node as any).parent || null;\n}\n\nexport type QuoteAndRange = {\n\tquote: 'unquoted' | 'double' | 'single';\n\trange: [number, number];\n\tfirstToken: SvAST.Token | SvAST.Comment;\n\tlastToken: SvAST.Token | SvAST.Comment;\n};\n/** Get the quote and range from given attribute values */\nexport function getAttributeValueQuoteAndRange(\n\tattr:\n\t\t| SvAST.SvelteAttribute\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteStyleDirective\n\t\t| SvAST.SvelteSpecialDirective,\n\tsourceCode: SourceCode\n): QuoteAndRange | null {\n\tconst valueTokens = getAttributeValueRangeTokens(attr, sourceCode);\n\tif (valueTokens == null) {\n\t\treturn null;\n\t}\n\tconst { firstToken: valueFirstToken, lastToken: valueLastToken } = valueTokens;\n\tconst eqToken = sourceCode.getTokenAfter(attr.key);\n\tif (!eqToken || eqToken.value !== '=' || valueFirstToken.range[0] < eqToken.range[1]) {\n\t\t// invalid\n\t\treturn null;\n\t}\n\tconst beforeTokens = sourceCode.getTokensBetween(eqToken, valueFirstToken);\n\tif (beforeTokens.length === 0) {\n\t\treturn {\n\t\t\tquote: 'unquoted',\n\t\t\trange: [valueFirstToken.range[0], valueLastToken.range[1]],\n\t\t\tfirstToken: valueFirstToken,\n\t\t\tlastToken: valueLastToken\n\t\t};\n\t} else if (\n\t\tbeforeTokens.length > 1 ||\n\t\t(beforeTokens[0].value !== '\"' && beforeTokens[0].value !== \"'\")\n\t) {\n\t\t// invalid\n\t\treturn null;\n\t}\n\tconst beforeToken = beforeTokens[0];\n\tconst afterToken = sourceCode.getTokenAfter(valueLastToken);\n\tif (!afterToken || afterToken.value !== beforeToken.value) {\n\t\t// invalid\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tquote: beforeToken.value === '\"' ? 'double' : 'single',\n\t\trange: [beforeToken.range[0], afterToken.range[1]],\n\t\tfirstToken: beforeToken,\n\t\tlastToken: afterToken\n\t};\n}\nexport function getMustacheTokens(\n\tnode:\n\t\t| SvAST.SvelteMustacheTag\n\t\t| SvAST.SvelteShorthandAttribute\n\t\t| SvAST.SvelteSpreadAttribute\n\t\t| SvAST.SvelteDebugTag\n\t\t| SvAST.SvelteRenderTag,\n\tsourceCode: SourceCode\n): {\n\topenToken: SvAST.Token;\n\tcloseToken: SvAST.Token;\n};\nexport function getMustacheTokens(\n\tnode:\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteSpecialDirective\n\t\t| SvAST.SvelteMustacheTag\n\t\t| SvAST.SvelteShorthandAttribute\n\t\t| SvAST.SvelteSpreadAttribute\n\t\t| SvAST.SvelteDebugTag\n\t\t| SvAST.SvelteRenderTag,\n\tsourceCode: SourceCode\n): {\n\topenToken: SvAST.Token;\n\tcloseToken: SvAST.Token;\n} | null;\n/** Get the mustache tokens from given node */\nexport function getMustacheTokens(\n\tnode:\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteSpecialDirective\n\t\t| SvAST.SvelteMustacheTag\n\t\t| SvAST.SvelteShorthandAttribute\n\t\t| SvAST.SvelteSpreadAttribute\n\t\t| SvAST.SvelteDebugTag\n\t\t| SvAST.SvelteRenderTag,\n\tsourceCode: SourceCode\n): {\n\topenToken: SvAST.Token;\n\tcloseToken: SvAST.Token;\n} | null {\n\tif (isWrappedInBraces(node)) {\n\t\tconst openToken = sourceCode.getFirstToken(node);\n\t\tconst closeToken = sourceCode.getLastToken(node);\n\t\treturn {\n\t\t\topenToken,\n\t\t\tcloseToken\n\t\t};\n\t}\n\tif (node.expression == null) {\n\t\treturn null;\n\t}\n\tif (\n\t\tnode.key.range[0] <= node.expression.range[0] &&\n\t\tnode.expression.range[1] <= node.key.range[1]\n\t) {\n\t\t// shorthand\n\t\treturn null;\n\t}\n\tlet openToken = sourceCode.getTokenBefore(node.expression);\n\tlet closeToken = sourceCode.getTokenAfter(node.expression);\n\twhile (\n\t\topenToken &&\n\t\tcloseToken &&\n\t\teslintUtils.isOpeningParenToken(openToken) &&\n\t\teslintUtils.isClosingParenToken(closeToken)\n\t) {\n\t\topenToken = sourceCode.getTokenBefore(openToken);\n\t\tcloseToken = sourceCode.getTokenAfter(closeToken);\n\t}\n\tif (\n\t\t!openToken ||\n\t\t!closeToken ||\n\t\teslintUtils.isNotOpeningBraceToken(openToken) ||\n\t\teslintUtils.isNotClosingBraceToken(closeToken)\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\topenToken,\n\t\tcloseToken\n\t};\n}\n\nfunction isWrappedInBraces(\n\tnode:\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteSpecialDirective\n\t\t| SvAST.SvelteMustacheTag\n\t\t| SvAST.SvelteShorthandAttribute\n\t\t| SvAST.SvelteSpreadAttribute\n\t\t| SvAST.SvelteDebugTag\n\t\t| SvAST.SvelteRenderTag\n): node is\n\t| SvAST.SvelteMustacheTag\n\t| SvAST.SvelteShorthandAttribute\n\t| SvAST.SvelteSpreadAttribute\n\t| SvAST.SvelteDebugTag\n\t| SvAST.SvelteRenderTag {\n\treturn (\n\t\tnode.type === 'SvelteMustacheTag' ||\n\t\tnode.type === 'SvelteShorthandAttribute' ||\n\t\tnode.type === 'SvelteSpreadAttribute' ||\n\t\tnode.type === 'SvelteDebugTag' ||\n\t\tnode.type === 'SvelteRenderTag'\n\t);\n}\n\n/** Get attribute key text */\nexport function getAttributeKeyText(\n\tnode:\n\t\t| SvAST.SvelteAttribute\n\t\t| SvAST.SvelteShorthandAttribute\n\t\t| SvAST.SvelteStyleDirective\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteSpecialDirective\n\t\t| SvAST.SvelteGenericsDirective\n\t\t| SvAST.SvelteAttachTag,\n\tcontext: RuleContext\n): string {\n\tswitch (node.type) {\n\t\tcase 'SvelteAttribute':\n\t\tcase 'SvelteShorthandAttribute':\n\t\tcase 'SvelteGenericsDirective':\n\t\t\treturn node.key.name;\n\t\tcase 'SvelteStyleDirective':\n\t\t\treturn `style:${node.key.name.name}`;\n\t\tcase 'SvelteSpecialDirective':\n\t\t\treturn node.kind;\n\t\tcase 'SvelteDirective': {\n\t\t\tconst dir = getDirectiveName(node);\n\t\t\treturn `${dir}:${getSimpleNameFromNode(node.key.name, context)}${\n\t\t\t\tnode.key.modifiers.length ? `|${node.key.modifiers.join('|')}` : ''\n\t\t\t}`;\n\t\t}\n\t\tcase 'SvelteAttachTag':\n\t\t\treturn '@attach';\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown node type: ${\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- error\n\t\t\t\t\t(node as any).type\n\t\t\t\t}`\n\t\t\t);\n\t}\n}\n\n/** Get directive name */\nexport function getDirectiveName(node: SvAST.SvelteDirective): string {\n\tswitch (node.kind) {\n\t\tcase 'Action':\n\t\t\treturn 'use';\n\t\tcase 'Animation':\n\t\t\treturn 'animate';\n\t\tcase 'Binding':\n\t\t\treturn 'bind';\n\t\tcase 'Class':\n\t\t\treturn 'class';\n\t\tcase 'EventHandler':\n\t\t\treturn 'on';\n\t\tcase 'Let':\n\t\t\treturn 'let';\n\t\tcase 'Transition':\n\t\t\treturn node.intro && node.outro ? 'transition' : node.intro ? 'in' : 'out';\n\t\tcase 'Ref':\n\t\t\treturn 'ref';\n\t\tdefault:\n\t\t\tthrow new Error('Unknown directive kind');\n\t}\n}\n\n/** Get the value tokens from given attribute */\nfunction getAttributeValueRangeTokens(\n\tattr:\n\t\t| SvAST.SvelteAttribute\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteStyleDirective\n\t\t| SvAST.SvelteSpecialDirective,\n\tsourceCode: SourceCode\n) {\n\tif (attr.type === 'SvelteAttribute' || attr.type === 'SvelteStyleDirective') {\n\t\tif (!attr.value.length) {\n\t\t\treturn null;\n\t\t}\n\t\tconst first = attr.value[0];\n\t\tconst last = attr.value[attr.value.length - 1];\n\t\treturn {\n\t\t\tfirstToken: sourceCode.getFirstToken(first),\n\t\t\tlastToken: sourceCode.getLastToken(last)\n\t\t};\n\t}\n\tconst tokens = getMustacheTokens(attr, sourceCode);\n\tif (!tokens) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tfirstToken: tokens.openToken,\n\t\tlastToken: tokens.closeToken\n\t};\n}\n\n/**\n * Extract all class names used in a HTML element attribute.\n */\nexport function findClassesInAttribute(\n\tattribute:\n\t\t| SvAST.SvelteAttribute\n\t\t| SvAST.SvelteShorthandAttribute\n\t\t| SvAST.SvelteSpreadAttribute\n\t\t| SvAST.SvelteDirective\n\t\t| SvAST.SvelteStyleDirective\n\t\t| SvAST.SvelteSpecialDirective\n\t\t| SvAST.SvelteGenericsDirective\n\t\t| SvAST.SvelteAttachTag\n): string[] {\n\tif (attribute.type === 'SvelteAttribute' && attribute.key.name === 'class') {\n\t\treturn attribute.value.flatMap((value) =>\n\t\t\tvalue.type === 'SvelteLiteral' ? value.value.trim().split(/\\s+/u) : []\n\t\t);\n\t}\n\tif (attribute.type === 'SvelteDirective' && attribute.kind === 'Class') {\n\t\treturn [attribute.key.name.name];\n\t}\n\treturn [];\n}\n\n/**\n * Returns name of SvelteElement\n */\nexport function getNodeName(node: SvAST.SvelteElement): string {\n\treturn getSimpleNameFromNode(node.name);\n}\n\n/**\n * Returns true if element is known void element\n * {@link https://developer.mozilla.org/en-US/docs/Glossary/Empty_element}\n */\nexport function isVoidHtmlElement(node: SvAST.SvelteElement): boolean {\n\treturn voidElements.includes(getNodeName(node));\n}\n\n/**\n * Returns true if element is known foreign (SVG or MathML) element\n */\nexport function isForeignElement(node: SvAST.SvelteElement): boolean {\n\treturn svgElements.includes(getNodeName(node)) || mathmlElements.includes(getNodeName(node));\n}\n\nexport function isSvgElement(node: SvAST.SvelteElement): boolean {\n\treturn svgElements.includes(getNodeName(node));\n}\n\nexport function isMathMLElement(node: SvAST.SvelteElement): boolean {\n\treturn mathmlElements.includes(getNodeName(node));\n}\n\n/** Checks whether the given identifier node is used as an expression. */\nexport function isExpressionIdentifier(node: TSESTree.Identifier): boolean {\n\tconst parent = node.parent;\n\tif (!parent) {\n\t\treturn true;\n\t}\n\tif (parent.type === 'MemberExpression') {\n\t\treturn !parent.computed || parent.property !== node;\n\t}\n\tif (\n\t\tparent.type === 'Property' ||\n\t\tparent.type === 'MethodDefinition' ||\n\t\tparent.type === 'PropertyDefinition'\n\t) {\n\t\treturn !parent.computed || parent.key !== node;\n\t}\n\tif (\n\t\tparent.type === 'FunctionDeclaration' ||\n\t\tparent.type === 'FunctionExpression' ||\n\t\tparent.type === 'ClassDeclaration' ||\n\t\tparent.type === 'ClassExpression'\n\t) {\n\t\treturn parent.id !== node;\n\t}\n\tif (\n\t\tparent.type === 'LabeledStatement' ||\n\t\tparent.type === 'BreakStatement' ||\n\t\tparent.type === 'ContinueStatement'\n\t) {\n\t\treturn parent.label !== node;\n\t}\n\tif (parent.type === 'MetaProperty') {\n\t\treturn parent.property !== node;\n\t}\n\tif (parent.type === 'ImportSpecifier') {\n\t\treturn parent.imported !== node;\n\t}\n\tif (parent.type === 'ExportSpecifier') {\n\t\treturn parent.exported !== node;\n\t}\n\n\treturn true;\n}\n\nfunction getSimpleNameFromNode(\n\tnode: SvAST.SvelteName | SvAST.SvelteMemberExpressionName | TSESTree.Identifier,\n\tcontext?: RuleContext\n): string;\nfunction getSimpleNameFromNode(\n\tnode:\n\t\t| SvAST.SvelteName\n\t\t| SvAST.SvelteMemberExpressionName\n\t\t| TSESTree.PrivateIdentifier\n\t\t| TSESTree.Expression,\n\tcontext: RuleContext\n): string;\n/** Get simple name from give node */\nfunction getSimpleNameFromNode(\n\tnode:\n\t\t| SvAST.SvelteName\n\t\t| SvAST.SvelteMemberExpressionName\n\t\t| TSESTree.PrivateIdentifier\n\t\t| TSESTree.Expression,\n\tcontext: RuleContext | undefined\n): string {\n\tif (node.type === 'Identifier' || node.type === 'SvelteName') {\n\t\treturn node.name;\n\t}\n\tif (\n\t\tnode.type === 'SvelteMemberExpressionName' ||\n\t\t(node.type === 'MemberExpression' && !node.computed)\n\t) {\n\t\treturn `${getSimpleNameFromNode(node.object, context!)}.${getSimpleNameFromNode(\n\t\t\tnode.property,\n\t\t\tcontext!\n\t\t)}`;\n\t}\n\n\t// No nodes other than those listed above are currently expected to be used in names.\n\n\tif (!context) {\n\t\tthrow new Error('Rule context is required');\n\t}\n\n\treturn context.sourceCode.getText(node);\n}\n\n/**\n * Finds the variable for a given name in the specified node's scope.\n * Also determines if the replacement name is already in use.\n *\n * If the `name` is set to null, this assumes you're adding a new variable\n * and reports if it is already in use.\n */\nexport function findVariableForReplacement(\n\tcontext: RuleContext,\n\tnode: TSESTree.Node,\n\tname: string | null,\n\treplacementName: string\n): { hasConflict: boolean; variable: Variable | null } {\n\tconst scope = getScope(context, node);\n\tlet variable: Variable | null = null;\n\n\tfor (const ref of scope.references) {\n\t\tif (ref.identifier.name === replacementName) {\n\t\t\treturn { hasConflict: true, variable: null };\n\t\t}\n\t}\n\n\tfor (const v of scope.variables) {\n\t\tif (v.name === replacementName) {\n\t\t\treturn { hasConflict: true, variable: null };\n\t\t}\n\t\tif (v.name === name) {\n\t\t\tvariable = v;\n\t\t}\n\t}\n\n\treturn { hasConflict: false, variable };\n}\n\n/**\n * Check if one node is contained withing the subtree of another node.\n */\nexport function isIn(needle: TSESTree.Node, haystack: TSESTree.Node): boolean {\n\tif (needle === haystack) {\n\t\treturn true;\n\t}\n\tif (needle.parent == null) {\n\t\treturn false;\n\t}\n\treturn isIn(needle.parent, haystack);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/cache.ts",
    "content": "/**\n * Simple cache manager.\n *\n * refer: https://github.com/mysticatea/eslint-plugin-node/blob/f45c6149be7235c0f7422d1179c25726afeecd83/lib/util/cache.js\n */\n\nconst SKIP_TIME = 5000;\n\ntype CacheValue<T> = {\n\texpire: number;\n\tvalue: T;\n};\n\n/**\n * The cache will dispose of each value if the value has not been accessed\n * during 5 seconds.\n * @returns getter and setter ofr the cache.\n */\nexport function createCache<T>(): {\n\tget: (key: string) => T | null;\n\tset: (key: string, value: T) => void;\n} {\n\tconst map: Map<string, CacheValue<T>> = new Map();\n\n\t/**\n\t * Get the cached value of the given key.\n\t * @param key The key to get.\n\t * @returns The cached value or null.\n\t */\n\tfunction get(key: string): T | null {\n\t\tconst entry = map.get(key);\n\t\tconst now = Date.now();\n\n\t\tif (entry) {\n\t\t\tif (entry.expire > now) {\n\t\t\t\tentry.expire = now + SKIP_TIME;\n\t\t\t\treturn entry.value;\n\t\t\t}\n\t\t\tmap.delete(key);\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Set the value of the given key.\n\t * @param key The key to set.\n\t * @param value The value to set.\n\t * @returns\n\t */\n\tfunction set(key: string, value: T): void {\n\t\tconst entry = map.get(key);\n\t\tconst expire = Date.now() + SKIP_TIME;\n\n\t\tif (entry) {\n\t\t\tentry.value = value;\n\t\t\tentry.expire = expire;\n\t\t} else {\n\t\t\tmap.set(key, { value, expire });\n\t\t}\n\t}\n\n\treturn { get, set };\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/css-utils/index.ts",
    "content": "export * from './style-attribute.js';\nexport * from './resource.js';\nexport * from './utils.js';\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/css-utils/resource.ts",
    "content": "export const SHORTHAND_PROPERTIES = new Map<string, string[]>([\n\t['margin', ['margin-top', 'margin-bottom', 'margin-left', 'margin-right']],\n\t['padding', ['padding-top', 'padding-bottom', 'padding-left', 'padding-right']],\n\t[\n\t\t'background',\n\t\t[\n\t\t\t'background-image',\n\t\t\t'background-size',\n\t\t\t'background-position',\n\t\t\t'background-repeat',\n\t\t\t'background-origin',\n\t\t\t'background-clip',\n\t\t\t'background-attachment',\n\t\t\t'background-color'\n\t\t]\n\t],\n\t[\n\t\t'font',\n\t\t[\n\t\t\t'font-style',\n\t\t\t'font-variant',\n\t\t\t'font-weight',\n\t\t\t'font-stretch',\n\t\t\t'font-size',\n\t\t\t'font-family',\n\t\t\t'line-height'\n\t\t]\n\t],\n\t[\n\t\t'border',\n\t\t[\n\t\t\t'border-top-width',\n\t\t\t'border-bottom-width',\n\t\t\t'border-left-width',\n\t\t\t'border-right-width',\n\t\t\t'border-top-style',\n\t\t\t'border-bottom-style',\n\t\t\t'border-left-style',\n\t\t\t'border-right-style',\n\t\t\t'border-top-color',\n\t\t\t'border-bottom-color',\n\t\t\t'border-left-color',\n\t\t\t'border-right-color'\n\t\t]\n\t],\n\t['border-top', ['border-top-width', 'border-top-style', 'border-top-color']],\n\t['border-bottom', ['border-bottom-width', 'border-bottom-style', 'border-bottom-color']],\n\t['border-left', ['border-left-width', 'border-left-style', 'border-left-color']],\n\t['border-right', ['border-right-width', 'border-right-style', 'border-right-color']],\n\t[\n\t\t'border-width',\n\t\t['border-top-width', 'border-bottom-width', 'border-left-width', 'border-right-width']\n\t],\n\t[\n\t\t'border-style',\n\t\t['border-top-style', 'border-bottom-style', 'border-left-style', 'border-right-style']\n\t],\n\t[\n\t\t'border-color',\n\t\t['border-top-color', 'border-bottom-color', 'border-left-color', 'border-right-color']\n\t],\n\t['list-style', ['list-style-type', 'list-style-position', 'list-style-image']],\n\t[\n\t\t'border-radius',\n\t\t[\n\t\t\t'border-top-right-radius',\n\t\t\t'border-top-left-radius',\n\t\t\t'border-bottom-right-radius',\n\t\t\t'border-bottom-left-radius'\n\t\t]\n\t],\n\t[\n\t\t'transition',\n\t\t['transition-delay', 'transition-duration', 'transition-property', 'transition-timing-function']\n\t],\n\t[\n\t\t'animation',\n\t\t[\n\t\t\t'animation-name',\n\t\t\t'animation-duration',\n\t\t\t'animation-timing-function',\n\t\t\t'animation-delay',\n\t\t\t'animation-iteration-count',\n\t\t\t'animation-direction',\n\t\t\t'animation-fill-mode',\n\t\t\t'animation-play-state'\n\t\t]\n\t],\n\t[\n\t\t'border-block-end',\n\t\t['border-block-end-width', 'border-block-end-style', 'border-block-end-color']\n\t],\n\t[\n\t\t'border-block-start',\n\t\t['border-block-start-width', 'border-block-start-style', 'border-block-start-color']\n\t],\n\t[\n\t\t'border-image',\n\t\t[\n\t\t\t'border-image-source',\n\t\t\t'border-image-slice',\n\t\t\t'border-image-width',\n\t\t\t'border-image-outset',\n\t\t\t'border-image-repeat'\n\t\t]\n\t],\n\t[\n\t\t'border-inline-end',\n\t\t['border-inline-end-width', 'border-inline-end-style', 'border-inline-end-color']\n\t],\n\t[\n\t\t'border-inline-start',\n\t\t['border-inline-start-width', 'border-inline-start-style', 'border-inline-start-color']\n\t],\n\t['column-rule', ['column-rule-width', 'column-rule-style', 'column-rule-color']],\n\t['columns', ['column-width', 'column-count']],\n\t['flex', ['flex-grow', 'flex-shrink', 'flex-basis']],\n\t['flex-flow', ['flex-direction', 'flex-wrap']],\n\t[\n\t\t'grid',\n\t\t[\n\t\t\t'grid-template-rows',\n\t\t\t'grid-template-columns',\n\t\t\t'grid-template-areas',\n\t\t\t'grid-auto-rows',\n\t\t\t'grid-auto-columns',\n\t\t\t'grid-auto-flow',\n\t\t\t'grid-column-gap',\n\t\t\t'grid-row-gap'\n\t\t]\n\t],\n\t['grid-area', ['grid-row-start', 'grid-column-start', 'grid-row-end', 'grid-column-end']],\n\t['grid-column', ['grid-column-start', 'grid-column-end']],\n\t['grid-gap', ['grid-row-gap', 'grid-column-gap']],\n\t['grid-row', ['grid-row-start', 'grid-row-end']],\n\t['grid-template', ['grid-template-columns', 'grid-template-rows', 'grid-template-areas']],\n\t['outline', ['outline-color', 'outline-style', 'outline-width']],\n\t['text-decoration', ['text-decoration-color', 'text-decoration-style', 'text-decoration-line']],\n\t['text-emphasis', ['text-emphasis-style', 'text-emphasis-color']],\n\t[\n\t\t'mask',\n\t\t[\n\t\t\t'mask-image',\n\t\t\t'mask-mode',\n\t\t\t'mask-position',\n\t\t\t'mask-size',\n\t\t\t'mask-repeat',\n\t\t\t'mask-origin',\n\t\t\t'mask-clip',\n\t\t\t'mask-composite'\n\t\t]\n\t]\n]);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/css-utils/style-attribute.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport type { RuleContext } from '../../types.js';\nimport Parser from './template-safe-parser.js';\nimport type { Root, ChildNode, AnyNode } from 'postcss';\nimport { Input } from 'postcss';\nimport type { TSESTree } from '@typescript-eslint/types';\n\n/** Parse for CSS */\nfunction safeParseCss(css: string): Root | null {\n\ttry {\n\t\tconst input = new Input(css);\n\t\tconst parser = new Parser(input);\n\t\tparser.parse();\n\t\treturn parser.root;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst cache = new WeakMap<AST.SvelteAttribute>();\n\n/**\n * Parse style attribute value\n */\nexport function parseStyleAttributeValue(\n\tnode: AST.SvelteAttribute,\n\tcontext: RuleContext\n): SvelteStyleRoot<AST.SvelteMustacheTagText> | null {\n\tif (cache.has(node)) {\n\t\treturn cache.get(node) || null;\n\t}\n\tcache.set(node, null);\n\tif (!node.value?.length) {\n\t\treturn null;\n\t}\n\tconst startOffset = node.value[0].range[0];\n\tconst sourceCode = context.sourceCode;\n\tconst cssCode = node.value.map((value) => sourceCode.getText(value)).join('');\n\tconst root = safeParseCss(cssCode);\n\tif (!root) {\n\t\treturn root;\n\t}\n\tconst ctx: Ctx = {\n\t\tstartOffset,\n\t\tvalue: node.value,\n\t\tcontext\n\t};\n\n\tconst mustacheTags = node.value.filter(\n\t\t(v): v is AST.SvelteMustacheTagText => v.type === 'SvelteMustacheTag'\n\t);\n\n\tconst converted = convertRoot(root, mustacheTags, (e) => e.range, ctx);\n\tcache.set(node, converted);\n\treturn converted;\n}\n\nexport type SvelteStyleInterpolation = AST.SvelteMustacheTagText | TSESTree.Expression;\n\nexport interface SvelteStyleNode<E extends SvelteStyleInterpolation> {\n\tnodes?: SvelteStyleChildNode<E>[];\n\trange: AST.Range;\n\tloc: AST.SourceLocation;\n}\nexport interface SvelteStyleRoot<E extends SvelteStyleInterpolation = SvelteStyleInterpolation> {\n\ttype: 'root';\n\tnodes: (SvelteStyleChildNode<E> | SvelteStyleInline<E>)[];\n}\nexport interface SvelteStyleInline<\n\tE extends SvelteStyleInterpolation = SvelteStyleInterpolation\n> extends SvelteStyleNode<E> {\n\ttype: 'inline';\n\tnode: E;\n\tgetInlineStyle(node: TSESTree.Expression): SvelteStyleRoot<TSESTree.Expression> | null;\n\tgetAllInlineStyles(): Map<TSESTree.Expression, SvelteStyleRoot<TSESTree.Expression>>;\n}\nexport interface SvelteStyleDeclaration<\n\tE extends SvelteStyleInterpolation = SvelteStyleInterpolation\n> extends SvelteStyleNode<E> {\n\ttype: 'decl';\n\tprop: {\n\t\tname: string;\n\t\trange: AST.Range;\n\t\tloc: AST.SourceLocation;\n\t\tinterpolations: E[];\n\t};\n\tvalue: {\n\t\tvalue: string;\n\t\trange: AST.Range;\n\t\tloc: AST.SourceLocation;\n\t\tinterpolations: E[];\n\t};\n\timportant: boolean;\n\taddInterpolation: (tagOrExpr: E) => void;\n\tunknownInterpolations: E[];\n}\nexport interface SvelteStyleComment extends SvelteStyleNode<never> {\n\ttype: 'comment';\n\taddInterpolation: (tagOrExpr: SvelteStyleInterpolation) => void;\n}\n\nexport type SvelteStyleChildNode<E extends SvelteStyleInterpolation = SvelteStyleInterpolation> =\n\t| SvelteStyleDeclaration<E>\n\t| SvelteStyleComment;\n\nclass IgnoreError extends Error {}\n\ntype Ctx = {\n\tstartOffset: number;\n\tvalue: AST.SvelteAttribute['value'];\n\tcontext: RuleContext;\n};\n\n/** Checks wether the given node is string literal or not  */\nfunction isStringLiteral(node: TSESTree.Expression): node is TSESTree.Literal & { value: string } {\n\treturn node.type === 'Literal' && typeof node.value === 'string';\n}\n\n/** convert root node */\nfunction convertRoot<E extends SvelteStyleInterpolation>(\n\troot: Root,\n\tinterpolations: E[],\n\tgetRange: (e: E) => AST.Range,\n\tctx: Ctx\n): SvelteStyleRoot<E> | null {\n\tconst nodes: (SvelteStyleChildNode<E> | SvelteStyleInline<E>)[] = [];\n\tfor (const child of root.nodes) {\n\t\tconst converted = convertChild<E>(child, ctx);\n\t\tif (!converted) {\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (interpolations[0]) {\n\t\t\tconst tagOrExpr = interpolations[0];\n\t\t\tif (tagOrExpr.range[1] <= converted.range[0]) {\n\t\t\t\tnodes.push(buildSvelteStyleInline(tagOrExpr));\n\t\t\t\tinterpolations.shift();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (tagOrExpr.range[0] < converted.range[1]) {\n\t\t\t\ttry {\n\t\t\t\t\tconverted.addInterpolation(tagOrExpr);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof IgnoreError) return null;\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t\tinterpolations.shift();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tnodes.push(converted);\n\t}\n\n\tnodes.push(...interpolations.map(buildSvelteStyleInline));\n\n\treturn {\n\t\ttype: 'root',\n\t\tnodes\n\t};\n\n\t/** Build SvelteStyleInline */\n\tfunction buildSvelteStyleInline(tagOrExpr: E): SvelteStyleInline<E> {\n\t\tconst inlineStyles = new Map<\n\t\t\tTSESTree.Expression,\n\t\t\tSvelteStyleRoot<TSESTree.Expression> | null\n\t\t>();\n\t\tlet range: AST.Range | null = null;\n\n\t\t/** Get range */\n\t\tfunction getRangeForInline() {\n\t\t\tif (range) {\n\t\t\t\treturn range;\n\t\t\t}\n\t\t\treturn range ?? (range = getRange(tagOrExpr));\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'inline',\n\t\t\tnode: tagOrExpr,\n\t\t\tget range() {\n\t\t\t\treturn getRangeForInline();\n\t\t\t},\n\t\t\tget loc() {\n\t\t\t\treturn toLoc(getRangeForInline(), ctx);\n\t\t\t},\n\t\t\tgetInlineStyle(node) {\n\t\t\t\treturn getInlineStyle(node);\n\t\t\t},\n\t\t\tgetAllInlineStyles() {\n\t\t\t\tconst allInlineStyles = new Map<\n\t\t\t\t\tTSESTree.Expression,\n\t\t\t\t\tSvelteStyleRoot<TSESTree.Expression>\n\t\t\t\t>();\n\t\t\t\tfor (const node of extractExpressions(tagOrExpr)) {\n\t\t\t\t\tconst style = getInlineStyle(node);\n\t\t\t\t\tif (style) {\n\t\t\t\t\t\tallInlineStyles.set(node, style);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn allInlineStyles;\n\t\t\t}\n\t\t};\n\n\t\t/** Get inline style node */\n\t\tfunction getInlineStyle(\n\t\t\tnode: SvelteStyleInterpolation\n\t\t): SvelteStyleRoot<TSESTree.Expression> | null {\n\t\t\tif (node.type === 'SvelteMustacheTag') {\n\t\t\t\treturn getInlineStyle(node.expression);\n\t\t\t}\n\t\t\tif (inlineStyles.has(node)) {\n\t\t\t\treturn inlineStyles.get(node) || null;\n\t\t\t}\n\t\t\tconst sourceCode = ctx.context.sourceCode;\n\t\t\tinlineStyles.set(node, null);\n\n\t\t\tlet converted: SvelteStyleRoot<TSESTree.Expression> | null;\n\t\t\tif (isStringLiteral(node)) {\n\t\t\t\tconst root = safeParseCss(sourceCode.getText(node).slice(1, -1));\n\t\t\t\tif (!root) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconverted = convertRoot<TSESTree.Expression>(root, [], () => [0, 0], {\n\t\t\t\t\t...ctx,\n\t\t\t\t\tstartOffset: node.range[0] + 1\n\t\t\t\t});\n\t\t\t} else if (node.type === 'TemplateLiteral') {\n\t\t\t\tconst root = safeParseCss(sourceCode.getText(node).slice(1, -1));\n\t\t\t\tif (!root) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconverted = convertRoot(\n\t\t\t\t\troot,\n\t\t\t\t\t[...node.expressions],\n\t\t\t\t\t(e) => {\n\t\t\t\t\t\tconst index = node.expressions.indexOf(e);\n\t\t\t\t\t\treturn [node.quasis[index].range[1] - 2, node.quasis[index + 1].range[0] + 1];\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\tstartOffset: node.range[0] + 1\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tinlineStyles.set(node, converted);\n\t\t\treturn converted;\n\t\t}\n\n\t\t/** Extract all expressions */\n\t\tfunction* extractExpressions(\n\t\t\tnode: SvelteStyleInterpolation\n\t\t): Iterable<TSESTree.StringLiteral | TSESTree.TemplateLiteral> {\n\t\t\tif (node.type === 'SvelteMustacheTag') {\n\t\t\t\tyield* extractExpressions(node.expression);\n\t\t\t} else if (isStringLiteral(node)) {\n\t\t\t\tyield node;\n\t\t\t} else if (node.type === 'TemplateLiteral') {\n\t\t\t\tyield node;\n\t\t\t} else if (node.type === 'ConditionalExpression') {\n\t\t\t\tyield* extractExpressions(node.consequent);\n\t\t\t\tyield* extractExpressions(node.alternate);\n\t\t\t} else if (node.type === 'LogicalExpression') {\n\t\t\t\tyield* extractExpressions(node.left);\n\t\t\t\tyield* extractExpressions(node.right);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** convert child node */\nfunction convertChild<E extends SvelteStyleInterpolation>(\n\tnode: ChildNode,\n\tctx: Ctx\n): SvelteStyleChildNode<E> | null {\n\tconst range = convertRange(node, ctx);\n\tif (node.type === 'decl') {\n\t\tconst propRange: AST.Range = [range[0], range[0] + node.prop.length];\n\t\tconst declValueStartIndex = propRange[1] + (node.raws.between || '').length;\n\t\tconst valueRange: AST.Range = [\n\t\t\tdeclValueStartIndex,\n\t\t\tdeclValueStartIndex + (node.raws.value?.value || node.value).length\n\t\t];\n\t\tconst prop: SvelteStyleDeclaration<E>['prop'] = {\n\t\t\tname: node.prop,\n\t\t\trange: propRange,\n\t\t\tget loc() {\n\t\t\t\treturn toLoc(propRange, ctx);\n\t\t\t},\n\t\t\tinterpolations: []\n\t\t};\n\t\tconst value: SvelteStyleDeclaration<E>['value'] = {\n\t\t\tvalue: node.value,\n\t\t\trange: valueRange,\n\t\t\tget loc() {\n\t\t\t\treturn toLoc(valueRange, ctx);\n\t\t\t},\n\t\t\tinterpolations: []\n\t\t};\n\t\tconst unknownInterpolations: E[] = [];\n\t\treturn {\n\t\t\ttype: 'decl',\n\t\t\tprop,\n\t\t\tvalue,\n\t\t\timportant: node.important,\n\t\t\trange,\n\t\t\tget loc() {\n\t\t\t\treturn toLoc(range, ctx);\n\t\t\t},\n\t\t\taddInterpolation(tagOrExpr) {\n\t\t\t\tconst index = tagOrExpr.range[0];\n\t\t\t\tif (prop.range[0] <= index && index < prop.range[1]) {\n\t\t\t\t\tprop.interpolations.push(tagOrExpr);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (value.range[0] <= index && index < value.range[1]) {\n\t\t\t\t\tvalue.interpolations.push(tagOrExpr);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tunknownInterpolations.push(tagOrExpr);\n\t\t\t},\n\t\t\tunknownInterpolations\n\t\t};\n\t}\n\tif (node.type === 'comment') {\n\t\treturn {\n\t\t\ttype: 'comment',\n\t\t\trange,\n\t\t\tget loc() {\n\t\t\t\treturn toLoc(range, ctx);\n\t\t\t},\n\t\t\taddInterpolation: () => {\n\t\t\t\tthrow new IgnoreError();\n\t\t\t}\n\t\t};\n\t}\n\tif (node.type === 'atrule') {\n\t\t// unexpected node\n\t\treturn null;\n\t}\n\tif (node.type === 'rule') {\n\t\t// unexpected node\n\t\treturn null;\n\t}\n\t// unknown node\n\treturn null;\n}\n\n/** convert range */\nfunction convertRange(node: AnyNode, ctx: Ctx): AST.Range {\n\treturn [ctx.startOffset + node.source!.start!.offset, ctx.startOffset + node.source!.end!.offset];\n}\n\n/** convert range */\nfunction toLoc(range: AST.Range, ctx: Ctx): AST.SourceLocation {\n\treturn {\n\t\tstart: ctx.context.sourceCode.getLocFromIndex(range[0]),\n\t\tend: ctx.context.sourceCode.getLocFromIndex(range[1])\n\t};\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts",
    "content": "import SafeParser from 'postcss-safe-parser/lib/safe-parser.js';\nimport templateTokenize from './template-tokenize.js';\nclass TemplateSafeParser extends SafeParser {\n\tprotected createTokenizer(): void {\n\t\tthis.tokenizer = templateTokenize(this.input, { ignoreErrors: true });\n\t}\n}\nexport default TemplateSafeParser;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/css-utils/template-tokenize.ts",
    "content": "import type { Tokenizer, Token } from 'postcss/lib/tokenize';\nimport tokenize from 'postcss/lib/tokenize';\n\ntype Tokenize = typeof tokenize;\n\n/** Tokenize */\nfunction templateTokenize(...args: Parameters<Tokenize>): Tokenizer {\n\tconst tokenizer = tokenize(...args);\n\n\t/** nextToken */\n\tfunction nextToken(\n\t\t...args: Parameters<Tokenizer['nextToken']>\n\t): ReturnType<Tokenizer['nextToken']> {\n\t\tconst returned = [];\n\t\tlet token: Token | undefined, lastPos;\n\t\tlet depth = 0;\n\n\t\twhile ((token = tokenizer.nextToken(...args))) {\n\t\t\tif (token[0] !== 'word') {\n\t\t\t\tif (token[0] === '{') {\n\t\t\t\t\t++depth;\n\t\t\t\t} else if (token[0] === '}') {\n\t\t\t\t\t--depth;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (depth || returned.length) {\n\t\t\t\tlastPos = token[3] || token[2] || lastPos;\n\t\t\t\treturned.push(token);\n\t\t\t}\n\t\t\tif (!depth) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (returned.length) {\n\t\t\ttoken = ['word', returned.map((token) => token[1]).join(''), returned[0][2], lastPos];\n\t\t}\n\t\treturn token;\n\t}\n\n\treturn Object.assign({}, tokenizer, {\n\t\tnextToken\n\t});\n}\n\nexport default templateTokenize;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/css-utils/utils.ts",
    "content": "/**\n * Checks whether given property name has vender prefix\n */\nexport function hasVendorPrefix(prop: string): boolean {\n\treturn Boolean(getVendorPrefix(prop));\n}\n\n/**\n * Get the vender prefix from given property name\n */\nexport function getVendorPrefix(prop: string): string {\n\treturn /^-\\w+-/u.exec(prop)?.[0] || '';\n}\n\n/**\n * Strip the vender prefix\n */\nexport function stripVendorPrefix(prop: string): string {\n\treturn prop.slice(getVendorPrefix(prop).length);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/element-occurences.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\n\nexport enum ElementOccurenceCount {\n\tZeroOrOne,\n\tOne,\n\tZeroToInf\n}\n\nfunction multiplyCounts(\n\tleft: ElementOccurenceCount,\n\tright: ElementOccurenceCount\n): ElementOccurenceCount {\n\tif (left === ElementOccurenceCount.One) {\n\t\treturn right;\n\t}\n\tif (right === ElementOccurenceCount.One) {\n\t\treturn left;\n\t}\n\tif (left === right) {\n\t\treturn left;\n\t}\n\treturn ElementOccurenceCount.ZeroToInf;\n}\n\nfunction childElementOccurenceCount(parent: AST.SvelteHTMLNode | null): ElementOccurenceCount {\n\tif (parent === null) {\n\t\treturn ElementOccurenceCount.One;\n\t}\n\tif (\n\t\t[\n\t\t\t'SvelteIfBlock',\n\t\t\t'SvelteElseBlock',\n\t\t\t'SvelteAwaitBlock',\n\t\t\t'SvelteAwaitPendingBlock',\n\t\t\t'SvelteAwaitThenBlock',\n\t\t\t'SvelteAwaitCatchBlock'\n\t\t].includes(parent.type)\n\t) {\n\t\treturn ElementOccurenceCount.ZeroOrOne;\n\t}\n\tif (\n\t\t['SvelteEachBlock', 'SvelteSnippetBlock'].includes(parent.type) ||\n\t\t(parent.type === 'SvelteElement' && parent.kind === 'component')\n\t) {\n\t\treturn ElementOccurenceCount.ZeroToInf;\n\t}\n\treturn ElementOccurenceCount.One;\n}\n\nexport function elementOccurrenceCount(element: AST.SvelteHTMLNode): ElementOccurenceCount {\n\tconst parentCount =\n\t\telement.parent !== null ? elementOccurrenceCount(element.parent) : ElementOccurenceCount.One;\n\tconst parentChildCount = childElementOccurenceCount(element.parent);\n\treturn multiplyCounts(parentCount, parentChildCount);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/element-types.ts",
    "content": "export const voidElements = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'menuitem',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\nexport const svgElements = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\nexport const mathmlElements = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/eslint-core.ts",
    "content": "/* eslint @typescript-eslint/no-explicit-any: off -- util */\nimport type { RuleListener, RuleContext, RuleModule } from '../types.js';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { AST as SvAST } from 'svelte-eslint-parser';\nimport { Linter } from 'eslint';\nimport Module from 'module';\n\nconst require = Module.createRequire(import.meta.url);\n/**\n * Define the wrapped core rule.\n */\nexport function defineWrapperListener(\n\tcoreRule: RuleModule,\n\tcontext: RuleContext,\n\tproxyOptions: {\n\t\tcreateListenerProxy?: (listener: RuleListener) => RuleListener;\n\t}\n): RuleListener {\n\tconst listener = coreRule.create(context as any);\n\n\tconst svelteListener = proxyOptions.createListenerProxy?.(listener) ?? listener;\n\n\treturn svelteListener;\n}\n\n/**\n * Get the proxy node\n */\nexport function getProxyNode(node: { type: string }, properties: any): any {\n\tconst cache: any = {};\n\treturn new Proxy(node, {\n\t\tget(_t, key) {\n\t\t\tif (key in cache) {\n\t\t\t\treturn cache[key];\n\t\t\t}\n\t\t\tif (key in properties) {\n\t\t\t\treturn (cache[key] = properties[key]);\n\t\t\t}\n\t\t\treturn (node as any)[key];\n\t\t}\n\t});\n}\n\n/**\n * Build the proxy rule listener\n */\nexport function buildProxyListener(\n\tbase: RuleListener,\n\tconvertNode: (\n\t\tnode: SvAST.SvelteNode | (TSESTree.Node & { parent: SvAST.SvelteNode | TSESTree.Node | null })\n\t) => any\n): RuleListener {\n\tconst listeners: RuleListener = {};\n\tfor (const [key, listener] of Object.entries(base)) {\n\t\tlisteners[key] = function (...args: [any, any, any]) {\n\t\t\t(listener! as any).call(\n\t\t\t\tthis,\n\t\t\t\t...args.map((arg) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof arg === 'object' &&\n\t\t\t\t\t\t'type' in arg &&\n\t\t\t\t\t\ttypeof arg.type === 'string' &&\n\t\t\t\t\t\t'range' in arg\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn convertNode(arg);\n\t\t\t\t\t}\n\t\t\t\t\treturn arg;\n\t\t\t\t})\n\t\t\t);\n\t\t};\n\t}\n\treturn listeners;\n}\n\nlet ruleMap: Map<string, RuleModule> | null = null;\n\n/**\n * Get the core rule implementation from the rule name\n */\nexport function getCoreRule(ruleName: string): RuleModule {\n\ttry {\n\t\tconst map: Map<string, RuleModule> = ruleMap\n\t\t\t? ruleMap\n\t\t\t: (ruleMap = (new Linter() as any).getRules());\n\t\treturn map.get(ruleName)!;\n\t} catch {\n\t\t// getRules() is no longer available in flat config.\n\t}\n\n\tconst { builtinRules } = require('eslint/use-at-your-own-risk');\n\truleMap = builtinRules;\n\treturn builtinRules.get(ruleName) || null;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/events.ts",
    "content": "// see: https://github.com/sveltejs/svelte/blob/a129592e5b248a734a68da6e9028941803a3d063/packages/svelte/elements.d.ts#L83\nexport const EVENT_NAMES: string[] = [\n\t// Clipboard Events\n\t'on:copy',\n\t'oncopy',\n\t'oncopycapture',\n\t'on:cut',\n\t'oncut',\n\t'oncutcapture',\n\t'on:paste',\n\t'onpaste',\n\t'onpastecapture',\n\n\t// Composition Events\n\t'on:compositionend',\n\t'oncompositionend',\n\t'oncompositionendcapture',\n\t'on:compositionstart',\n\t'oncompositionstart',\n\t'oncompositionstartcapture',\n\t'on:compositionupdate',\n\t'oncompositionupdate',\n\t'oncompositionupdatecapture',\n\n\t// Focus Events\n\t'on:focus',\n\t'onfocus',\n\t'onfocuscapture',\n\t'on:focusin',\n\t'onfocusin',\n\t'onfocusincapture',\n\t'on:focusout',\n\t'onfocusout',\n\t'onfocusoutcapture',\n\t'on:blur',\n\t'onblur',\n\t'onblurcapture',\n\n\t// Form Events\n\t'on:change',\n\t'onchange',\n\t'onchangecapture',\n\t'on:beforeinput',\n\t'onbeforeinput',\n\t'onbeforeinputcapture',\n\t// oninput can be either an InputEvent or an Event, depending on the target element (input, textarea etc).\n\t'on:input',\n\t'oninput',\n\t'oninputcapture',\n\t'on:reset',\n\t'onreset',\n\t'onresetcapture',\n\t'on:submit',\n\t'onsubmit',\n\t'onsubmitcapture',\n\t'on:invalid',\n\t'oninvalid',\n\t'oninvalidcapture',\n\t'on:formdata',\n\t'onformdata',\n\t'onformdatacapture',\n\n\t// Image Events\n\t'on:load',\n\t'onload',\n\t'onloadcapture',\n\t'on:error',\n\t'onerror',\n\t'onerrorcapture',\n\n\t// Popover Events\n\t'on:beforetoggle',\n\t'onbeforetoggle',\n\t'onbeforetogglecapture',\n\t'on:toggle',\n\t'ontoggle',\n\t'ontogglecapture',\n\n\t// Content visibility Events\n\t'on:contentvisibilityautostatechange',\n\t'oncontentvisibilityautostatechange',\n\t'oncontentvisibilityautostatechangecapture',\n\t// Keyboard Events\n\t'on:keydown',\n\t'onkeydown',\n\t'onkeydowncapture',\n\t'on:keypress',\n\t'onkeypress',\n\t'onkeypresscapture',\n\t'on:keyup',\n\t'onkeyup',\n\t'onkeyupcapture',\n\n\t// Media Events\n\t'on:abort',\n\t'onabort',\n\t'onabortcapture',\n\t'on:canplay',\n\t'oncanplay',\n\t'oncanplaycapture',\n\t'on:canplaythrough',\n\t'oncanplaythrough',\n\t'oncanplaythroughcapture',\n\t'on:cuechange',\n\t'oncuechange',\n\t'oncuechangecapture',\n\t'on:durationchange',\n\t'ondurationchange',\n\t'ondurationchangecapture',\n\t'on:emptied',\n\t'onemptied',\n\t'onemptiedcapture',\n\t'on:encrypted',\n\t'onencrypted',\n\t'onencryptedcapture',\n\t'on:ended',\n\t'onended',\n\t'onendedcapture',\n\t'on:loadeddata',\n\t'onloadeddata',\n\t'onloadeddatacapture',\n\t'on:loadedmetadata',\n\t'onloadedmetadata',\n\t'onloadedmetadatacapture',\n\t'on:loadstart',\n\t'onloadstart',\n\t'onloadstartcapture',\n\t'on:pause',\n\t'onpause',\n\t'onpausecapture',\n\t'on:play',\n\t'onplay',\n\t'onplaycapture',\n\t'on:playing',\n\t'onplaying',\n\t'onplayingcapture',\n\t'on:progress',\n\t'onprogress',\n\t'onprogresscapture',\n\t'on:ratechange',\n\t'onratechange',\n\t'onratechangecapture',\n\t'on:seeked',\n\t'onseeked',\n\t'onseekedcapture',\n\t'on:seeking',\n\t'onseeking',\n\t'onseekingcapture',\n\t'on:stalled',\n\t'onstalled',\n\t'onstalledcapture',\n\t'on:suspend',\n\t'onsuspend',\n\t'onsuspendcapture',\n\t'on:timeupdate',\n\t'ontimeupdate',\n\t'ontimeupdatecapture',\n\t'on:volumechange',\n\t'onvolumechange',\n\t'onvolumechangecapture',\n\t'on:waiting',\n\t'onwaiting',\n\t'onwaitingcapture',\n\n\t// MouseEvents\n\t'on:auxclick',\n\t'onauxclick',\n\t'onauxclickcapture',\n\t'on:click',\n\t'onclick',\n\t'onclickcapture',\n\t'on:contextmenu',\n\t'oncontextmenu',\n\t'oncontextmenucapture',\n\t'on:dblclick',\n\t'ondblclick',\n\t'ondblclickcapture',\n\t'on:drag',\n\t'ondrag',\n\t'ondragcapture',\n\t'on:dragend',\n\t'ondragend',\n\t'ondragendcapture',\n\t'on:dragenter',\n\t'ondragenter',\n\t'ondragentercapture',\n\t'on:dragexit',\n\t'ondragexit',\n\t'ondragexitcapture',\n\t'on:dragleave',\n\t'ondragleave',\n\t'ondragleavecapture',\n\t'on:dragover',\n\t'ondragover',\n\t'ondragovercapture',\n\t'on:dragstart',\n\t'ondragstart',\n\t'ondragstartcapture',\n\t'on:drop',\n\t'ondrop',\n\t'ondropcapture',\n\t'on:mousedown',\n\t'onmousedown',\n\t'onmousedowncapture',\n\t'on:mouseenter',\n\t'onmouseenter',\n\t'on:mouseleave',\n\t'onmouseleave',\n\t'on:mousemove',\n\t'onmousemove',\n\t'onmousemovecapture',\n\t'on:mouseout',\n\t'onmouseout',\n\t'onmouseoutcapture',\n\t'on:mouseover',\n\t'onmouseover',\n\t'onmouseovercapture',\n\t'on:mouseup',\n\t'onmouseup',\n\t'onmouseupcapture',\n\n\t// Selection Events\n\t'on:select',\n\t'onselect',\n\t'onselectcapture',\n\t'on:selectionchange',\n\t'onselectionchange',\n\t'onselectionchangecapture',\n\t'on:selectstart',\n\t'onselectstart',\n\t'onselectstartcapture',\n\n\t// Touch Events\n\t'on:touchcancel',\n\t'ontouchcancel',\n\t'ontouchcancelcapture',\n\t'on:touchend',\n\t'ontouchend',\n\t'ontouchendcapture',\n\t'on:touchmove',\n\t'ontouchmove',\n\t'ontouchmovecapture',\n\t'on:touchstart',\n\t'ontouchstart',\n\t'ontouchstartcapture',\n\n\t// Pointer Events\n\t'on:gotpointercapture',\n\t'ongotpointercapture',\n\t'ongotpointercapturecapture',\n\t'on:pointercancel',\n\t'onpointercancel',\n\t'onpointercancelcapture',\n\t'on:pointerdown',\n\t'onpointerdown',\n\t'onpointerdowncapture',\n\t'on:pointerenter',\n\t'onpointerenter',\n\t'onpointerentercapture',\n\t'on:pointerleave',\n\t'onpointerleave',\n\t'onpointerleavecapture',\n\t'on:pointermove',\n\t'onpointermove',\n\t'onpointermovecapture',\n\t'on:pointerout',\n\t'onpointerout',\n\t'onpointeroutcapture',\n\t'on:pointerover',\n\t'onpointerover',\n\t'onpointerovercapture',\n\t'on:pointerup',\n\t'onpointerup',\n\t'onpointerupcapture',\n\t'on:lostpointercapture',\n\t'onlostpointercapture',\n\t'onlostpointercapturecapture',\n\n\t// Gamepad Events\n\t'on:gamepadconnected',\n\t'ongamepadconnected',\n\t'on:gamepaddisconnected',\n\t'ongamepaddisconnected',\n\n\t// UI Events\n\t'on:scroll',\n\t'onscroll',\n\t'onscrollcapture',\n\t'on:scrollend',\n\t'onscrollend',\n\t'onscrollendcapture',\n\t'on:resize',\n\t'onresize',\n\t'onresizecapture',\n\n\t// Wheel Events\n\t'on:wheel',\n\t'onwheel',\n\t'onwheelcapture',\n\n\t// Animation Events\n\t'on:animationstart',\n\t'onanimationstart',\n\t'onanimationstartcapture',\n\t'on:animationend',\n\t'onanimationend',\n\t'onanimationendcapture',\n\t'on:animationiteration',\n\t'onanimationiteration',\n\t'onanimationiterationcapture',\n\n\t// Transition Events\n\t'on:transitionstart',\n\t'ontransitionstart',\n\t'ontransitionstartcapture',\n\t'on:transitionrun',\n\t'ontransitionrun',\n\t'ontransitionruncapture',\n\t'on:transitionend',\n\t'ontransitionend',\n\t'ontransitionendcapture',\n\t'on:transitioncancel',\n\t'ontransitioncancel',\n\t'ontransitioncancelcapture',\n\n\t// Svelte Transition Events\n\t'on:outrostart',\n\t'onoutrostart',\n\t'onoutrostartcapture',\n\t'on:outroend',\n\t'onoutroend',\n\t'onoutroendcapture',\n\t'on:introstart',\n\t'onintrostart',\n\t'onintrostartcapture',\n\t'on:introend',\n\t'onintroend',\n\t'onintroendcapture',\n\n\t// Message Events\n\t'on:message',\n\t'onmessage',\n\t'onmessagecapture',\n\t'on:messageerror',\n\t'onmessageerror',\n\t'onmessageerrorcapture',\n\n\t// Document Events\n\t'on:visibilitychange',\n\t'onvisibilitychange',\n\t'onvisibilitychangecapture',\n\n\t// Global Events\n\t'on:beforematch',\n\t'onbeforematch',\n\t'onbeforematchcapture',\n\t'on:cancel',\n\t'oncancel',\n\t'oncancelcapture',\n\t'on:close',\n\t'onclose',\n\t'onclosecapture',\n\t'on:fullscreenchange',\n\t'onfullscreenchange',\n\t'onfullscreenchangecapture',\n\t'on:fullscreenerror',\n\t'onfullscreenerror',\n\t'onfullscreenerrorcapture'\n] as const;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/expression-affixes.ts",
    "content": "import type { TSESTree } from '@typescript-eslint/types';\nimport type { RuleContext } from '../types.js';\nimport type { AST } from 'svelte-eslint-parser';\nimport { FindVariableContext } from './ast-utils.js';\n\nexport function extractExpressionPrefixVariable(\n\tcontext: RuleContext,\n\texpression: TSESTree.Expression\n): TSESTree.Identifier | null {\n\treturn extractExpressionPrefixVariableInternal(new FindVariableContext(context), expression);\n}\n\nexport function extractExpressionPrefixLiteral(\n\tcontext: RuleContext,\n\texpression: AST.SvelteLiteral | TSESTree.Node\n): string | null {\n\treturn extractExpressionPrefixLiteralInternal(new FindVariableContext(context), expression);\n}\n\nexport function extractExpressionSuffixLiteral(\n\tcontext: RuleContext,\n\texpression: AST.SvelteLiteral | TSESTree.Node\n): string | null {\n\treturn extractExpressionSuffixLiteralInternal(new FindVariableContext(context), expression);\n}\n\n// Variable prefix extraction\n\nfunction extractExpressionPrefixVariableInternal(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.Expression\n): TSESTree.Identifier | null {\n\tswitch (expression.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn extractBinaryExpressionPrefixVariable(context, expression);\n\t\tcase 'Identifier':\n\t\t\treturn extractVariablePrefixVariable(context, expression);\n\t\tcase 'MemberExpression':\n\t\t\treturn extractMemberExpressionPrefixVariable(expression);\n\t\tcase 'TemplateLiteral':\n\t\t\treturn extractTemplateLiteralPrefixVariable(context, expression);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction extractBinaryExpressionPrefixVariable(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.BinaryExpression\n): TSESTree.Identifier | null {\n\treturn expression.left.type !== 'PrivateIdentifier'\n\t\t? extractExpressionPrefixVariableInternal(context, expression.left)\n\t\t: null;\n}\n\nfunction extractVariablePrefixVariable(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.Identifier\n): TSESTree.Identifier | null {\n\tconst variable = context.findVariable(expression);\n\tif (\n\t\tvariable === null ||\n\t\tvariable.identifiers.length !== 1 ||\n\t\tvariable.identifiers[0].parent.type !== 'VariableDeclarator' ||\n\t\tvariable.identifiers[0].parent.init === null\n\t) {\n\t\treturn expression;\n\t}\n\treturn (\n\t\textractExpressionPrefixVariableInternal(context, variable.identifiers[0].parent.init) ??\n\t\texpression\n\t);\n}\n\nfunction extractMemberExpressionPrefixVariable(\n\texpression: TSESTree.MemberExpression\n): TSESTree.Identifier | null {\n\treturn expression.property.type === 'Identifier' ? expression.property : null;\n}\n\nfunction extractTemplateLiteralPrefixVariable(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.TemplateLiteral\n): TSESTree.Identifier | null {\n\tconst literalParts = [...expression.expressions, ...expression.quasis].sort((a, b) =>\n\t\ta.range[0] < b.range[0] ? -1 : 1\n\t);\n\tfor (const part of literalParts) {\n\t\tif (part.type === 'TemplateElement' && part.value.raw === '') {\n\t\t\t// Skip empty quasi in the begining\n\t\t\tcontinue;\n\t\t}\n\t\tif (part.type !== 'TemplateElement') {\n\t\t\treturn extractExpressionPrefixVariableInternal(context, part);\n\t\t}\n\t\treturn null;\n\t}\n\treturn null;\n}\n\n// Literal prefix extraction\n\nfunction extractExpressionPrefixLiteralInternal(\n\tcontext: FindVariableContext,\n\texpression: AST.SvelteLiteral | TSESTree.Node\n): string | null {\n\tswitch (expression.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn extractBinaryExpressionPrefixLiteral(context, expression);\n\t\tcase 'Identifier':\n\t\t\treturn extractVariablePrefixLiteral(context, expression);\n\t\tcase 'Literal':\n\t\t\treturn typeof expression.value === 'string' ? expression.value : null;\n\t\tcase 'SvelteLiteral':\n\t\t\treturn expression.value;\n\t\tcase 'TemplateLiteral':\n\t\t\treturn extractTemplateLiteralPrefixLiteral(context, expression);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction extractBinaryExpressionPrefixLiteral(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.BinaryExpression\n): string | null {\n\treturn expression.left.type !== 'PrivateIdentifier'\n\t\t? extractExpressionPrefixLiteralInternal(context, expression.left)\n\t\t: null;\n}\n\nfunction extractVariablePrefixLiteral(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.Identifier\n): string | null {\n\tconst variable = context.findVariable(expression);\n\tif (\n\t\tvariable === null ||\n\t\tvariable.identifiers.length !== 1 ||\n\t\tvariable.identifiers[0].parent.type !== 'VariableDeclarator' ||\n\t\tvariable.identifiers[0].parent.init === null\n\t) {\n\t\treturn null;\n\t}\n\treturn extractExpressionPrefixLiteralInternal(context, variable.identifiers[0].parent.init);\n}\n\nfunction extractTemplateLiteralPrefixLiteral(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.TemplateLiteral\n): string | null {\n\tconst literalParts = [...expression.expressions, ...expression.quasis].sort((a, b) =>\n\t\ta.range[0] < b.range[0] ? -1 : 1\n\t);\n\tfor (const part of literalParts) {\n\t\tif (part.type === 'TemplateElement') {\n\t\t\tif (part.value.raw === '') {\n\t\t\t\t// Skip empty quasi\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn part.value.raw;\n\t\t}\n\t\treturn extractExpressionPrefixLiteralInternal(context, part);\n\t}\n\treturn null;\n}\n\n// Literal suffix extraction\n\nfunction extractExpressionSuffixLiteralInternal(\n\tcontext: FindVariableContext,\n\texpression: AST.SvelteLiteral | TSESTree.Node\n): string | null {\n\tswitch (expression.type) {\n\t\tcase 'BinaryExpression':\n\t\t\treturn extractBinaryExpressionSuffixLiteral(context, expression);\n\t\tcase 'Identifier':\n\t\t\treturn extractVariableSuffixLiteral(context, expression);\n\t\tcase 'Literal':\n\t\t\treturn typeof expression.value === 'string' ? expression.value : null;\n\t\tcase 'SvelteLiteral':\n\t\t\treturn expression.value;\n\t\tcase 'TemplateLiteral':\n\t\t\treturn extractTemplateLiteralSuffixLiteral(context, expression);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction extractBinaryExpressionSuffixLiteral(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.BinaryExpression\n): string | null {\n\treturn extractExpressionSuffixLiteralInternal(context, expression.right);\n}\n\nfunction extractVariableSuffixLiteral(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.Identifier\n): string | null {\n\tconst variable = context.findVariable(expression);\n\tif (\n\t\tvariable === null ||\n\t\tvariable.identifiers.length !== 1 ||\n\t\tvariable.identifiers[0].parent.type !== 'VariableDeclarator' ||\n\t\tvariable.identifiers[0].parent.init === null\n\t) {\n\t\treturn null;\n\t}\n\treturn extractExpressionSuffixLiteralInternal(context, variable.identifiers[0].parent.init);\n}\n\nfunction extractTemplateLiteralSuffixLiteral(\n\tcontext: FindVariableContext,\n\texpression: TSESTree.TemplateLiteral\n): string | null {\n\tconst literalParts = [...expression.expressions, ...expression.quasis].sort((a, b) =>\n\t\ta.range[0] < b.range[0] ? -1 : 1\n\t);\n\tfor (const part of literalParts.reverse()) {\n\t\tif (part.type === 'TemplateElement') {\n\t\t\tif (part.value.raw === '') {\n\t\t\t\t// Skip empty quasi\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn part.value.raw;\n\t\t}\n\t\treturn extractExpressionSuffixLiteralInternal(context, part);\n\t}\n\treturn null;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/get-node-module.ts",
    "content": "import fs from 'fs';\nimport path from 'path';\nimport { createCache } from './cache.js';\n\nconst isRunOnBrowser = !fs.readFileSync;\nconst nodeModuleCache = createCache<string | null>();\nconst nodeModulesCache = createCache<string[]>();\n\n/**\n * Find package directory in node_modules\n */\nfunction findPackageInNodeModules(dir: string, packageName: string): string | null {\n\tif (isRunOnBrowser) return null;\n\n\tconst nodeModulesPath = path.join(dir, 'node_modules');\n\tconst packagePath = path.join(nodeModulesPath, packageName);\n\n\ttry {\n\t\tconst stats = fs.statSync(packagePath);\n\t\tif (stats.isDirectory()) {\n\t\t\treturn packagePath;\n\t\t}\n\t} catch {\n\t\t// ignore if directory not found\n\t}\n\n\treturn null;\n}\n\n/**\n * Get first found package path from node_modules\n */\nexport function getNodeModule(packageName: string, startPath = 'a.js'): string | null {\n\tif (isRunOnBrowser) return null;\n\n\tconst cacheKey = `${startPath}:${packageName}`;\n\tconst cached = nodeModulesCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached[0] ?? null;\n\t}\n\n\tconst startDir = path.dirname(path.resolve(startPath));\n\tlet dir = startDir;\n\tlet prevDir = '';\n\n\tdo {\n\t\t// check cache\n\t\tconst cachePath = nodeModuleCache.get(`${dir}:${packageName}`);\n\t\tif (cachePath) {\n\t\t\tif (cachePath !== null) {\n\t\t\t\tnodeModulesCache.set(cacheKey, [cachePath]);\n\t\t\t\treturn cachePath;\n\t\t\t}\n\t\t} else {\n\t\t\t// search new\n\t\t\tconst packagePath = findPackageInNodeModules(dir, packageName);\n\t\t\tnodeModuleCache.set(`${dir}:${packageName}`, packagePath);\n\t\t\tif (packagePath) {\n\t\t\t\tnodeModulesCache.set(cacheKey, [packagePath]);\n\t\t\t\treturn packagePath;\n\t\t\t}\n\t\t}\n\n\t\t// go to parent\n\t\tprevDir = dir;\n\t\tdir = path.resolve(dir, '..');\n\t} while (dir !== prevDir);\n\n\tnodeModulesCache.set(cacheKey, []);\n\treturn null;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/get-package-json.ts",
    "content": "/**\n * refer: https://github.com/mysticatea/eslint-plugin-node/blob/f45c6149be7235c0f7422d1179c25726afeecd83/lib/util/get-package-json.js\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { createCache } from './cache.js';\n\ntype PackageJson = {\n\tname?: unknown;\n\tdependencies?: { [key in string]?: unknown };\n\tdevDependencies?: { [key in string]?: unknown };\n\tfilePath: string;\n};\n\nconst isRunOnBrowser = !fs.readFileSync;\nconst packageJsonCache = createCache<PackageJson | null>();\nconst packageJsonsCache = createCache<PackageJson[]>();\n\n/**\n * Reads the `package.json` data in a given path.\n *\n * Don't cache the data.\n *\n * @param dir The path to a directory to read.\n * @returns The read `package.json` data, or null.\n */\nfunction readPackageJson(dir: string): PackageJson | null {\n\tif (isRunOnBrowser) return null;\n\tconst filePath = path.join(dir, 'package.json');\n\ttry {\n\t\tconst text = fs.readFileSync(filePath, 'utf8');\n\t\tconst data = JSON.parse(text);\n\n\t\tif (typeof data === 'object' && data !== null) {\n\t\t\tdata.filePath = filePath;\n\t\t\treturn data;\n\t\t}\n\t} catch {\n\t\t// do nothing.\n\t}\n\n\treturn null;\n}\n\n/**\n * Gets a `package.json` data.\n * The data is cached if found, then it's used after.\n * @param startPath A file path to lookup.\n * @returns A found `package.json` data or `null`.\n *      This object have additional property `filePath`.\n */\nexport function getPackageJsons(startPath = 'a.js'): PackageJson[] {\n\tif (isRunOnBrowser) return [];\n\n\tconst cached = packageJsonsCache.get(startPath);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst packageJsons: PackageJson[] = [];\n\tconst startDir = path.dirname(path.resolve(startPath));\n\tlet dir = startDir;\n\tlet prevDir = '';\n\tlet data = null;\n\n\tdo {\n\t\tdata = packageJsonCache.get(dir);\n\t\tif (data) {\n\t\t\tpackageJsons.push(data);\n\t\t}\n\n\t\tdata = readPackageJson(dir);\n\t\tif (data) {\n\t\t\tpackageJsonCache.set(dir, data);\n\t\t\tpackageJsons.push(data);\n\t\t}\n\n\t\t// Go to next.\n\t\tprevDir = dir;\n\t\tdir = path.resolve(dir, '..');\n\t} while (dir !== prevDir);\n\n\tpackageJsonsCache.set(startDir, packageJsons);\n\treturn packageJsons;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/index.ts",
    "content": "import type { RuleModule, PartialRuleModule, PartialRuleMetaData, RuleContext } from '../types.js';\nimport { getSvelteContext, type SvelteContext } from '../utils/svelte-context.js';\n\nfunction doesNotSatisfy<T>(actual: T, expected?: T[]): boolean {\n\tif (expected == null || expected.length === 0) {\n\t\treturn false;\n\t}\n\n\treturn !expected.includes(actual);\n}\n\nfunction satisfiesCondition(\n\tcondition: NonNullable<PartialRuleMetaData['conditions']>[number],\n\tsvelteContext: SvelteContext\n): boolean {\n\tif (\n\t\tdoesNotSatisfy(svelteContext.svelteVersion, condition.svelteVersions) ||\n\t\tdoesNotSatisfy(svelteContext.svelteFileType, condition.svelteFileTypes) ||\n\t\tdoesNotSatisfy(svelteContext.runes, condition.runes) ||\n\t\tdoesNotSatisfy(svelteContext.svelteKitVersion, condition.svelteKitVersions) ||\n\t\tdoesNotSatisfy(svelteContext.svelteKitFileType, condition.svelteKitFileTypes)\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n// export for testing\nexport function shouldRun(\n\tsvelteContext: SvelteContext | null,\n\tconditions: PartialRuleMetaData['conditions']\n): boolean {\n\t// If svelteContext is null, it means the rule might be executed based on the analysis result of a different parser.\n\t// In this case, always execute the rule.\n\tif (svelteContext == null || conditions == null || conditions.length === 0) {\n\t\treturn true;\n\t}\n\n\tfor (const condition of conditions) {\n\t\tif (satisfiesCondition(condition, svelteContext)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Define the rule.\n * @param ruleName ruleName\n * @param rule rule module\n */\nexport function createRule(ruleName: string, rule: PartialRuleModule): RuleModule {\n\treturn {\n\t\tmeta: {\n\t\t\t...rule.meta,\n\t\t\tdocs: {\n\t\t\t\t...rule.meta.docs,\n\t\t\t\turl: `https://sveltejs.github.io/eslint-plugin-svelte/rules/${ruleName}/`,\n\t\t\t\truleId: `svelte/${ruleName}`,\n\t\t\t\truleName\n\t\t\t}\n\t\t},\n\t\tcreate(context: RuleContext) {\n\t\t\tconst { conditions } = rule.meta;\n\t\t\tconst svelteContext = getSvelteContext(context);\n\t\t\tif (!shouldRun(svelteContext, conditions)) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn rule.create(context);\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/lines-and-columns.ts",
    "content": "export class LinesAndColumns {\n\tprivate readonly lineStartIndices: number[];\n\n\tpublic constructor(code: string) {\n\t\tconst len = code.length;\n\t\tconst lineStartIndices = [0];\n\t\tfor (let index = 0; index < len; index++) {\n\t\t\tconst c = code[index];\n\t\t\tif (c === '\\r') {\n\t\t\t\tconst next = code[index + 1] || '';\n\t\t\t\tif (next === '\\n') {\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t\tlineStartIndices.push(index + 1);\n\t\t\t} else if (c === '\\n') {\n\t\t\t\tlineStartIndices.push(index + 1);\n\t\t\t}\n\t\t}\n\t\tthis.lineStartIndices = lineStartIndices;\n\t}\n\n\tpublic getLocFromIndex(index: number): { line: number; column: number } {\n\t\tconst lineNumber = sortedLastIndex(this.lineStartIndices, index);\n\t\treturn {\n\t\t\tline: lineNumber,\n\t\t\tcolumn: index - this.lineStartIndices[lineNumber - 1]\n\t\t};\n\t}\n\n\tpublic getIndexFromLoc(loc: { line: number; column: number }): number {\n\t\tconst lineStartIndex = this.lineStartIndices[loc.line - 1];\n\t\tconst positionIndex = lineStartIndex + loc.column;\n\n\t\treturn positionIndex;\n\t}\n}\n\n/**\n * Uses a binary search to determine the highest index at which value should be inserted into array in order to maintain its sort order.\n */\nfunction sortedLastIndex(array: number[], value: number): number {\n\tlet lower = 0;\n\tlet upper = array.length;\n\n\twhile (lower < upper) {\n\t\tconst mid = Math.floor(lower + (upper - lower) / 2);\n\t\tconst target = array[mid];\n\t\tif (target < value) {\n\t\t\tlower = mid + 1;\n\t\t} else if (target > value) {\n\t\t\tupper = mid;\n\t\t} else {\n\t\t\treturn mid + 1;\n\t\t}\n\t}\n\n\treturn upper;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/load-module.ts",
    "content": "import type { AST } from 'svelte-eslint-parser';\nimport Module from 'module';\nimport path from 'path';\nimport type { RuleContext } from '../types.js';\nconst cache = new WeakMap<AST.SvelteProgram, Record<string, unknown>>();\nconst cache4b = new Map<string, unknown>();\n/**\n * Load module\n */\nexport function loadModule<R>(context: RuleContext, name: string): R | null {\n\tconst key = context.sourceCode.ast;\n\tlet modules = cache.get(key);\n\tif (!modules) {\n\t\tmodules = {};\n\t\tcache.set(key, modules);\n\t}\n\tconst mod = modules[name] || cache4b.get(name);\n\tif (mod) return mod as R;\n\ttry {\n\t\t// load from cwd\n\t\tconst cwd = context.cwd ?? process.cwd();\n\t\tconst relativeTo = path.join(cwd, '__placeholder__.js');\n\t\treturn (modules[name] = Module.createRequire(relativeTo)(name) as R);\n\t} catch {\n\t\t// ignore\n\t}\n\tfor (const relativeTo of [\n\t\t// load from lint file name\n\t\tcontext.filename,\n\t\t// load from lint file name (physical)\n\t\tcontext.physicalFilename,\n\t\t// load from this plugin module\n\t\ttypeof __filename !== 'undefined' ? __filename : ''\n\t]) {\n\t\tif (relativeTo) {\n\t\t\ttry {\n\t\t\t\treturn (modules[name] = Module.createRequire(relativeTo)(name) as R);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/regexp.ts",
    "content": "const RE_REGEXP_STR = /^\\/(.+)\\/([A-Za-z]*)$/u;\n\n/**\n * Convert a string to the `RegExp`.\n * Normal strings (e.g. `\"foo\"`) is converted to `/^foo$/` of `RegExp`.\n * Strings like `\"/^foo/i\"` are converted to `/^foo/i` of `RegExp`.\n *\n * @param {string} string The string to convert.\n * @returns {RegExp} Returns the `RegExp`.\n */\nexport function toRegExp(string: string): { test(s: string): boolean } {\n\tconst parts = RE_REGEXP_STR.exec(string);\n\tif (parts) {\n\t\treturn new RegExp(parts[1], parts[2]);\n\t}\n\treturn { test: (s) => s === string };\n}\n\n/**\n * Checks whether given string is regexp string\n * @param {string} string\n * @returns {boolean}\n */\nexport function isRegExp(string: string): boolean {\n\treturn Boolean(RE_REGEXP_STR.test(string));\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/rules.ts",
    "content": "// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\nimport type { RuleModule } from '../types.js';\nimport typescriptEslintNoUnnecessaryCondition from '../rules/@typescript-eslint/no-unnecessary-condition.js';\nimport blockLang from '../rules/block-lang.js';\nimport buttonHasType from '../rules/button-has-type.js';\nimport commentDirective from '../rules/comment-directive.js';\nimport consistentSelectorStyle from '../rules/consistent-selector-style.js';\nimport derivedHasSameInputsOutputs from '../rules/derived-has-same-inputs-outputs.js';\nimport experimentalRequireSlotTypes from '../rules/experimental-require-slot-types.js';\nimport experimentalRequireStrictEvents from '../rules/experimental-require-strict-events.js';\nimport firstAttributeLinebreak from '../rules/first-attribute-linebreak.js';\nimport htmlClosingBracketNewLine from '../rules/html-closing-bracket-new-line.js';\nimport htmlClosingBracketSpacing from '../rules/html-closing-bracket-spacing.js';\nimport htmlQuotes from '../rules/html-quotes.js';\nimport htmlSelfClosing from '../rules/html-self-closing.js';\nimport indent from '../rules/indent.js';\nimport infiniteReactiveLoop from '../rules/infinite-reactive-loop.js';\nimport maxAttributesPerLine from '../rules/max-attributes-per-line.js';\nimport maxLinesPerBlock from '../rules/max-lines-per-block.js';\nimport mustacheSpacing from '../rules/mustache-spacing.js';\nimport noAddEventListener from '../rules/no-add-event-listener.js';\nimport noAtDebugTags from '../rules/no-at-debug-tags.js';\nimport noAtHtmlTags from '../rules/no-at-html-tags.js';\nimport noDomManipulating from '../rules/no-dom-manipulating.js';\nimport noDupeElseIfBlocks from '../rules/no-dupe-else-if-blocks.js';\nimport noDupeOnDirectives from '../rules/no-dupe-on-directives.js';\nimport noDupeStyleProperties from '../rules/no-dupe-style-properties.js';\nimport noDupeUseDirectives from '../rules/no-dupe-use-directives.js';\nimport noDynamicSlotName from '../rules/no-dynamic-slot-name.js';\nimport noExportLoadInSvelteModuleInKitPages from '../rules/no-export-load-in-svelte-module-in-kit-pages.js';\nimport noExtraReactiveCurlies from '../rules/no-extra-reactive-curlies.js';\nimport noGotoWithoutBase from '../rules/no-goto-without-base.js';\nimport noIgnoredUnsubscribe from '../rules/no-ignored-unsubscribe.js';\nimport noImmutableReactiveStatements from '../rules/no-immutable-reactive-statements.js';\nimport noInlineStyles from '../rules/no-inline-styles.js';\nimport noInnerDeclarations from '../rules/no-inner-declarations.js';\nimport noInspect from '../rules/no-inspect.js';\nimport noNavigationWithoutBase from '../rules/no-navigation-without-base.js';\nimport noNavigationWithoutResolve from '../rules/no-navigation-without-resolve.js';\nimport noNotFunctionHandler from '../rules/no-not-function-handler.js';\nimport noObjectInTextMustaches from '../rules/no-object-in-text-mustaches.js';\nimport noRawSpecialElements from '../rules/no-raw-special-elements.js';\nimport noReactiveFunctions from '../rules/no-reactive-functions.js';\nimport noReactiveLiterals from '../rules/no-reactive-literals.js';\nimport noReactiveReassign from '../rules/no-reactive-reassign.js';\nimport noRestrictedHtmlElements from '../rules/no-restricted-html-elements.js';\nimport noShorthandStylePropertyOverrides from '../rules/no-shorthand-style-property-overrides.js';\nimport noSpacesAroundEqualSignsInAttribute from '../rules/no-spaces-around-equal-signs-in-attribute.js';\nimport noStoreAsync from '../rules/no-store-async.js';\nimport noSvelteInternal from '../rules/no-svelte-internal.js';\nimport noTargetBlank from '../rules/no-target-blank.js';\nimport noTopLevelBrowserGlobals from '../rules/no-top-level-browser-globals.js';\nimport noTrailingSpaces from '../rules/no-trailing-spaces.js';\nimport noUnknownStyleDirectiveProperty from '../rules/no-unknown-style-directive-property.js';\nimport noUnnecessaryStateWrap from '../rules/no-unnecessary-state-wrap.js';\nimport noUnusedClassName from '../rules/no-unused-class-name.js';\nimport noUnusedProps from '../rules/no-unused-props.js';\nimport noUnusedSvelteIgnore from '../rules/no-unused-svelte-ignore.js';\nimport noUselessChildrenSnippet from '../rules/no-useless-children-snippet.js';\nimport noUselessMustaches from '../rules/no-useless-mustaches.js';\nimport preferClassDirective from '../rules/prefer-class-directive.js';\nimport preferConst from '../rules/prefer-const.js';\nimport preferDestructuredStoreProps from '../rules/prefer-destructured-store-props.js';\nimport preferStyleDirective from '../rules/prefer-style-directive.js';\nimport preferSvelteReactivity from '../rules/prefer-svelte-reactivity.js';\nimport preferWritableDerived from '../rules/prefer-writable-derived.js';\nimport requireEachKey from '../rules/require-each-key.js';\nimport requireEventDispatcherTypes from '../rules/require-event-dispatcher-types.js';\nimport requireEventPrefix from '../rules/require-event-prefix.js';\nimport requireOptimizedStyleAttribute from '../rules/require-optimized-style-attribute.js';\nimport requireStoreCallbacksUseSetParam from '../rules/require-store-callbacks-use-set-param.js';\nimport requireStoreReactiveAccess from '../rules/require-store-reactive-access.js';\nimport requireStoresInit from '../rules/require-stores-init.js';\nimport shorthandAttribute from '../rules/shorthand-attribute.js';\nimport shorthandDirective from '../rules/shorthand-directive.js';\nimport sortAttributes from '../rules/sort-attributes.js';\nimport spacedHtmlComment from '../rules/spaced-html-comment.js';\nimport system from '../rules/system.js';\nimport validCompile from '../rules/valid-compile.js';\nimport validEachKey from '../rules/valid-each-key.js';\nimport validPropNamesInKitPages from '../rules/valid-prop-names-in-kit-pages.js';\nimport validStyleParse from '../rules/valid-style-parse.js';\n\nexport const rules = [\n\ttypescriptEslintNoUnnecessaryCondition,\n\tblockLang,\n\tbuttonHasType,\n\tcommentDirective,\n\tconsistentSelectorStyle,\n\tderivedHasSameInputsOutputs,\n\texperimentalRequireSlotTypes,\n\texperimentalRequireStrictEvents,\n\tfirstAttributeLinebreak,\n\thtmlClosingBracketNewLine,\n\thtmlClosingBracketSpacing,\n\thtmlQuotes,\n\thtmlSelfClosing,\n\tindent,\n\tinfiniteReactiveLoop,\n\tmaxAttributesPerLine,\n\tmaxLinesPerBlock,\n\tmustacheSpacing,\n\tnoAddEventListener,\n\tnoAtDebugTags,\n\tnoAtHtmlTags,\n\tnoDomManipulating,\n\tnoDupeElseIfBlocks,\n\tnoDupeOnDirectives,\n\tnoDupeStyleProperties,\n\tnoDupeUseDirectives,\n\tnoDynamicSlotName,\n\tnoExportLoadInSvelteModuleInKitPages,\n\tnoExtraReactiveCurlies,\n\tnoGotoWithoutBase,\n\tnoIgnoredUnsubscribe,\n\tnoImmutableReactiveStatements,\n\tnoInlineStyles,\n\tnoInnerDeclarations,\n\tnoInspect,\n\tnoNavigationWithoutBase,\n\tnoNavigationWithoutResolve,\n\tnoNotFunctionHandler,\n\tnoObjectInTextMustaches,\n\tnoRawSpecialElements,\n\tnoReactiveFunctions,\n\tnoReactiveLiterals,\n\tnoReactiveReassign,\n\tnoRestrictedHtmlElements,\n\tnoShorthandStylePropertyOverrides,\n\tnoSpacesAroundEqualSignsInAttribute,\n\tnoStoreAsync,\n\tnoSvelteInternal,\n\tnoTargetBlank,\n\tnoTopLevelBrowserGlobals,\n\tnoTrailingSpaces,\n\tnoUnknownStyleDirectiveProperty,\n\tnoUnnecessaryStateWrap,\n\tnoUnusedClassName,\n\tnoUnusedProps,\n\tnoUnusedSvelteIgnore,\n\tnoUselessChildrenSnippet,\n\tnoUselessMustaches,\n\tpreferClassDirective,\n\tpreferConst,\n\tpreferDestructuredStoreProps,\n\tpreferStyleDirective,\n\tpreferSvelteReactivity,\n\tpreferWritableDerived,\n\trequireEachKey,\n\trequireEventDispatcherTypes,\n\trequireEventPrefix,\n\trequireOptimizedStyleAttribute,\n\trequireStoreCallbacksUseSetParam,\n\trequireStoreReactiveAccess,\n\trequireStoresInit,\n\tshorthandAttribute,\n\tshorthandDirective,\n\tsortAttributes,\n\tspacedHtmlComment,\n\tsystem,\n\tvalidCompile,\n\tvalidEachKey,\n\tvalidPropNamesInKitPages,\n\tvalidStyleParse\n] as RuleModule[];\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/svelte-context.ts",
    "content": "import type { RuleContext } from '../types.js';\nimport fs from 'fs';\nimport path from 'path';\nimport { getPackageJsons } from './get-package-json.js';\nimport { getNodeModule } from './get-node-module.js';\nimport { createCache } from './cache.js';\nimport { VERSION as SVELTE_VERSION } from 'svelte/compiler';\n\nconst isRunInBrowser = !fs.readFileSync;\n\nexport type SvelteContext = (\n\t| {\n\t\t\tsvelteVersion: '3/4';\n\t\t\tsvelteFileType: '.svelte' | null;\n\t\t\trunes: null;\n\t  }\n\t| ({\n\t\t\tsvelteVersion: '5';\n\t  } & (\n\t\t\t| {\n\t\t\t\t\tsvelteFileType: '.svelte' | '.svelte.[js|ts]';\n\t\t\t\t\t/** If a user uses a parser other than `svelte-eslint-parser`, `undetermined` will be set. */\n\t\t\t\t\trunes: boolean | 'undetermined';\n\t\t\t  }\n\t\t\t| {\n\t\t\t\t\t/** e.g. `foo.js` / `package.json` */\n\t\t\t\t\tsvelteFileType: null;\n\t\t\t\t\trunes: null;\n\t\t\t  }\n\t  ))\n\t| {\n\t\t\t/** For projects that do not use Svelte. */\n\t\t\tsvelteVersion: null;\n\t\t\tsvelteFileType: null;\n\t\t\trunes: null;\n\t  }\n) & {\n\tsvelteKitVersion: '1.0.0-next' | '1' | '2' | null;\n\tsvelteKitFileType:\n\t\t| '+page.svelte'\n\t\t| '+page.[js|ts]'\n\t\t| '+page.server.[js|ts]'\n\t\t| '+error.svelte'\n\t\t| '+layout.svelte'\n\t\t| '+layout.[js|ts]'\n\t\t| '+layout.server.[js|ts]'\n\t\t| '+server.[js|ts]'\n\t\t| null;\n};\n\nfunction getSvelteFileType(filePath: string): SvelteContext['svelteFileType'] {\n\tif (filePath.endsWith('.svelte')) {\n\t\treturn '.svelte';\n\t}\n\n\tif (filePath.endsWith('.svelte.js') || filePath.endsWith('.svelte.ts')) {\n\t\treturn '.svelte.[js|ts]';\n\t}\n\n\treturn null;\n}\n\nfunction getSvelteKitFileTypeFromFilePath(filePath: string): SvelteContext['svelteKitFileType'] {\n\tconst fileName = filePath.split(/[/\\\\]/).pop();\n\tswitch (fileName) {\n\t\tcase '+page.svelte': {\n\t\t\treturn '+page.svelte';\n\t\t}\n\t\tcase '+page.js':\n\t\tcase '+page.ts': {\n\t\t\treturn '+page.[js|ts]';\n\t\t}\n\t\tcase '+page.server.js':\n\t\tcase '+page.server.ts': {\n\t\t\treturn '+page.server.[js|ts]';\n\t\t}\n\t\tcase '+error.svelte': {\n\t\t\treturn '+error.svelte';\n\t\t}\n\t\tcase '+layout.svelte': {\n\t\t\treturn '+layout.svelte';\n\t\t}\n\t\tcase '+layout.js':\n\t\tcase '+layout.ts': {\n\t\t\treturn '+layout.[js|ts]';\n\t\t}\n\t\tcase '+layout.server.js':\n\t\tcase '+layout.server.ts': {\n\t\t\treturn '+layout.server.[js|ts]';\n\t\t}\n\t\tcase '+server.js':\n\t\tcase '+server.ts': {\n\t\t\treturn '+server.[js|ts]';\n\t\t}\n\t\tdefault: {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\nfunction extractMajorVersion(version: string, recognizePrereleaseVersion: boolean): string | null {\n\tif (recognizePrereleaseVersion) {\n\t\tconst match = /^(?:\\^|~)?(\\d+\\.0\\.0-next)/.exec(version);\n\t\tif (match && match[1]) {\n\t\t\treturn match[1];\n\t\t}\n\t}\n\n\tconst match = /^(?:\\^|~)?(\\d+)\\./.exec(version);\n\tif (match && match[1]) {\n\t\treturn match[1];\n\t}\n\treturn null;\n}\n\nconst svelteKitContextCache = createCache<Pick<\n\tSvelteContext,\n\t'svelteKitFileType' | 'svelteKitVersion'\n> | null>();\n\nfunction getSvelteKitContext(\n\tcontext: RuleContext\n): Pick<SvelteContext, 'svelteKitFileType' | 'svelteKitVersion'> {\n\tconst filePath = context.filename;\n\n\tconst cached = svelteKitContextCache.get(filePath);\n\tif (cached) return cached;\n\n\tconst svelteKitVersion = getSvelteKitVersion(filePath);\n\tif (svelteKitVersion == null) {\n\t\tconst result: Pick<SvelteContext, 'svelteKitFileType' | 'svelteKitVersion'> = {\n\t\t\tsvelteKitFileType: null,\n\t\t\tsvelteKitVersion: null\n\t\t};\n\t\tsvelteKitContextCache.set(filePath, result);\n\t\treturn result;\n\t}\n\tif (isRunInBrowser) {\n\t\tconst result: Pick<SvelteContext, 'svelteKitFileType' | 'svelteKitVersion'> = {\n\t\t\tsvelteKitVersion,\n\t\t\t// Judge by only file path if it runs in browser.\n\t\t\tsvelteKitFileType: getSvelteKitFileTypeFromFilePath(filePath)\n\t\t};\n\t\tsvelteKitContextCache.set(filePath, result);\n\t\treturn result;\n\t}\n\n\tconst routes =\n\t\t(\n\t\t\tcontext.settings?.svelte?.kit?.files?.routes ??\n\t\t\tcontext.sourceCode.parserServices.svelteParseContext?.svelteConfig?.kit?.files?.routes\n\t\t)?.replace(/^\\//, '') ?? 'src/routes';\n\tconst projectRootDir = getProjectRootDir(context.filename) ?? '';\n\n\tif (!filePath.startsWith(path.join(projectRootDir, routes))) {\n\t\tconst result: Pick<SvelteContext, 'svelteKitFileType' | 'svelteKitVersion'> = {\n\t\t\tsvelteKitVersion,\n\t\t\tsvelteKitFileType: null\n\t\t};\n\t\tsvelteKitContextCache.set(filePath, result);\n\t\treturn result;\n\t}\n\n\tconst result: Pick<SvelteContext, 'svelteKitFileType' | 'svelteKitVersion'> = {\n\t\tsvelteKitVersion,\n\t\tsvelteKitFileType: getSvelteKitFileTypeFromFilePath(filePath)\n\t};\n\tsvelteKitContextCache.set(filePath, result);\n\treturn result;\n}\n\nfunction checkAndSetSvelteVersion(version: string): SvelteContext['svelteVersion'] | null {\n\tconst major = extractMajorVersion(version, false);\n\tif (major == null) {\n\t\treturn null;\n\t}\n\tif (major === '3' || major === '4') {\n\t\treturn '3/4';\n\t}\n\treturn major as SvelteContext['svelteVersion'];\n}\n\nexport function getSvelteVersion(): SvelteContext['svelteVersion'] {\n\t// Hack: if it runs in browser, it regards as Svelte project.\n\tif (isRunInBrowser) {\n\t\treturn '5';\n\t}\n\n\treturn checkAndSetSvelteVersion(SVELTE_VERSION);\n}\n\nconst svelteKitVersionCache = createCache<SvelteContext['svelteKitVersion']>();\n\nfunction checkAndSetSvelteKitVersion(\n\tversion: string,\n\tfilePath: string\n): SvelteContext['svelteKitVersion'] {\n\tconst major = extractMajorVersion(version, true) as SvelteContext['svelteKitVersion'];\n\tsvelteKitVersionCache.set(filePath, major);\n\treturn major;\n}\n\nfunction getSvelteKitVersion(filePath: string): SvelteContext['svelteKitVersion'] {\n\tconst cached = svelteKitVersionCache.get(filePath);\n\tif (cached) return cached;\n\n\t// Hack: if it runs in browser, it regards as SvelteKit project.\n\tif (isRunInBrowser) {\n\t\tsvelteKitVersionCache.set(filePath, '2');\n\t\treturn '2';\n\t}\n\n\tconst nodeModule = getNodeModule('@sveltejs/kit', filePath);\n\tif (nodeModule) {\n\t\ttry {\n\t\t\tconst packageJson = JSON.parse(\n\t\t\t\tfs.readFileSync(path.join(nodeModule, 'package.json'), 'utf8')\n\t\t\t);\n\t\t\tconst result = checkAndSetSvelteKitVersion(packageJson.version, filePath);\n\t\t\tif (result != null) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} catch {\n\t\t\t/** do nothing */\n\t\t}\n\t}\n\n\ttry {\n\t\tconst packageJsons = getPackageJsons(filePath);\n\t\tif (packageJsons.length > 0) {\n\t\t\tif (packageJsons[0].name === 'eslint-plugin-svelte') {\n\t\t\t\t// Hack: CI removes `@sveltejs/kit` and it returns false and test failed.\n\t\t\t\t// So always it returns 2 if it runs on the package.\n\t\t\t\tsvelteKitVersionCache.set(filePath, '2');\n\t\t\t\treturn '2';\n\t\t\t}\n\n\t\t\tfor (const packageJson of packageJsons) {\n\t\t\t\tconst version =\n\t\t\t\t\tpackageJson.dependencies?.['@sveltejs/kit'] ??\n\t\t\t\t\tpackageJson.devDependencies?.['@sveltejs/kit'];\n\t\t\t\tif (typeof version === 'string') {\n\t\t\t\t\tconst result = checkAndSetSvelteKitVersion(version, filePath);\n\t\t\t\t\tif (result != null) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t/** do nothing */\n\t}\n\n\tsvelteKitVersionCache.set(filePath, null);\n\treturn null;\n}\n\nconst projectRootDirCache = createCache<string | null>();\n\n/**\n * Gets a  project root folder path.\n * @param filePath A file path to lookup.\n * @returns A found project root folder path or null.\n */\nfunction getProjectRootDir(filePath: string): string | null {\n\tif (isRunInBrowser) return null;\n\tconst cached = projectRootDirCache.get(filePath);\n\tif (cached) return cached;\n\n\tconst packageJsons = getPackageJsons(filePath);\n\tif (packageJsons.length === 0) {\n\t\tprojectRootDirCache.set(filePath, null);\n\t\treturn null;\n\t}\n\tconst packageJsonFilePath = packageJsons[0].filePath;\n\tif (!packageJsonFilePath) {\n\t\tprojectRootDirCache.set(filePath, null);\n\t\treturn null;\n\t}\n\tconst projectRootDir = path.dirname(path.resolve(packageJsonFilePath));\n\tprojectRootDirCache.set(filePath, projectRootDir);\n\treturn projectRootDir;\n}\n\nconst svelteContextCache = createCache<SvelteContext | null>();\n\nexport function getSvelteContext(context: RuleContext): SvelteContext | null {\n\tconst { parserServices } = context.sourceCode;\n\tconst { svelteParseContext } = parserServices;\n\tconst filePath = context.filename;\n\n\tconst cached = svelteContextCache.get(filePath);\n\tif (cached) return cached;\n\n\tconst svelteKitContext = getSvelteKitContext(context);\n\tconst svelteVersion = getSvelteVersion();\n\tconst svelteFileType = getSvelteFileType(filePath);\n\n\tif (svelteVersion == null) {\n\t\tconst result: SvelteContext = {\n\t\t\tsvelteVersion: null,\n\t\t\tsvelteFileType: null,\n\t\t\trunes: null,\n\t\t\tsvelteKitVersion: svelteKitContext.svelteKitVersion,\n\t\t\tsvelteKitFileType: svelteKitContext.svelteKitFileType\n\t\t};\n\t\tsvelteContextCache.set(filePath, result);\n\t\treturn result;\n\t}\n\n\tif (svelteVersion === '3/4') {\n\t\tconst result: SvelteContext = {\n\t\t\tsvelteVersion,\n\t\t\tsvelteFileType: svelteFileType === '.svelte' ? '.svelte' : null,\n\t\t\trunes: null,\n\t\t\tsvelteKitVersion: svelteKitContext.svelteKitVersion,\n\t\t\tsvelteKitFileType: svelteKitContext.svelteKitFileType\n\t\t};\n\t\tsvelteContextCache.set(filePath, result);\n\t\treturn result;\n\t}\n\n\tif (svelteFileType == null) {\n\t\tconst result: SvelteContext = {\n\t\t\tsvelteVersion,\n\t\t\tsvelteFileType: null,\n\t\t\trunes: null,\n\t\t\tsvelteKitVersion: svelteKitContext.svelteKitVersion,\n\t\t\tsvelteKitFileType: svelteKitContext.svelteKitFileType\n\t\t};\n\t\tsvelteContextCache.set(filePath, result);\n\t\treturn result;\n\t}\n\n\tconst result: SvelteContext = {\n\t\tsvelteVersion,\n\t\trunes: svelteParseContext?.runes ?? 'undetermined',\n\t\tsvelteFileType,\n\t\tsvelteKitVersion: svelteKitContext.svelteKitVersion,\n\t\tsvelteKitFileType: svelteKitContext.svelteKitFileType\n\t};\n\tsvelteContextCache.set(filePath, result);\n\treturn result;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/src/utils/ts-utils/index.ts",
    "content": "import type { RuleContext, ASTNode } from '../../types.js';\nimport type * as TS from 'typescript';\nimport { loadModule } from '../load-module.js';\nexport type TypeScript = typeof TS;\nexport type { TS };\n\nexport type TSTools = {\n\tservice: {\n\t\tesTreeNodeToTSNodeMap: ReadonlyMap<unknown, TS.Node>;\n\t\ttsNodeToESTreeNodeMap: ReadonlyMap<TS.Node, ASTNode>;\n\t\tprogram: TS.Program;\n\t\thasFullTypeInformation: boolean;\n\t};\n\tts: TypeScript;\n};\n\n/**\n * Get TypeScript tools\n */\nexport function getTypeScriptTools(context: RuleContext): TSTools | null {\n\tconst ts = getTypeScript(context);\n\tif (!ts) {\n\t\treturn null;\n\t}\n\tconst sourceCode = context.sourceCode;\n\tconst { program, esTreeNodeToTSNodeMap, tsNodeToESTreeNodeMap } = sourceCode.parserServices;\n\tif (!program || !esTreeNodeToTSNodeMap || !tsNodeToESTreeNodeMap) {\n\t\treturn null;\n\t}\n\tconst hasFullTypeInformation = sourceCode.parserServices.hasFullTypeInformation ?? true;\n\n\tif (!hasFullTypeInformation) {\n\t\t// Full type information is required. User must specify parserOptions.project.\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tservice: {\n\t\t\tesTreeNodeToTSNodeMap,\n\t\t\ttsNodeToESTreeNodeMap,\n\t\t\thasFullTypeInformation,\n\t\t\tprogram\n\t\t},\n\t\tts\n\t};\n}\n\nlet cacheTypeScript: TypeScript | null = null;\n/**\n * Get TypeScript tools\n */\nexport function getTypeScript(context: RuleContext): TypeScript | null {\n\tif (cacheTypeScript) {\n\t\treturn cacheTypeScript;\n\t}\n\tcacheTypeScript = loadModule(context, 'typescript');\n\tif (cacheTypeScript) {\n\t\treturn cacheTypeScript;\n\t}\n\ttry {\n\t\t// eslint-disable-next-line @typescript-eslint/no-require-imports -- ignore\n\t\tcacheTypeScript ??= require('typescript');\n\t} catch {\n\t\t// ignore\n\t}\n\treturn cacheTypeScript;\n}\n/**\n * Check whether the given type is a truthy literal type or not.\n */\nexport function isTruthyLiteral(type: TS.Type, tsTools: TSTools): boolean {\n\tif (type.isUnion()) {\n\t\treturn type.types.every((t) => isTruthyLiteral(t, tsTools));\n\t}\n\treturn (\n\t\t(isBooleanLiteralType(type, tsTools.ts) &&\n\t\t\ttsTools.service.program.getTypeChecker().typeToString(type) === 'true') ||\n\t\t(type.isLiteral() && Boolean(type.value))\n\t);\n}\n\n/**\n * Check whether the given type is a falsy type or not.\n */\nexport function isFalsyType(type: TS.Type, tsTools: TSTools): boolean {\n\tif (type.isUnion()) {\n\t\treturn type.types.every((t) => isFalsyType(t, tsTools));\n\t}\n\tif (\n\t\tisUndefinedType(type, tsTools.ts) ||\n\t\tisNullType(type, tsTools.ts) ||\n\t\tisVoidType(type, tsTools.ts)\n\t)\n\t\treturn true;\n\tif (type.isLiteral()) return !type.value;\n\treturn (\n\t\tisBooleanLiteralType(type, tsTools.ts) &&\n\t\ttsTools.service.program.getTypeChecker().typeToString(type) === 'false'\n\t);\n}\n/**\n * Check whether the given type is a nullish type or not.\n */\nexport function isNullishType(type: TS.Type, ts: TypeScript): boolean {\n\tif (type.isUnion()) {\n\t\treturn type.types.every((t) => isNullishType(t, ts));\n\t}\n\treturn isNullType(type, ts) || isUndefinedType(type, ts);\n}\n\n/**\n * Checks whether the given type is nullable or not.\n */\nexport function isNullableType(type: TS.Type, ts: TypeScript): boolean {\n\tif (type.isUnion()) {\n\t\treturn type.types.some((t) => isNullableType(t, ts));\n\t}\n\treturn isNullType(type, ts) || isUndefinedType(type, ts);\n}\n/**\n * Check whether the given type is a boolean literal type or not.\n */\nexport function isBooleanLiteralType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.BooleanLiteral) !== 0;\n}\n\n/**\n * Check whether the given type is an object type or not.\n */\nexport function isObjectType(type: TS.Type, ts: TypeScript): type is TS.ObjectType {\n\treturn (type.flags & ts.TypeFlags.Object) !== 0;\n}\n/**\n * Check whether the given type is a reference type or not.\n */\nexport function isReferenceObjectType(type: TS.Type, ts: TypeScript): type is TS.TypeReference {\n\treturn isObjectType(type, ts) && (type.objectFlags & ts.ObjectFlags.Reference) !== 0;\n}\n/**\n * Check whether the given type is a tuple type or not.\n */\nexport function isTupleObjectType(type: TS.Type, ts: TypeScript): type is TS.TupleType {\n\treturn isObjectType(type, ts) && (type.objectFlags & ts.ObjectFlags.Tuple) !== 0;\n}\n/**\n * Check whether the given type is a tuple type or not.\n * Unlike isTupleObjectType, it also refers to reference types.\n */\nexport function isTupleType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (\n\t\tisTupleObjectType(type, ts) ||\n\t\t(isReferenceObjectType(type, ts) && isTupleObjectType(type.target, ts))\n\t);\n}\n\n/**\n * Check whether the given type is an any type or not.\n */\nexport function isAnyType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.Any) !== 0;\n}\n/**\n * Check whether the given type is an unknown type or not.\n */\nexport function isUnknownType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.Unknown) !== 0;\n}\n/**\n * Check whether the given type is a never type or not.\n */\nexport function isNeverType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.Never) !== 0;\n}\n/**\n * Check whether the given type is an undefined type or not.\n */\nexport function isUndefinedType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.Undefined) !== 0;\n}\n/**\n * Check whether the given type is a void type or not.\n */\nexport function isVoidType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.Void) !== 0;\n}\n/**\n * Check whether the given type is a null type or not.\n */\nexport function isNullType(type: TS.Type, ts: TypeScript): boolean {\n\treturn (type.flags & ts.TypeFlags.Null) !== 0;\n}\n/**\n * Check whether the given type is a possibly falsy type or not.\n */\nexport function isPossiblyFalsyType(type: TS.Type, ts: TypeScript): boolean {\n\tif (type.isUnion()) {\n\t\treturn type.types.some((t) => isPossiblyFalsyType(t, ts));\n\t}\n\treturn (type.flags & ts.TypeFlags.PossiblyFalsy) !== 0;\n}\n\n/**\n * Get the call signatures from the given type.\n * This method is heavily inspired by tsutils. https://github.com/ajafff/tsutils\n * The MIT License (MIT) Copyright (c) 2017 Klaus Meinhardt\n * https://github.com/ajafff/tsutils/blob/master/LICENSE\n */\nexport function getCallSignaturesOfType(type: TS.Type): readonly TS.Signature[] {\n\tif (type.isUnion()) {\n\t\treturn type.types.flatMap((t) => getCallSignaturesOfType(t));\n\t}\n\tif (type.isIntersection()) {\n\t\tlet signatures: readonly TS.Signature[] = [];\n\t\tfor (const t of type.types) {\n\t\t\tconst sig = getCallSignaturesOfType(t);\n\t\t\tif (sig.length !== 0) {\n\t\t\t\tif (signatures.length) {\n\t\t\t\t\t// if more than one type of the intersection has call signatures, none of them is useful for inference\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tsignatures = sig;\n\t\t\t}\n\t\t}\n\t\treturn signatures;\n\t}\n\treturn type.getCallSignatures();\n}\n\n/**\n * Resolves the given node's type. Will resolve to the type's generic constraint, if it has one.\n * Copied this method from @typescript-eslint/type-utils. https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/type-utils\n * The MIT License (MIT) Copyright (c) 2021 TypeScript ESLint and other contributors\n * https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/type-utils/LICENSE\n */\nexport function getConstrainedTypeAtLocation(checker: TS.TypeChecker, node: TS.Node): TS.Type {\n\tconst nodeType = checker.getTypeAtLocation(node);\n\tconst constrained = checker.getBaseConstraintOfType(nodeType);\n\n\treturn constrained ?? nodeType;\n}\n\n/**\n * Get the type name of a given type.\n *\n * Copied this method from @typescript-eslint/type-utils. https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/type-utils\n * The MIT License (MIT) Copyright (c) 2021 TypeScript ESLint and other contributors\n * https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/type-utils/LICENSE\n *\n * @param type The type to get the name of.\n */\nexport function getTypeName(type: TS.Type, tsTools: TSTools): string {\n\tconst { ts } = tsTools;\n\t// It handles `string` and string literal types as string.\n\tif ((type.flags & ts.TypeFlags.StringLike) !== 0) {\n\t\treturn 'string';\n\t}\n\n\tconst typeChecker = tsTools.service.program.getTypeChecker();\n\n\t// If the type is a type parameter which extends primitive string types,\n\t// but it was not recognized as a string like. So check the constraint\n\t// type of the type parameter.\n\tif ((type.flags & ts.TypeFlags.TypeParameter) !== 0) {\n\t\t// `type.getConstraint()` method doesn't return the constraint type of\n\t\t// the type parameter for some reason. So this gets the constraint type\n\t\t// via AST.\n\t\tconst symbol = type.getSymbol();\n\t\tconst decls = symbol?.getDeclarations();\n\t\tconst typeParamDecl = decls?.[0] as TS.TypeParameterDeclaration;\n\t\tif (ts.isTypeParameterDeclaration(typeParamDecl) && typeParamDecl.constraint != null) {\n\t\t\treturn getTypeName(typeChecker.getTypeFromTypeNode(typeParamDecl.constraint), tsTools);\n\t\t}\n\t}\n\n\t// If the type is a union and all types in the union are string like,\n\t// return `string`. For example:\n\t// - `\"a\" | \"b\"` is string.\n\t// - `string | string[]` is not string.\n\tif (\n\t\ttype.isUnion() &&\n\t\ttype.types.map((value) => getTypeName(value, tsTools)).every((t) => t === 'string')\n\t) {\n\t\treturn 'string';\n\t}\n\n\t// If the type is an intersection and a type in the intersection is string\n\t// like, return `string`. For example: `string & {__htmlEscaped: void}`\n\tif (\n\t\ttype.isIntersection() &&\n\t\ttype.types.map((value) => getTypeName(value, tsTools)).some((t) => t === 'string')\n\t) {\n\t\treturn 'string';\n\t}\n\n\treturn typeChecker.typeToString(type);\n}\n\n/**\n * Return the type of the given property in the given type, or undefined if no such property exists\n */\nexport function getTypeOfPropertyOfType(\n\ttype: TS.Type,\n\tname: string,\n\tchecker: TS.TypeChecker\n): TS.Type | undefined {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- getTypeOfPropertyOfType is an internal API of TS.\n\treturn (checker as any).getTypeOfPropertyOfType(type, name);\n}\n\n/**\n * Check whether the given symbol is a method type or not.\n */\nexport function isMethodSymbol(type: TS.Symbol, ts: TypeScript): boolean {\n\treturn (type.getFlags() & ts.SymbolFlags.Method) !== 0;\n}\n\n/**\n * Check whether the given node is a property signature kind or not.\n */\nexport function isPropertySignatureKind(\n\tnode: TS.Node,\n\tts: TypeScript\n): node is TS.PropertySignature {\n\treturn node.kind === ts.SyntaxKind.PropertySignature;\n}\n\n/**\n * Check whether the given node is a function type kind or not.\n */\nexport function isFunctionTypeKind(node: TS.Node, ts: TypeScript): node is TS.FunctionTypeNode {\n\treturn node.kind === ts.SyntaxKind.FunctionType;\n}\n\n/**\n * Check whether the given node is a method signature kind or not.\n */\nexport function isMethodSignatureKind(node: TS.Node, ts: TypeScript): node is TS.MethodSignature {\n\treturn node.kind === ts.SyntaxKind.MethodSignature;\n}\n\n/**\n * Check whether the given node is a type reference kind or not.\n */\nexport function isTypeReferenceKind(node: TS.Node, ts: TypeScript): node is TS.TypeReferenceNode {\n\treturn node.kind === ts.SyntaxKind.TypeReference;\n}\n\n/**\n * Check whether the given node is an identifier kind or not.\n */\nexport function isIdentifierKind(node: TS.Node, ts: TypeScript): node is TS.Identifier {\n\treturn node.kind === ts.SyntaxKind.Identifier;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/binary-expression01-errors.yaml",
    "content": "- message: Unnecessary conditional, both sides of the expression are literal values.\n  line: 4\n  column: 13\n  suggestions: null\n- message: Unnecessary conditional, both sides of the expression are literal values.\n  line: 8\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/binary-expression01-input.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: null | boolean = null\n\n  const a = foo == null\n  $: b = foo == null\n  $: {\n    let bar: null | boolean = null\n    c = bar == null\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/binary-expression01-output.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: null | boolean = null\n\n  const a = foo == null\n  $: b = foo == null\n  $: {\n    let bar: null | boolean = null\n    c = bar == null\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/example-errors.yaml",
    "content": "- message: Unnecessary conditional, value is always falsy.\n  line: 4\n  column: 11\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/example-input.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: number | null = null\n  /* ✗ BAD */\n  let b = foo || 42\n  /* ✓ GOOD */\n  $: a = foo || 42\n</script>\n\n<!-- ✓ GOOD -->\n{foo || 42}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/example-output.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: number | null = null\n  /* ✗ BAD */\n  let b = foo || 42\n  /* ✓ GOOD */\n  $: a = foo || 42\n</script>\n\n<!-- ✓ GOOD -->\n{foo || 42}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/nullish-coalescing01-errors.yaml",
    "content": "- message: Unnecessary conditional, left-hand side of `??` operator is always\n    `null` or `undefined`.\n  line: 5\n  column: 13\n  suggestions: null\n- message: Unnecessary conditional, left-hand side of `??` operator is always\n    `null` or `undefined`.\n  line: 9\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/nullish-coalescing01-input.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: null | boolean = null\n  export let bar: string = \"foo\"\n\n  const a = foo ?? bar\n  $: b = foo ?? bar\n  $: {\n    let baz: null | boolean = null\n    c = baz ?? bar\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/nullish-coalescing01-output.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: null | boolean = null\n  export let bar: string = \"foo\"\n\n  const a = foo ?? bar\n  $: b = foo ?? bar\n  $: {\n    let baz: null | boolean = null\n    c = baz ?? bar\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/optional-chaining01-errors.yaml",
    "content": "- message: Unnecessary optional chain on a non-nullish value.\n  line: 4\n  column: 16\n  suggestions: null\n- message: Unnecessary optional chain on a non-nullish value.\n  line: 8\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/optional-chaining01-input.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: null | string = \"abc\"\n\n  const a = foo?.length\n  $: b = foo?.length\n  $: {\n    let bar: null | string = \"abc\"\n    c = bar?.length\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/optional-chaining01-output.svelte",
    "content": "<script lang=\"ts\">\n  export let foo: null | string = \"abc\"\n\n  const a = foo.length\n  $: b = foo?.length\n  $: {\n    let bar: null | string = \"abc\"\n    c = bar.length\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/test01-errors.yaml",
    "content": "- message: Unnecessary conditional, value is always truthy.\n  line: 5\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/test01-input.svelte",
    "content": "<script lang=\"ts\">\n  export let foo = false\n  export let bar: string | undefined = undefined\n\n  const a = !foo && bar\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/invalid/test01-output.svelte",
    "content": "<script lang=\"ts\">\n  export let foo = false\n  export let bar: string | undefined = undefined\n\n  const a = !foo && bar\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/valid/reactive-statement01-input.svelte",
    "content": "<script lang=\"ts\">\n  export let foo = false\n  export let bar: string | undefined = undefined\n\n  $: a = !foo && bar\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/@typescript-eslint/no-unnecessary-condition/valid/template01-input.svelte",
    "content": "<script lang=\"ts\">\n  let foo = false\n\n  let bar: string | undefined = undefined\n</script>\n\n<button on:click={() => (foo = !foo)} />\n\n{#if !foo}\n  <div>{bar}</div>\n{/if}\n\n{#if !foo && bar}\n  <div>{bar}</div>\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/enforce/_config.json",
    "content": "{\n\t\"options\": [{ \"enforceScriptPresent\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/enforce/no-script01-errors.yaml",
    "content": "- message: The <script> block should be present and its lang attribute should be\n    omitted.\n  line: 1\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/enforce/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"javascript\"], \"style\": [\"javascript\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/javascript-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"javascript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"javascript\".\n      output: |\n        <script lang=\"javascript\"></script>\n\n        <style lang=\"javascript\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/javascript-as-style-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"javascript\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"javascript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"javascript\".\n      output: |\n        <script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/js01-input.svelte",
    "content": "<script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/null01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"javascript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"javascript\".\n      output: |\n        <script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/null01-input.svelte",
    "content": "<script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/ts01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"javascript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"javascript\".\n      output: |\n        <script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/ts01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/typescript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"javascript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"javascript\".\n      output: |\n        <script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/javascript/typescript01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"js\"], \"style\": [\"js\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"js\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"js\".\n      output: |\n        <script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/javascript01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"js\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"js\".\n      output: |\n        <script lang=\"js\"></script>\n\n        <style lang=\"js\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"js\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/null01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"js\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"js\".\n      output: |\n        <script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/null01-input.svelte",
    "content": "<script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/ts01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"js\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"js\".\n      output: |\n        <script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/ts01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/typescript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"js\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"js\".\n      output: |\n        <script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/js/typescript01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"ts\"], \"style\": [\"ts\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script context=\"module\" lang=\"ts\"></script>\n\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/javascript01-input.svelte",
    "content": "<script context=\"module\" lang=\"javascript\"></script>\n\n<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script context=\"module\" lang=\"ts\"></script>\n\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/js01-input.svelte",
    "content": "<script context=\"module\" lang=\"js\"></script>\n\n<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/null01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"ts\".\n      output: |\n        <script lang=\"ts\" context=\"module\"></script>\n\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/null01-input.svelte",
    "content": "<script context=\"module\"></script>\n\n<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/ts-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"ts\".\n      output: |\n        <script lang=\"ts\" context=\"module\"></script>\n\n        <script lang=\"ts\"></script>\n\n        <style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/ts-as-style-lang01-input.svelte",
    "content": "<script context=\"module\"></script>\n\n<script lang=\"ts\"></script>\n\n<style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/typescript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script context=\"module\" lang=\"ts\"></script>\n\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/module-context/typescript01-input.svelte",
    "content": "<script context=\"module\" lang=\"typescript\"></script>\n\n<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"script\": [\"ts\", \"typescript\", null],\n\t\t\t\"style\": [\"ts\", \"typescript\", null]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be either omitted or\n    one of \"ts\", \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/javascript01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be either omitted or\n    one of \"ts\", \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/js01-input.svelte",
    "content": "<script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/null-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be either omitted or\n    one of \"ts\", \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n\n        <style></style>\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n\n        <style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/null-as-style-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/ts-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be either omitted or\n    one of \"ts\", \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n\n        <style lang=\"ts\"></style>\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n\n        <style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/ts-as-style-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/typescript-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be either omitted or\n    one of \"ts\", \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n\n        <style lang=\"typescript\"></style>\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n\n        <style lang=\"typescript\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/multiple/typescript-as-style-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style lang=\"typescript\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute omitted.\n      output: |\n        <script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/javascript01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute omitted.\n      output: |\n        <script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/js01-input.svelte",
    "content": "<script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/null-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute omitted.\n      output: |\n        <script></script>\n\n        <style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/null-as-style-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/ts01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute omitted.\n      output: |\n        <script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/ts01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/typescript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute omitted.\n      output: |\n        <script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/null/typescript01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": \"ts\", \"style\": [\"ts\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/javascript01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/js01-input.svelte",
    "content": "<script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/null01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/null01-input.svelte",
    "content": "<script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n\n        <style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/typescript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/shorthand/typescript01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"ts\"], \"style\": [\"ts\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/javascript01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/js01-input.svelte",
    "content": "<script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/null01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/null01-input.svelte",
    "content": "<script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n\n        <style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"ts\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/typescript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"ts\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"ts\".\n      output: |\n        <script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/ts/typescript01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"typescript\"], \"style\": [\"typescript\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/javascript01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/javascript01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/js01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/js01-input.svelte",
    "content": "<script lang=\"js\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/null01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/null01-input.svelte",
    "content": "<script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/ts01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <script> block with the lang attribute set to \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/ts01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <script> block should be \"typescript\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <script> block with the value \"typescript\".\n      output: |\n        <script lang=\"typescript\"></script>\n\n        <style lang=\"typescript\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"typescript\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/enforce/_config.json",
    "content": "{\n\t\"options\": [{ \"enforceStylePresent\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/enforce/no-style01-errors.yaml",
    "content": "- message: The <style> block should be present and its lang attribute should be omitted.\n  line: 1\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/enforce/no-style01-input.svelte",
    "content": "<script></script>\n\n<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/_config.json",
    "content": "{\n\t\"options\": [{ \"style\": [null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/null-as-script-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be omitted.\n  line: 3\n  column: 1\n  suggestions:\n    - desc: Replace a <style> block with the lang attribute omitted.\n      output: |\n        <script></script>\n\n        <style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/null-as-script-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/sass01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <style> block with the lang attribute omitted.\n      output: |\n        <style>\n\n        </style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/sass01-input.svelte",
    "content": "<style lang=\"sass\">\n\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/scss01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be omitted.\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <style> block with the lang attribute omitted.\n      output: |\n        <style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/null/scss01-input.svelte",
    "content": "<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"sass\", null], \"style\": [\"sass\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/null01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be \"sass\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <style> block with the value \"sass\".\n      output: |\n        <style lang=\"sass\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/null01-input.svelte",
    "content": "<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be \"sass\".\n  line: 5\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <style> block with the value \"sass\".\n      output: |\n        <script lang=\"sass\">\n\n        </script>\n\n        <style lang=\"sass\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-input.svelte",
    "content": "<script lang=\"sass\">\n\n</script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/scss01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be \"sass\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <style> block with the lang attribute set to \"sass\".\n      output: |\n        <style lang=\"sass\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/sass/scss01-input.svelte",
    "content": "<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"scss\", null], \"style\": [\"scss\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/null01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be \"scss\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <style> block with the value \"scss\".\n      output: |\n        <style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/null01-input.svelte",
    "content": "<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be \"scss\".\n  line: 1\n  column: 1\n  suggestions:\n    - desc: Replace a <style> block with the lang attribute set to \"scss\".\n      output: |\n        <style lang=\"scss\">\n\n        </style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte",
    "content": "<style lang=\"sass\">\n\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-errors.yaml",
    "content": "- message: The lang attribute of the <style> block should be \"scss\".\n  line: 3\n  column: 1\n  suggestions:\n    - desc: Add lang attribute to a <style> block with the value \"scss\".\n      output: |\n        <script lang=\"scss\"></script>\n\n        <style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-input.svelte",
    "content": "<script lang=\"scss\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/non-svelte/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"enforceScriptPresent\": true,\n\t\t\t\"enforceStylePresent\": true,\n\t\t\t\"script\": \"ts\",\n\t\t\t\"style\": \"scss\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/non-svelte/non-svelte01-input.ts",
    "content": "export const value: boolean | number = false;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/non-svelte/non-svelte02-input.js",
    "content": "export const value = false;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/enforce/_config.json",
    "content": "{\n\t\"options\": [{ \"enforceScriptPresent\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/enforce/script-present01-input.svelte",
    "content": "<script></script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"javascript\"], \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/javascript/correct-lang01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/javascript/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/javascript/style-lang01-input.svelte",
    "content": "<script lang=\"javascript\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/js/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"js\"], \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/js/correct-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/js/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/js/style-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"ts\"], \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/multiple/correct-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/multiple/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/multiple/style-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/null/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [null], \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/null/no-lang01-input.svelte",
    "content": "<script></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/null/style-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": \"ts\", \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/shorthand/correct-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/shorthand/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/shorthand/style-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"ts\", \"typescript\", null], \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang02-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang03-input.svelte",
    "content": "<script></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/style-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/style-lang02-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/ts/style-lang03-input.svelte",
    "content": "<script></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"typescript\"], \"style\": [\"scss\", null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/typescript/correct-lang01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/typescript/no-script01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/script/typescript/style-lang01-input.svelte",
    "content": "<script lang=\"typescript\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/enforce/_config.json",
    "content": "{\n\t\"options\": [{ \"enforceStylePresent\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/enforce/style-present01-input.svelte",
    "content": "<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/null/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"js\", null], \"style\": [null] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/null/no-lang01-input.svelte",
    "content": "<script></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/null/script-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/sass/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"ts\", null], \"style\": [\"sass\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"sass\">\n\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/sass/no-style01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n<style lang=\"sass\">\n\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/scss/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": [\"js\", null], \"style\": [\"scss\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/scss/correct-lang01-input.svelte",
    "content": "<script></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/scss/no-style01-input.svelte",
    "content": "<b>Hello World!</b>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/block-lang/valid/style/scss/script-lang01-input.svelte",
    "content": "<script lang=\"js\"></script>\n\n<style lang=\"scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/button-false/_config.json",
    "content": "{\n\t\"options\": [{ \"button\": false }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/button-false/invalid-button-errors.yaml",
    "content": "- message: button is a forbidden value for button type attribute.\n  line: 1\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/button-false/invalid-button-input.svelte",
    "content": "<button type=\"button\">Hello World</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/reset-false/_config.json",
    "content": "{\n\t\"options\": [{ \"reset\": false }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/reset-false/invalid-reset-errors.yaml",
    "content": "- message: reset is a forbidden value for button type attribute.\n  line: 1\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/reset-false/invalid-reset-input.svelte",
    "content": "<button type=\"reset\">Hello World</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/submit-false/_config.json",
    "content": "{\n\t\"options\": [{ \"submit\": false }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/submit-false/invalid-submit-errors.yaml",
    "content": "- message: submit is a forbidden value for button type attribute.\n  line: 1\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/submit-false/invalid-submit-input.svelte",
    "content": "<button type=\"submit\">Hello World</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/test01-errors.yaml",
    "content": "- message: Missing an explicit type attribute for button.\n  line: 1\n  column: 1\n  suggestions: null\n- message: A value must be set for button type attribute.\n  line: 2\n  column: 9\n  suggestions: null\n- message: A value must be set for button type attribute.\n  line: 3\n  column: 9\n  suggestions: null\n- message: foo is an invalid value for button type attribute.\n  line: 4\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/invalid/test01-input.svelte",
    "content": "<button>Hello World</button>\n<button type=\"\">Hello World</button>\n<button type>Hello World</button>\n<button type=\"foo\">Hello World</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/button-has-type/valid/test01-input.svelte",
    "content": "<script>\n\timport Button from './my-button';\n\tlet buttonType = 'button';\n</script>\n\n<button type=\"button\">Hello World</button>\n<button type=\"submit\">Hello World</button>\n<button type=\"reset\">Hello World</button>\n<button type={buttonType}>Hello World</button>\n<Button>Hello World</Button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/global/_config.json",
    "content": "{\n  \"options\": [{ \"checkGlobal\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/global/should-be-id01-errors.yaml",
    "content": "- message: Selector should select by ID instead of class\n  line: 10\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 14\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 18\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 22\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 22\n  column: 19\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 26\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 30\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 35\n  column: 5\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 39\n  column: 5\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 43\n  column: 5\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 47\n  column: 5\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 47\n  column: 13\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 51\n  column: 5\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 55\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/global/should-be-id01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a>Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<style>\n  :global(.link) {\n    color: red;\n  }\n\n  :global(.bold) {\n    color: red;\n  }\n\n  :global(.link:active) {\n    color: red;\n  }\n\n  :global(.link + .bold) {\n    color: red;\n  }\n\n  :global(.bold[data-key=\"val\"]) {\n    color: red;\n  }\n\n  :global(.bold::before) {\n    color: red;\n  }\n\n  :global {\n    .link {\n      color: red;\n    }\n\n    .bold {\n      color: red;\n    }\n\n    .link:active {\n      color: red;\n    }\n\n    .link + .bold {\n      color: red;\n    }\n\n    .bold[data-key=\"val\"] {\n      color: red;\n    }\n\n    .bold::before {\n      color: red;\n    }\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/global/should-be-type01-errors.yaml",
    "content": "- message: Selector should select by element type instead of class\n  line: 12\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 16\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 20\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 24\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 24\n  column: 28\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 28\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 32\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 36\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 40\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 44\n  column: 15\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 48\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 53\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 57\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 61\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 65\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 65\n  column: 13\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 69\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 73\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 77\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 81\n  column: 5\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 85\n  column: 9\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 89\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/global/should-be-type01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\" data-key=\"val\">Text 2</b>\n\n<i id=\"italic\">Italic</i>\n\n<style>\n  :global(.link) {\n    color: red;\n  }\n\n  :global(.bold) {\n    color: red;\n  }\n\n  :global(.link:active) {\n    color: red;\n  }\n\n  :global(.link) + :global(.bold) {\n    color: red;\n  }\n\n  :global(.bold[data-key=\"val\"]) {\n    color: red;\n  }\n\n  :global(.bold::before) {\n    color: red;\n  }\n\n  :global(#italic) {\n    color: red;\n  }\n\n  :global(#italic:active) {\n    color: red;\n  }\n\n  :global(b + #italic) {\n    color: red;\n  }\n\n  :global(#italic::before) {\n    color: red;\n  }\n\n  :global {\n    .link {\n      color: red;\n    }\n\n    .bold {\n      color: red;\n    }\n\n    .link:active {\n      color: red;\n    }\n\n    .link + .bold {\n      color: red;\n    }\n\n    .bold[data-key=\"val\"] {\n      color: red;\n    }\n\n    .bold::before {\n      color: red;\n    }\n\n    #italic {\n      color: red;\n    }\n\n    #italic:active {\n      color: red;\n    }\n\n    b + #italic {\n      color: red;\n    }\n\n    #italic::before {\n      color: red;\n    }\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-class-type/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"id\", \"class\", \"type\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-class-type/should-be-id-combination01-errors.yaml",
    "content": "- message: Selector should select by ID instead of class\n  line: 12\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 13\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 14\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 15\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 15\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 16\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 17\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 18\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 19\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 20\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 20\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 21\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-class-type/should-be-id-combination01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a>Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<i>Italic</i>\n\n<style>\n  .link,\n  .bold,\n  .link:active,\n  .link + .bold,\n  .bold[data-key=\"val\"],\n  .bold::before,\n  i,\n  i:active,\n  .bold + i,\n  i::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-class-type/should-be-id01-errors.yaml",
    "content": "- message: Selector should select by ID instead of class\n  line: 12\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 16\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 20\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 24\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 24\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 28\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 32\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 36\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 40\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 44\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 44\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 48\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-class-type/should-be-id01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a>Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<i>Italic</i>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  i {\n    color: red;\n  }\n\n  i:active {\n    color: red;\n  }\n\n  .bold + i {\n    color: red;\n  }\n\n  i::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-type-class/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"id\", \"type\", \"class\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-type-class/should-be-id01-errors.yaml",
    "content": "- message: Selector should select by ID instead of class\n  line: 12\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 16\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 20\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 24\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 24\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 28\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 32\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 36\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 40\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 44\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 44\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of element type\n  line: 48\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-type-class/should-be-id01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a>Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<i>Italic</i>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  i {\n    color: red;\n  }\n\n  i:active {\n    color: red;\n  }\n\n  .bold + i {\n    color: red;\n  }\n\n  i::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-type-class/should-be-type01-errors.yaml",
    "content": "- message: Selector should select by element type instead of class\n  line: 10\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 14\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 18\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 22\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 22\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 26\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 30\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/id-type-class/should-be-type01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\" data-key=\"val\">Text 2</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-class-id/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"type\", \"class\", \"id\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-class-id/should-be-type01-errors.yaml",
    "content": "- message: Selector should select by element type instead of class\n  line: 12\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 16\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 20\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 24\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 24\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 28\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 32\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 36\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 40\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 44\n  column: 7\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 48\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-class-id/should-be-type01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\" data-key=\"val\">Text 2</b>\n\n<i id=\"italic\">Italic</i>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  #italic {\n    color: red;\n  }\n\n  #italic:active {\n    color: red;\n  }\n\n  b + #italic {\n    color: red;\n  }\n\n  #italic::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-id-with-components01-errors.yaml",
    "content": "- message: Selector should select by ID instead of class\n  line: 18\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 22\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 26\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 30\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 30\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 34\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 38\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-id-with-components01-input.svelte",
    "content": "<script>\n  import MyComponent from \"./MyComponent.svelte\"\n</script>\n\n<a class=\"link\">Click me!</a>\n\n<MyComponent class=\"link\">Component</MyComponent>\n\n<a>Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<MyComponent class=\"bold\">Component</MyComponent>\n\n<b data-key=\"val\">Text 3</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-id01-errors.yaml",
    "content": "- message: Selector should select by ID instead of class\n  line: 10\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 14\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 18\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 22\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 22\n  column: 11\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 26\n  column: 3\n  suggestions: null\n- message: Selector should select by ID instead of class\n  line: 30\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-id01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a>Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-type-with-components01-errors.yaml",
    "content": "- message: Selector should select by element type instead of class\n  line: 22\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 26\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 30\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 34\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 34\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 38\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 42\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 46\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 50\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 54\n  column: 7\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 58\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-type-with-components01-input.svelte",
    "content": "<script>\n  import MyComponent from \"./MyComponent.svelte\"\n</script>\n\n<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<MyComponent class=\"link\">Component</MyComponent>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\" data-key=\"val\">Text 2</b>\n\n<MyComponent class=\"bold\">Component</MyComponent>\n\n<i id=\"italic\">Italic</i>\n\n<MyComponent id=\"italic\">Component</MyComponent>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  #italic {\n    color: red;\n  }\n\n  #italic:active {\n    color: red;\n  }\n\n  b + #italic {\n    color: red;\n  }\n\n  #italic::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-type01-errors.yaml",
    "content": "- message: Selector should select by element type instead of class\n  line: 12\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 16\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 20\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 24\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 24\n  column: 11\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 28\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of class\n  line: 32\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 36\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 40\n  column: 3\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 44\n  column: 7\n  suggestions: null\n- message: Selector should select by element type instead of ID\n  line: 48\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/invalid/type-id-class/should-be-type01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\" data-key=\"val\">Text 2</b>\n\n<i id=\"italic\">Italic</i>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  #italic {\n    color: red;\n  }\n\n  #italic:active {\n    color: red;\n  }\n\n  b + #italic {\n    color: red;\n  }\n\n  #italic::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/class-id-type/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"class\", \"id\", \"type\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/class-id-type/class-scss01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b>Text 2</b>\n\n<style lang=\"scss\">\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/class-id-type/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/class-type-id/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"class\", \"type\", \"id\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/class-type-id/class-scss01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b>Text 2</b>\n\n<style lang=\"scss\">\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/class-type-id/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"id\", \"class\", \"type\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\">Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<b class:conditional={true}>Text 3</b>\n\n{#each [\"one\", \"two\"] as iter}\n  <span class=\"iterated-each\">{iter}</span>\n{/each}\n\n<CustomComponent>\n  <span class=\"iterated-component\">Text 5</span>\n</CustomComponent>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  .conditional {\n    color: red;\n  }\n\n  .iterated-each {\n    color: red;\n  }\n\n  .iterated-component {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/id-scss01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b>Text 2</b>\n\n<style lang=\"scss\">\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/id01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n\n  #link:active {\n    color: red;\n  }\n\n  #link + #bold {\n    color: red;\n  }\n\n  #bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  #bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/svelte-5/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/svelte-5/class01-input.svelte",
    "content": "<span>Outside</span>\n\n{#snippet iterated()}\n  <span class=\"iterated-snippet\">Text 4</span>\n{/snippet}\n\n<style>\n  .iterated-snippet {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"id\", \"type\", \"class\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<span class=\"link\">Click me two!</span>\n\n<b class=\"bold\">Text 1</b>\n\n<strong class=\"bold\">Text 2</strong>\n\n<b data-key=\"val\">Text 2</b>\n\n<b class:conditional={true}>Text 3</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  .conditional {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/id-scss01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b>Text 2</b>\n\n<style lang=\"scss\">\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/id01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n\n  #link:active {\n    color: red;\n  }\n\n  #link + #bold {\n    color: red;\n  }\n\n  #bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  #bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/type01-input.svelte",
    "content": "<a>Click me!</a>\n\n<a>Click me two!</a>\n\n<b>Text 1</b>\n\n<b>Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n\n  a:active {\n    color: red;\n  }\n\n  a + b {\n    color: red;\n  }\n\n  b[data-key=\"val\"] {\n    color: red;\n  }\n\n  b::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"type\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<a>Click me three!</a>\n\n<a class=\"unique\">Click me three!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\">Text 2</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<b class:conditional={true}>Text 4</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  .unique {\n    color: red;\n  }\n\n  .conditional {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/id01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<a>Click me too!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n\n  #link:active {\n    color: red;\n  }\n\n  #link + #bold {\n    color: red;\n  }\n\n  #bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  #bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/type-scss01-input.svelte",
    "content": "<a>Click me!</a>\n\n<b>Text 1</b>\n\n<style lang=\"scss\">\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/type01-input.svelte",
    "content": "<a>Click me!</a>\n\n<a>Click me two!</a>\n\n<b>Text 1</b>\n\n<b>Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n\n  a:active {\n    color: red;\n  }\n\n  a + b {\n    color: red;\n  }\n\n  b[data-key=\"val\"] {\n    color: red;\n  }\n\n  b::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"type\", \"class\", \"id\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"bold\">Click me two!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"link\">Text 2</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<b class:conditional={true}>Text 4</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  .conditional {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/type-scss01-input.svelte",
    "content": "<a>Click me!</a>\n\n<b>Text 1</b>\n\n<style lang=\"scss\">\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/type01-input.svelte",
    "content": "<a>Click me!</a>\n\n<a>Click me two!</a>\n\n<b>Text 1</b>\n\n<b>Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n\n  a:active {\n    color: red;\n  }\n\n  a + b {\n    color: red;\n  }\n\n  b[data-key=\"val\"] {\n    color: red;\n  }\n\n  b::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/_config.json",
    "content": "{\n  \"options\": [{ \"style\": [\"type\", \"id\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<a>Click me three!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\">Text 2</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<b class:conditinal={true}>Text 4</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  .conditinal {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/id01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<a>Click me too!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n\n  #link:active {\n    color: red;\n  }\n\n  #link + #bold {\n    color: red;\n  }\n\n  #bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  #bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/type-scss01-input.svelte",
    "content": "<a>Click me!</a>\n\n<b>Text 1</b>\n\n<style lang=\"scss\">\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/type01-input.svelte",
    "content": "<a>Click me!</a>\n\n<a>Click me two!</a>\n\n<b>Text 1</b>\n\n<b>Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n\n  a:active {\n    color: red;\n  }\n\n  a + b {\n    color: red;\n  }\n\n  b[data-key=\"val\"] {\n    color: red;\n  }\n\n  b::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class-dynamic-prefix01-input.svelte",
    "content": "<script>\n  import { value } from \"package\";\n\n  const derived = \"link-three-\" + value;\n</script>\n\n<a>Click me!</a>\n\n<a class={\"link-one-\" + value}>Click me two!</a>\n\n<a class={\"link-one-\" + value}>Click me two!</a>\n\n<a class={`link-two-${value}`}>Click me three!</a>\n\n<a class={`link-two-${value}`}>Click me three!</a>\n\n<a class={derived}>Click me four!</a>\n\n<a class={derived}>Click me four!</a>\n\n<style>\n  .link-one-foo {\n    color: red;\n  }\n\n  .link-two-foo {\n    color: red;\n  }\n\n  .link-three-foo {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class-dynamic-suffix01-input.svelte",
    "content": "<script>\n  import { value } from \"package\";\n\n  const derived = value + \"-link-three\";\n</script>\n\n<a>Click me!</a>\n\n<a class={value + \"-link-one\"}>Click me two!</a>\n\n<a class={value + \"-link-one\"}>Click me two!</a>\n\n<a class={`${value}-link-two`}>Click me three!</a>\n\n<a class={`${value}-link-two`}>Click me three!</a>\n\n\n<a class={derived}>Click me four!</a>\n\n<a class={derived}>Click me four!</a>\n\n{#each [\"one\", \"two\"] as count}\n  <b class={\"bold-\" + count}>Bold in each</b>\n{/each}\n\n<style>\n  .foo-link-one {\n    color: red;\n  }\n\n  .foo-link-two {\n    color: red;\n  }\n\n  .foo-link-three {\n    color: red;\n  }\n\n  .bold-one {\n    color: red;\n  }\n\n  .bold-two {\n    color: blue;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class-dynamic-universal01-input.svelte",
    "content": "<script>\n  import { value } from \"package\";\n</script>\n\n<a>Click me!</a>\n\n<a class={value}>Click me two!</a>\n\n<a class={value}>Click me two!</a>\n\n<style>\n  .link-one {\n    color: red;\n  }\n\n  .link-two {\n    color: red;\n  }\n\n  .link-three {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class01-input.svelte",
    "content": "<a class=\"link\">Click me!</a>\n\n<a class=\"link\">Click me two!</a>\n\n<a>Click me three!</a>\n\n<b class=\"bold\">Text 1</b>\n\n<b class=\"bold\">Text 2</b>\n\n<b data-key=\"val\">Text 3</b>\n\n<b class:conditional={true}>Text 4</b>\n\n<b class=\"conditional-two\">Text 5</b>\n\n<b class:conditional-two={true}>Text 6</b>\n\n<style>\n  .link {\n    color: red;\n  }\n\n  .bold {\n    color: red;\n  }\n\n  .link:active {\n    color: red;\n  }\n\n  .link + .bold {\n    color: red;\n  }\n\n  .bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  .bold::before {\n    color: red;\n  }\n\n  .conditional {\n    color: red;\n  }\n\n  .conditional-two {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/global01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<a>Click me two!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b>Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  :global(a) {\n    color: red;\n  }\n\n  :global(b) {\n    color: red;\n  }\n\n  :global(a:active) {\n    color: red;\n  }\n\n  :global(a + b) {\n    color: red;\n  }\n\n  :global(b[data-key=\"val\"]) {\n    color: red;\n  }\n\n  :global(b::before) {\n    color: red;\n  }\n\n  :global(#link) {\n    color: red;\n  }\n\n  :global(#bold) {\n    color: red;\n  }\n\n  :global(#link:active) {\n    color: red;\n  }\n\n  :global(#link + #bold) {\n    color: red;\n  }\n\n  :global(#bold[data-key=\"val\"]) {\n    color: red;\n  }\n\n  :global(#bold::before) {\n    color: red;\n  }\n\n  :global(.link) {\n    color: red;\n  }\n\n  :global(.bold) {\n    color: red;\n  }\n\n  :global(.link:active) {\n    color: red;\n  }\n\n  :global(.link + .bold) {\n    color: red;\n  }\n\n  :global(.bold[data-key=\"val\"]) {\n    color: red;\n  }\n\n  :global(.bold::before) {\n    color: red;\n  }\n\n  :global {\n    a {\n      color: red;\n    }\n\n    b {\n      color: red;\n    }\n\n    a:active {\n      color: red;\n    }\n\n    a + b {\n      color: red;\n    }\n\n    b[data-key=\"val\"] {\n      color: red;\n    }\n\n    b::before {\n      color: red;\n    }\n\n    #link {\n      color: red;\n    }\n\n    #bold {\n      color: red;\n    }\n\n    #link:active {\n      color: red;\n    }\n\n    #link + #bold {\n      color: red;\n    }\n\n    #bold[data-key=\"val\"] {\n      color: red;\n    }\n\n    #bold::before {\n      color: red;\n    }\n\n    .link {\n      color: red;\n    }\n\n    .bold {\n      color: red;\n    }\n\n    .link:active {\n      color: red;\n    }\n\n    .link + .bold {\n      color: red;\n    }\n\n    .bold[data-key=\"val\"] {\n      color: red;\n    }\n\n    .bold::before {\n      color: red;\n    }\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/id-dynamic-prefix01-input.svelte",
    "content": "<script>\n  import { value } from \"package\";\n\n  const derived = \"link-three-\" + value;\n</script>\n\n<a>Click me!</a>\n\n<a id={\"link-one-\" + value}>Click me two!</a>\n\n<a id={`link-two-${value}`}>Click me three!</a>\n\n<a id={derived}>Click me four!</a>\n\n<style>\n  #link-one-foo {\n    color: red;\n  }\n\n  #link-two-foo {\n    color: red;\n  }\n\n  #link-three-foo {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/id-dynamic-suffix01-input.svelte",
    "content": "<script>\n  import { value } from \"package\";\n\n  const derived = value + \"-link-three\";\n</script>\n\n<a>Click me!</a>\n\n<a id={value + \"-link-one\"}>Click me two!</a>\n\n<a id={`${value}-link-two`}>Click me three!</a>\n\n<a id={derived}>Click me four!</a>\n\n<style>\n  #foo-link-one {\n    color: red;\n  }\n\n  #foo-link-two {\n    color: red;\n  }\n\n  #foo-link-three {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/id-dynamic-universal01-input.svelte",
    "content": "<script>\n  import { value } from \"package\";\n</script>\n\n<a>Click me!</a>\n\n<a id={value}>Click me two!</a>\n\n<a id={value}>Click me two!</a>\n\n<style>\n  #link-one {\n    color: red;\n  }\n\n  #link-two {\n    color: red;\n  }\n\n  #link-three {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/id01-input.svelte",
    "content": "<a id=\"link\">Click me!</a>\n\n<a>Click me too!</a>\n\n<b id=\"bold\">Text 1</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  #link {\n    color: red;\n  }\n\n  #bold {\n    color: red;\n  }\n\n  #link:active {\n    color: red;\n  }\n\n  #link + #bold {\n    color: red;\n  }\n\n  #bold[data-key=\"val\"] {\n    color: red;\n  }\n\n  #bold::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/recursive-loop01-input.svelte",
    "content": "<script>\n\tconst a = derived;\n\tconst derived = a;\n</script>\n\n<a id={derived}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/type-scss01-input.svelte",
    "content": "<a>Click me!</a>\n\n<b>Text 1</b>\n\n<style lang=\"scss\">\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/type01-input.svelte",
    "content": "<a>Click me!</a>\n\n<a>Click me two!</a>\n\n<b>Text 1</b>\n\n<b>Text 2</b>\n\n<b data-key=\"val\">Text 2</b>\n\n<style>\n  a {\n    color: red;\n  }\n\n  b {\n    color: red;\n  }\n\n  a:active {\n    color: red;\n  }\n\n  a + b {\n    color: red;\n  }\n\n  b[data-key=\"val\"] {\n    color: red;\n  }\n\n  b::before {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/derived-has-same-inputs-outputs/invalid/test01-errors.yaml",
    "content": "- message: The argument name should be '$a'.\n  line: 3\n  column: 13\n  suggestions:\n    - desc: Rename the parameter from b to $a.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, ($a) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$c'.\n  line: 6\n  column: 13\n  suggestions:\n    - desc: Rename the parameter from d to $c.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, ($c, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$e'.\n  line: 9\n  column: 19\n  suggestions:\n    - desc: Rename the parameter from g to $e.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([$e, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$f'.\n  line: 9\n  column: 22\n  suggestions:\n    - desc: Rename the parameter from h to $f.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, $f]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$i'.\n  line: 12\n  column: 19\n  suggestions:\n    - desc: Rename the parameter from k to $i.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([$i, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$j'.\n  line: 12\n  column: 22\n  suggestions:\n    - desc: Rename the parameter from l to $j.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, $j], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$l'.\n  line: 15\n  column: 26\n  suggestions:\n    - desc: Rename the parameter from $n to $l.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $l]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$o'.\n  line: 18\n  column: 22\n  suggestions:\n    - desc: Rename the parameter from $p to $o.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$o, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$a'.\n  line: 21\n  column: 13\n  suggestions:\n    - desc: Rename the parameter from b to $a.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, ($a) => {\n        \tdoSomethingWith($a);\n\n        \tsomethingWithACallback(() => {\n        \t\t$a;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$a'.\n  line: 28\n  column: 13\n  suggestions:\n    - desc: Rename the parameter from b to $a.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, ($a) => {\n        \t$a;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$e'.\n  line: 37\n  column: 19\n  suggestions:\n    - desc: Rename the parameter from g to $e.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([$e, h]) => {\n        \t$e;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\t$e;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$f'.\n  line: 37\n  column: 22\n  suggestions:\n    - desc: Rename the parameter from h to $f.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, $f]) => {\n        \tg;\n        \t$f;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\t$f;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$e'.\n  line: 46\n  column: 19\n  suggestions:\n    - desc: Rename the parameter from g to $e.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([$e, h]) => {\n        \t$e;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$f'.\n  line: 46\n  column: 22\n  suggestions:\n    - desc: Rename the parameter from h to $f.\n      messageId: renameParam\n      output: |\n        import { derived } from 'svelte/store';\n\n        derived(a, (b) => {\n        \t/** do nothing */\n        });\n        derived(c, (d, set) => {\n        \t/** do nothing */\n        });\n        derived([e, f], ([g, h]) => {\n        \t/** do nothing */\n        });\n        derived([i, j], ([k, l], set) => {\n        \t/** do nothing */\n        });\n        derived([null, l], ([$m, $n]) => {\n        \t/** do nothing */\n        });\n        derived([o, null], ([$p, $q]) => {\n        \t/** do nothing */\n        });\n        derived(a, (b) => {\n        \tdoSomethingWith(b);\n\n        \tsomethingWithACallback(() => {\n        \t\tb;\n        \t});\n        });\n        derived(a, (b) => {\n        \tb;\n\n        \tsomethingWithACallback(() => {\n        \t\t// purposely shadow the var, this should not be updated\n        \t\tconst b = 303;\n        \t\tb;\n        \t});\n        });\n        derived([e, f], ([g, h]) => {\n        \tg;\n        \th;\n\n        \tsomethingWithACallback(() => {\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived([e, f], ([g, $f]) => {\n        \tg;\n        \t$f;\n\n        \tsomethingWithACallback(() => {\n        \t\tconst g = 303;\n        \t\tconst h = 808;\n        \t\tg;\n        \t\th;\n        \t});\n        });\n        derived(a, (b) => {\n        \t// cause a conflict in names so the suggestion can't work\n        \tconst $a = 303;\n        \t$a;\n        });\n        somethingWithACallback(() => {\n        \tconst $a = 303;\n        \tderived(a, (b) => {\n        \t\t$a;\n        \t});\n        });\n- message: The argument name should be '$a'.\n  line: 57\n  column: 13\n  suggestions: null\n- message: The argument name should be '$a'.\n  line: 64\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/derived-has-same-inputs-outputs/invalid/test01-input.js",
    "content": "import { derived } from 'svelte/store';\n\nderived(a, (b) => {\n\t/** do nothing */\n});\nderived(c, (d, set) => {\n\t/** do nothing */\n});\nderived([e, f], ([g, h]) => {\n\t/** do nothing */\n});\nderived([i, j], ([k, l], set) => {\n\t/** do nothing */\n});\nderived([null, l], ([$m, $n]) => {\n\t/** do nothing */\n});\nderived([o, null], ([$p, $q]) => {\n\t/** do nothing */\n});\nderived(a, (b) => {\n\tdoSomethingWith(b);\n\n\tsomethingWithACallback(() => {\n\t\tb;\n\t});\n});\nderived(a, (b) => {\n\tb;\n\n\tsomethingWithACallback(() => {\n\t\t// purposely shadow the var, this should not be updated\n\t\tconst b = 303;\n\t\tb;\n\t});\n});\nderived([e, f], ([g, h]) => {\n\tg;\n\th;\n\n\tsomethingWithACallback(() => {\n\t\tg;\n\t\th;\n\t});\n});\nderived([e, f], ([g, h]) => {\n\tg;\n\th;\n\n\tsomethingWithACallback(() => {\n\t\tconst g = 303;\n\t\tconst h = 808;\n\t\tg;\n\t\th;\n\t});\n});\nderived(a, (b) => {\n\t// cause a conflict in names so the suggestion can't work\n\tconst $a = 303;\n\t$a;\n});\nsomethingWithACallback(() => {\n\tconst $a = 303;\n\tderived(a, (b) => {\n\t\t$a;\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/derived-has-same-inputs-outputs/valid/test01-input.js",
    "content": "import { derived } from 'svelte/store';\n\nderived(a, ($a) => {\n\t/** do nothing */\n});\nderived(c, ($c, set) => {\n\t/** do nothing */\n});\nderived([e, f], ([$e, $f]) => {\n\t/** do nothing */\n});\nderived([i, j], ([$i, $j], set) => {\n\t/** do nothing */\n});\nderived(null, ($null, set) => {\n\t/** do nothing */\n});\nderived(null, ($k, set) => {\n\t/** do nothing */\n});\nderived([null, l], ([$m, $l]) => {\n\t/** do nothing */\n});\nderived([n, null], ([$n, $o]) => {\n\t/** do nothing */\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/invalid/no-slot-types01-errors.yaml",
    "content": "- message: The component must define the $$Slots interface.\n  line: 1\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/invalid/no-slot-types01-input.svelte",
    "content": "<script lang=\"ts\">\n</script>\n\n<slot />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/valid/has-slot-types-with-alias01-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype $$Slots = {\n\t\tdefalt: Record<string, never>;\n\t};\n</script>\n\n<slot />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/valid/has-slot-types01-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface $$Slots {\n\t\tdefalt: Record<string, never>;\n\t}\n</script>\n\n<slot />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/valid/named-slot01-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface $$Slots {\n\t\tnamed: Record<string, never>;\n\t}\n</script>\n\n<slot name=\"named\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/valid/no-slots01-input.svelte",
    "content": "<script lang=\"ts\">\n</script>\n\ncontent\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-slot-types/valid/no-typescript01-input.svelte",
    "content": "<script>\n</script>\n\n<slot />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \"^4\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/invalid/no-strict-events01-errors.yaml",
    "content": "- message: The component must have the strictEvents attribute on its <script> tag\n    or it must define the $$Events interface.\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/invalid/no-strict-events01-input.svelte",
    "content": "<script lang=\"ts\">\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \"^4\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface $$Events {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-type-alias01-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype $$Events = {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte",
    "content": "<script lang=\"ts\" strictEvents>\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte",
    "content": "<script>\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte",
    "content": "<script lang=\"ts\" context=\"module\">\n</script>\n\n<script lang=\"ts\" strictEvents>\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/below/_config.json",
    "content": "{\n\t\"options\": [{ \"multiline\": \"below\", \"singleline\": \"below\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/below/test01-errors.yaml",
    "content": "- message: Expected a linebreak before this attribute.\n  line: 9\n  column: 9\n  suggestions: null\n- message: Expected a linebreak before this attribute.\n  line: 13\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/below/test01-input.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"checkbox\">\n<!-- prettier-ignore -->\n<button type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/below/test01-output.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input\ntype=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/beside/_config.json",
    "content": "{\n\t\"options\": [{ \"multiline\": \"beside\", \"singleline\": \"beside\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/beside/test01-errors.yaml",
    "content": "- message: Expected no linebreak before this attribute.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Expected no linebreak before this attribute.\n  line: 16\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/beside/test01-input.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"checkbox\">\n<!-- prettier-ignore -->\n<button type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/beside/test01-output.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/test01-errors.yaml",
    "content": "- message: Expected no linebreak before this attribute.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Expected a linebreak before this attribute.\n  line: 9\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/test01-input.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"checkbox\">\n<!-- prettier-ignore -->\n<button type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/invalid/test01-output.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/valid/below/_config.json",
    "content": "{\n\t\"options\": [{ \"multiline\": \"below\", \"singleline\": \"below\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/valid/below/test01-input.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n\n  type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input\n  \n  type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/valid/beside/_config.json",
    "content": "{\n\t\"options\": [{ \"multiline\": \"beside\", \"singleline\": \"beside\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/valid/beside/test01-input.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input    type=\"checkbox\">\n<!-- prettier-ignore -->\n<button type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button    on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/first-attribute-linebreak/valid/test01-input.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  type=\"button\"\n  on:click={click} />\n\n<!-- prettier-ignore -->\n<input type=\"checkbox\">\n<!-- prettier-ignore -->\n<button\n  on:click={\n    click\n  } />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/multiline-never/_config.json",
    "content": "{\n\t\"options\": [{ \"multiline\": \"never\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/multiline-never/test01-errors.yaml",
    "content": "- message: Expected no line breaks before closing bracket, but 1 line break found.\n  line: 2\n  column: 12\n  suggestions: null\n- message: Expected no line breaks before closing bracket, but 1 line break found.\n  line: 7\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/multiline-never/test01-input.svelte",
    "content": "<div\nclass=\"foo\"\n></div>\n<div\nclass=\"bar\"></div>\n<div\nclass=\"bar\"\n>\nChildren\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/multiline-never/test01-output.svelte",
    "content": "<div\nclass=\"foo\"></div>\n<div\nclass=\"bar\"></div>\n<div\nclass=\"bar\">\nChildren\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/always/_config.json",
    "content": "{\n\t\"options\": [{ \"selfClosingTag\": { \"singleline\": \"always\", \"multiline\": \"always\" } }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/always/test-errors.yaml",
    "content": "- message: Expected 1 line break before closing bracket, but no line breaks found.\n  line: 1\n  column: 18\n  suggestions: null\n- message: Expected 1 line break before closing bracket, but 2 line breaks found.\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/always/test-input.svelte",
    "content": "<Custom foo=\"bar\" />\n<Custom \n  foo=\"bar\"\n/>\n<Custom \n  foo=\"bar\"\n\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/always/test-output.svelte",
    "content": "<Custom foo=\"bar\"\n/>\n<Custom \n  foo=\"bar\"\n/>\n<Custom \n  foo=\"bar\"\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/never/_config.json",
    "content": "{\n\t\"options\": [{ \"selfClosingTag\": { \"singleline\": \"never\", \"multiline\": \"never\" } }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/never/test-errors.yaml",
    "content": "- message: Expected no line breaks before closing bracket, but 1 line break found.\n  line: 3\n  column: 12\n  suggestions: null\n- message: Expected no line breaks before closing bracket, but 2 line breaks found.\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/never/test-input.svelte",
    "content": "<Custom foo=\"bar\" />\n<Custom \n  foo=\"bar\"\n/>\n<Custom \n  foo=\"bar\"\n\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/self-closing/never/test-output.svelte",
    "content": "<Custom foo=\"bar\" />\n<Custom \n  foo=\"bar\"/>\n<Custom \n  foo=\"bar\"/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/singleline-always/_config.json",
    "content": "{\n\t\"options\": [{ \"singleline\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/singleline-always/test01-errors.yaml",
    "content": "- message: Expected 1 line break before closing bracket, but no line breaks found.\n  line: 1\n  column: 5\n  suggestions: null\n- message: Expected 1 line break before closing bracket, but no line breaks found.\n  line: 2\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/singleline-always/test01-input.svelte",
    "content": "<div></div>\n<div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/singleline-always/test01-output.svelte",
    "content": "<div\n></div>\n<div\n>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/test01-errors.yaml",
    "content": "- message: Expected no line breaks before closing bracket, but 3 line breaks found.\n  line: 3\n  column: 8\n  suggestions: null\n- message: Expected no line breaks before closing bracket, but 1 line break found.\n  line: 8\n  column: 5\n  suggestions: null\n- message: Expected 1 line break before closing bracket, but no line breaks found.\n  line: 11\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/test01-input.svelte",
    "content": "<div>\n  <div>\n  </div\n\n\n  >\n</div>\n<div\n></div>\n<div\n  class=\"foo\"></div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/test01-output.svelte",
    "content": "<div>\n  <div>\n  </div>\n</div>\n<div></div>\n<div\n  class=\"foo\"\n></div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/test02-errors.yaml",
    "content": "- message: Expected 1 line break before closing bracket, but 2 line breaks found.\n  line: 3\n  column: 14\n  suggestions: null\n- message: Expected no line breaks before closing bracket, but 2 line breaks found.\n  line: 7\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/test02-input.svelte",
    "content": "<SingleLine class=\"foo\" />\n<Multiline\n  class=\"foo\"\n\n  />\n\n<div\n\n  />\n\n<div />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/invalid/test02-output.svelte",
    "content": "<SingleLine class=\"foo\" />\n<Multiline\n  class=\"foo\"\n/>\n\n<div/>\n\n<div />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-new-line/valid/test01-input.svelte",
    "content": "<div></div>\n<SelfClosing \n  class=\"foo\"\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/closing-ignore/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"selfClosingTag\": \"ignore\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/closing-ignore/closing-ignore-errors.yaml",
    "content": "- message: Expected no space before '>', but found.\n  line: 2\n  column: 3\n  suggestions: null\n- message: Expected no space before '>', but found.\n  line: 2\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/closing-ignore/closing-ignore-input.svelte",
    "content": "<!-- prettier-ignore -->\n<p  >Hello</p  >\n<!-- prettier-ignore -->\n<div/>\n<div />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/closing-ignore/closing-ignore-output.svelte",
    "content": "<!-- prettier-ignore -->\n<p>Hello</p>\n<!-- prettier-ignore -->\n<div/>\n<div />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/end-ignore/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"endTag\": \"ignore\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/end-ignore/end-ignore-errors.yaml",
    "content": "- message: Expected no space before '>', but found.\n  line: 2\n  column: 3\n  suggestions: null\n- message: Expected space before '>', but not found.\n  line: 5\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/end-ignore/end-ignore-input.svelte",
    "content": "<!-- prettier-ignore -->\n<p  >Hello</p  >\n<p>Hi</p>\n<!-- prettier-ignore -->\n<div/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/end-ignore/end-ignore-output.svelte",
    "content": "<!-- prettier-ignore -->\n<p>Hello</p  >\n<p>Hi</p>\n<!-- prettier-ignore -->\n<div />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/start-ignore/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"startTag\": \"ignore\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/start-ignore/start-ignore-errors.yaml",
    "content": "- message: Expected no space before '>', but found.\n  line: 2\n  column: 14\n  suggestions: null\n- message: Expected space before '>', but not found.\n  line: 5\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/start-ignore/start-ignore-input.svelte",
    "content": "<!-- prettier-ignore -->\n<p  >Hello</p  >\n<p>Hi</p>\n<!-- prettier-ignore -->\n<div/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/start-ignore/start-ignore-output.svelte",
    "content": "<!-- prettier-ignore -->\n<p  >Hello</p>\n<p>Hi</p>\n<!-- prettier-ignore -->\n<div />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/test-01-errors.yaml",
    "content": "- message: Expected no space before '>', but found.\n  line: 2\n  column: 3\n  suggestions: null\n- message: Expected no space before '>', but found.\n  line: 2\n  column: 14\n  suggestions: null\n- message: Expected space before '>', but not found.\n  line: 4\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/test-01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<p  >Hello</p  >\n<!-- prettier-ignore -->\n<div/>\n<!-- prettier-ignore -->\n<div\n>\n</div\n\n>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/invalid/test-01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<p>Hello</p>\n<!-- prettier-ignore -->\n<div />\n<!-- prettier-ignore -->\n<div\n>\n</div\n\n>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-closing-bracket-spacing/valid/test-01-input.svelte",
    "content": "<p>Hello</p>\n<div />\n<!-- prettier-ignore -->\n<div\n  />\n<!-- prettier-ignore -->\n<div\n  >\n</div\n\n>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/_config.json",
    "content": "{\n\t\"options\": [{ \"dynamic\": { \"quoted\": true } }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/test01-errors.yaml",
    "content": "- message: Expected to be enclosed by double quotes.\n  line: 9\n  column: 13\n  suggestions: null\n- message: Expected to be enclosed by double quotes.\n  line: 12\n  column: 13\n  suggestions: null\n- message: Expected to be enclosed by double quotes.\n  line: 18\n  column: 10\n  suggestions: null\n- message: Expected to be enclosed by quotes.\n  line: 20\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/test01-input.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=text bind:value=\"{text}\" />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type='text' bind:value=\"{value}\" />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src=\"{src}\" alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? \"a\" : \"b\"} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/test01-output.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value=\"{text}\" />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value=\"{value}\" />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src=\"{src}\" alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src=\"{src}\" alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src='{src === \"foo\" ? \"a\" : \"b\"}' alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/test02-errors.yaml",
    "content": "- message: Expected to be enclosed by double quotes.\n  line: 6\n  column: 13\n  suggestions: null\n- message: Expected to be enclosed by double quotes.\n  line: 6\n  column: 29\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/test02-input.svelte",
    "content": "<script>\n\tlet text = '';\n</script>\n\n<!-- prettier-ignore -->\n<input type=text bind:value={(text)} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/all-quotes/test02-output.svelte",
    "content": "<script>\n\tlet text = '';\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value=\"{(text)}\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/_config.json",
    "content": "{\n\t\"options\": [{ \"dynamic\": { \"avoidInvalidUnquotedInHTML\": true } }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/inline-handlers-errors.yaml",
    "content": "- message: Expected to be enclosed by double quotes.\n  line: 5\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/inline-handlers-input.svelte",
    "content": "<script>\n\tlet m = { x: 0, y: 0 };\n</script>\n\n<div on:mousemove={(e) => (m = { x: e.clientX, y: e.clientY })}>\n\tThe mouse position is {m.x} x {m.y}\n</div>\n\n<style>\n\tdiv {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/inline-handlers-output.svelte",
    "content": "<script>\n\tlet m = { x: 0, y: 0 };\n</script>\n\n<div on:mousemove=\"{(e) => (m = { x: e.clientX, y: e.clientY })}\">\n\tThe mouse position is {m.x} x {m.y}\n</div>\n\n<style>\n\tdiv {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/test01-errors.yaml",
    "content": "- message: Expected to be enclosed by double quotes.\n  line: 9\n  column: 13\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 9\n  column: 29\n  suggestions: null\n- message: Expected to be enclosed by double quotes.\n  line: 12\n  column: 13\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 12\n  column: 31\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 16\n  column: 10\n  suggestions: null\n- message: Expected to be enclosed by quotes.\n  line: 20\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/test01-input.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=text bind:value=\"{text}\" />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type='text' bind:value=\"{value}\" />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src=\"{src}\" alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? \"a\" : \"b\"} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/test01-output.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value={text} />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value={value} />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src='{src === \"foo\" ? \"a\" : \"b\"}' alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/test02-errors.yaml",
    "content": "- message: Expected to be enclosed by double quotes.\n  line: 7\n  column: 42\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/test02-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? 'a' : \"b\"} alt='{name} dances.' />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/avoid-invalid-unquoted-in-html/test02-output.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? 'a' : \"b\"} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/single/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"single\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/single/test01-errors.yaml",
    "content": "- message: Expected to be enclosed by single quotes.\n  line: 9\n  column: 13\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 9\n  column: 29\n  suggestions: null\n- message: Expected to be enclosed by single quotes.\n  line: 10\n  column: 13\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 12\n  column: 31\n  suggestions: null\n- message: Expected to be enclosed by single quotes.\n  line: 14\n  column: 16\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 16\n  column: 10\n  suggestions: null\n- message: Expected to be enclosed by single quotes.\n  line: 16\n  column: 22\n  suggestions: null\n- message: Expected to be enclosed by single quotes.\n  line: 18\n  column: 20\n  suggestions: null\n- message: Expected to be enclosed by single quotes.\n  line: 20\n  column: 42\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/single/test01-input.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=text bind:value=\"{text}\" />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type='text' bind:value=\"{value}\" />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src=\"{src}\" alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? \"a\" : \"b\"} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/single/test01-output.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type='text' bind:value={text} />\n<input type='text' bind:value />\n<!-- prettier-ignore -->\n<input type='text' bind:value={value} />\n\n<img {src} alt='{name} dances.' />\n<!-- prettier-ignore -->\n<img src={src} alt='{name} dances.' />\n<!-- prettier-ignore -->\n<img src={src} alt='{name} dances.' />\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? \"a\" : \"b\"} alt='{name} dances.' />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/test01-errors.yaml",
    "content": "- message: Expected to be enclosed by double quotes.\n  line: 9\n  column: 13\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 9\n  column: 29\n  suggestions: null\n- message: Expected to be enclosed by double quotes.\n  line: 12\n  column: 13\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 12\n  column: 31\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 14\n  column: 20\n  suggestions: null\n- message: Unexpected to be enclosed by any quotes.\n  line: 18\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/test01-input.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=text bind:value=\"{text}\" />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type='text' bind:value=\"{value}\" />\n<!-- prettier-ignore -->\n<input style:color=\"{value}\" />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src=\"{src}\" alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? \"a\" : \"b\"} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/invalid/test01-output.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value={text} />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value={value} />\n<!-- prettier-ignore -->\n<input style:color={value} />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src === \"foo\" ? \"a\" : \"b\"} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-quotes/valid/test01-input.svelte",
    "content": "<script>\n\tlet text = '';\n\tlet value = '';\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<input type=\"text\" bind:value={text} />\n<input type=\"text\" bind:value />\n<!-- prettier-ignore -->\n<input type=\"text\" bind:value={value} />\n\n<img {src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<!-- prettier-ignore -->\n<img src={src} alt=\"{name} dances.\" />\n<img src={src === 'foo' ? 'a' : 'b'} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/component-never/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"component\": \"never\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/component-never/component-never-errors.yaml",
    "content": "- message: Disallow self-closing on Svelte custom components.\n  line: 3\n  column: 18\n  suggestions: null\n- message: Disallow self-closing on Svelte custom components.\n  line: 4\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/component-never/component-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <CustomElement />\n  <I.Am.A.Foo />\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/component-never/component-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <CustomElement ></CustomElement>\n  <I.Am.A.Foo ></I.Am.A.Foo>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/math-never/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"math\": \"never\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/math-never/svelte-never-errors.yaml",
    "content": "- message: Disallow self-closing on MathML elements.\n  line: 3\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/math-never/svelte-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<svg><path /></svg>\n<math><msup /></math>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/math-never/svelte-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<svg><path /></svg>\n<math><msup ></msup></math>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-always/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"normal\": \"always\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-always/component-never-errors.yaml",
    "content": "- message: Require self-closing on HTML elements.\n  line: 3\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-always/component-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div></div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-always/component-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div/>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-ignore/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"normal\": \"ignore\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-ignore/normal-any-errors.yaml",
    "content": "- message: Require self-closing on HTML void elements.\n  line: 5\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-ignore/normal-any-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div />\n  <div></div>\n  <img>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-ignore/normal-any-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div />\n  <div></div>\n  <img/>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-never/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"normal\": \"never\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-never/component-never-errors.yaml",
    "content": "- message: Disallow self-closing on HTML elements.\n  line: 3\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-never/component-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div />\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/normal-never/component-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div ></div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/html/_config.json",
    "content": "{\n\t\"options\": [\"html\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/html/preset-html-errors.yaml",
    "content": "- message: Disallow self-closing on HTML elements.\n  line: 3\n  column: 8\n  suggestions: null\n- message: Require self-closing on HTML void elements.\n  line: 4\n  column: 7\n  suggestions: null\n- message: Disallow self-closing on Svelte custom components.\n  line: 5\n  column: 18\n  suggestions: null\n- message: Require self-closing on SVG elements.\n  line: 6\n  column: 13\n  suggestions: null\n- message: Disallow self-closing on MathML elements.\n  line: 7\n  column: 14\n  suggestions: null\n- message: Require self-closing on Svelte special elements.\n  line: 10\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/html/preset-html-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div />\n  <img>\n  <TestComponent />\n  <svg><path></path></svg>\n  <math><msup/></math>\n</div>\n<!-- prettier-ignore -->\n<svelte:head></svelte:head>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/html/preset-html-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div ></div>\n  <img/>\n  <TestComponent ></TestComponent>\n  <svg><path/></svg>\n  <math><msup></msup></math>\n</div>\n<!-- prettier-ignore -->\n<svelte:head/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/none/_config.json",
    "content": "{\n\t\"options\": [\"none\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/none/preset-none-errors.yaml",
    "content": "- message: Disallow self-closing on HTML elements.\n  line: 3\n  column: 8\n  suggestions: null\n- message: Disallow self-closing on Svelte custom components.\n  line: 4\n  column: 18\n  suggestions: null\n- message: Disallow self-closing on HTML void elements.\n  line: 5\n  column: 8\n  suggestions: null\n- message: Disallow self-closing on SVG elements.\n  line: 6\n  column: 14\n  suggestions: null\n- message: Disallow self-closing on MathML elements.\n  line: 7\n  column: 15\n  suggestions: null\n- message: Disallow self-closing on Svelte special elements.\n  line: 10\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/none/preset-none-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div />\n  <TestComponent />\n  <img />\n  <svg><path /></svg>\n  <math><msup /></math>\n</div>\n<!-- prettier-ignore -->\n<svelte:head />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/presets/none/preset-none-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div ></div>\n  <TestComponent ></TestComponent>\n  <img >\n  <svg><path ></path></svg>\n  <math><msup ></msup></math>\n</div>\n<!-- prettier-ignore -->\n<svelte:head ></svelte:head>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svelte-never/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"svelte\": \"never\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svelte-never/svelte-never-errors.yaml",
    "content": "- message: Disallow self-closing on Svelte special elements.\n  line: 2\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svelte-never/svelte-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<svelte:head />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svelte-never/svelte-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<svelte:head ></svelte:head>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svg-never/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"svg\": \"never\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svg-never/svelte-never-errors.yaml",
    "content": "- message: Disallow self-closing on SVG elements.\n  line: 2\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svg-never/svelte-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<svg><path /></svg>\n<math><msup></msup></math>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/svg-never/svelte-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<svg><path ></path></svg>\n<math><msup></msup></math>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/test01-errors.yaml",
    "content": "- message: Disallow self-closing on HTML elements.\n  line: 3\n  column: 7\n  suggestions: null\n- message: Require self-closing on Svelte custom components.\n  line: 4\n  column: 17\n  suggestions: null\n- message: Require self-closing on HTML void elements.\n  line: 5\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div/>\n  <CustomElement> </CustomElement>\n  <img>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <div></div>\n  <CustomElement/>\n  <img/>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/void-never/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"void\": \"never\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/void-never/void-never-errors.yaml",
    "content": "- message: Disallow self-closing on HTML void elements.\n  line: 3\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/void-never/void-never-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <img />\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/invalid/void-never/void-never-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <img >\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/html-self-closing/valid/test01-input.svelte",
    "content": "<div class=\"hello\">\n\t<div></div>\n\t<div>hello</div>\n\t<img />\n\t<svg><path /></svg>\n\t<math><msup></msup></math>\n\t{#if true}\n\t\t<svelte:self />\n\t{/if}\n\t<I.Am.A.Foo />\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/4-indent/_config.json",
    "content": "{\n\t\"options\": [{ \"indent\": 4 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/4-indent/test01-errors.yaml",
    "content": "- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 24 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 24 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 24 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 20 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 16 spaces but found 0 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 84\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 85\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/4-indent/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nlet text = \"abc\"\nconst maxlength = 42\nconst attrs = { disabled: true }\nfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\ntype=\"text\"\nclass=\"\na\nb\n\"\nbind:value={text}\n{maxlength}\n{...attrs}\nreadonly />\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\non:click={click}\n{maxlength}\n{...attrs}>\nCLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\ndata-attr\n>\n<div\ndata-attr\n>\n<div\ndata-attr\n>\n<input\ntype\n=\n\"text\"\nclass\n=\"\na\nb\n\"\nbind:value\n=\n{\ntext\n}\n{\nmaxlength\n}\n{\n...attrs\n}\nreadonly\n/>\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\non:click={\nclick\n}\n{\nmaxlength\n}\n{\n...attrs\n}\n>\nCLICK\nME!\n</button\n>\n</div\n>\n</div\n>\n<div\ndata-attr\n>\n</div\n>\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/4-indent/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/4-indent/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n    let text = \"abc\"\n    const maxlength = 42\n    const attrs = { disabled: true }\n    function click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n    type=\"text\"\n    class=\"\n        a\n        b\n    \"\n    bind:value={text}\n    {maxlength}\n    {...attrs}\n    readonly />\n<!-- prettier-ignore -->\n<button\n    type=\"button\"\n    on:click={click}\n    {maxlength}\n    {...attrs}>\n    CLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\n    data-attr\n>\n    <div\n        data-attr\n    >\n        <div\n            data-attr\n        >\n            <input\n                type\n                    =\n                    \"text\"\n                class\n                    =\"\n                        a\n                        b\n                    \"\n                bind:value\n                    =\n                    {\n                        text\n                    }\n                {\n                    maxlength\n                }\n                {\n                    ...attrs\n                }\n                readonly\n            />\n            <!-- prettier-ignore -->\n            <button\n                type=\"button\"\n                on:click={\n                    click\n                }\n                {\n                    maxlength\n                }\n                {\n                    ...attrs\n                }\n            >\n                CLICK\n                ME!\n            </button\n            >\n        </div\n        >\n    </div\n    >\n    <div\n        data-attr\n    >\n    </div\n    >\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/4-indent/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/align-attributes-vertically/_config.json",
    "content": "{\n\t\"options\": [{ \"alignAttributesVertically\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/align-attributes-vertically/attrs01-errors.yaml",
    "content": "- message: Expected indentation of 5 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 9 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 9 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 7 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/align-attributes-vertically/attrs01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div a\nb\nc\nd\ne={\nfoo\n}\nf>\n<div a\nb\nc\nd=\"\n\"\ne={\nfoo\n}\nf={\nfoo\n}>\na\n</div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/align-attributes-vertically/attrs01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div a\n     b\n     c\n     d\n     e={\n       foo\n     }\n     f>\n  <div a\n       b\n       c\n       d=\"\n       \"\n       e={\n         foo\n       }\n       f={\n         foo\n       }>\n    a\n  </div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/await01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 84\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/await01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let expression = Promise.resolve()\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{#await expression}\n...\n{:then name}\n...\n{:catch name}\n...\n{/await}\n\n{#await expression}\n...\n{:then name}\n...\n{/await}\n\n{#await expression then name}\n...\n{/await}\n\n{#await expression catch name}\n...\n{/await}\n\n<!---->\n{\n#await\nexpression\n}\n...\n{\n:then\nname\n}\n...\n{\n:catch\nname\n}\n...\n{\n/await\n}\n\n{\n#await\nexpression\n}\n...\n{\n:then\nname\n}\n...\n{\n/await\n}\n\n{\n#await\nexpression\nthen\nname\n}\n...\n{\n/await\n}\n\n{\n#await\nexpression\ncatch\nname\n}\n...\n{\n/await\n}\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/await01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/await01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let expression = Promise.resolve()\n</script>\n\n<!-- prettier-ignore -->\n<div>\n  {#await expression}\n    ...\n  {:then name}\n    ...\n  {:catch name}\n    ...\n  {/await}\n\n  {#await expression}\n    ...\n  {:then name}\n    ...\n  {/await}\n\n  {#await expression then name}\n    ...\n  {/await}\n\n  {#await expression catch name}\n    ...\n  {/await}\n\n  <!---->\n  {\n    #await\n      expression\n  }\n    ...\n  {\n    :then\n      name\n  }\n    ...\n  {\n    :catch\n      name\n  }\n    ...\n  {\n    /await\n  }\n\n  {\n    #await\n      expression\n  }\n    ...\n  {\n    :then\n      name\n  }\n    ...\n  {\n    /await\n  }\n\n  {\n    #await\n      expression\n    then\n      name\n  }\n    ...\n  {\n    /await\n  }\n\n  {\n    #await\n      expression\n    catch\n      name\n  }\n    ...\n  {\n    /await\n  }\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/await01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/const-tag01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/const-tag01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  export let boxes;\n</script>\n\n<!-- prettier-ignore -->\n{#each boxes as box}\n{\n@const\narea\n=\nbox.width\n*\nbox.height\n}\n{box.width} * {box.height} = {area}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/const-tag01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  export let boxes;\n</script>\n\n<!-- prettier-ignore -->\n{#each boxes as box}\n  {\n    @const\n    area\n      =\n      box.width\n        *\n        box.height\n  }\n  {box.width} * {box.height} = {area}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/deubg-tag01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/deubg-tag01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{\n@debug\nvar1\n,\nvar2\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/deubg-tag01-output.svelte",
    "content": "<!-- prettier-ignore -->\n{\n  @debug\n  var1\n  ,\n  var2\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/each01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/each01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let cats = [\n    { id: 'J---aiyznGQ', name: 'Keyboard Cat' },\n    { id: 'z_AbfPXTKms', name: 'Maru' },\n    { id: 'OUtn3pvWmpg', name: 'Henri The Existential Cat' }\n  ];\n</script>\n\n<h1>The Famous Cats of YouTube</h1>\n\n<!-- prettier-ignore -->\n<ul>\n{#each cats as { id, name }, i}\n<li><a target=\"_blank\" href=\"https://www.youtube.com/watch?v={id}\">\n{i + 1}: {name}\n</a></li>\n{/each}\n</ul>\n<!-- prettier-ignore -->\n<ul>\n{\n#each\ncats\nas\n{\nid,\nname\n}\n,\ni\n}\n<li><a target=\"_blank\" href=\"https://www.youtube.com/watch?v={id}\">\n{i + 1}: {name}\n</a></li>\n{\n/each\n}\n{\n#each\ncats\nas\nc\n,\nindex\n(\nc\n.\nid\n)\n}\n{\nc\n}\n{\nindex\n}\n{\n/each\n}\n{\n#each\ncats\nas\ncat\n}\n{cat.name}\n{\n:else\n}\n...\n{\n/each\n}\n</ul>\n\n<!--tests/fixtures/rules/indent/invalid/each01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/each01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let cats = [\n    { id: 'J---aiyznGQ', name: 'Keyboard Cat' },\n    { id: 'z_AbfPXTKms', name: 'Maru' },\n    { id: 'OUtn3pvWmpg', name: 'Henri The Existential Cat' }\n  ];\n</script>\n\n<h1>The Famous Cats of YouTube</h1>\n\n<!-- prettier-ignore -->\n<ul>\n  {#each cats as { id, name }, i}\n    <li><a target=\"_blank\" href=\"https://www.youtube.com/watch?v={id}\">\n      {i + 1}: {name}\n    </a></li>\n  {/each}\n</ul>\n<!-- prettier-ignore -->\n<ul>\n  {\n    #each\n      cats\n      as\n      {\n        id,\n        name\n      }\n      ,\n      i\n  }\n    <li><a target=\"_blank\" href=\"https://www.youtube.com/watch?v={id}\">\n      {i + 1}: {name}\n    </a></li>\n  {\n    /each\n  }\n  {\n    #each\n      cats\n      as\n      c\n      ,\n      index\n      (\n        c\n          .\n          id\n      )\n  }\n    {\n      c\n    }\n    {\n      index\n    }\n  {\n    /each\n  }\n  {\n    #each\n      cats\n      as\n      cat\n  }\n    {cat.name}\n  {\n    :else\n  }\n    ...\n  {\n    /each\n  }\n</ul>\n\n<!--tests/fixtures/rules/indent/invalid/each01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/html-text01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 1 whitespace.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/html-text01-input.svelte",
    "content": "<script>\n\texport let name = 's';\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{name}a\nb\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/html-text01-output.svelte",
    "content": "<script>\n  export let name = 's';\n</script>\n\n<!-- prettier-ignore -->\n<div>\n  {name}a\n  b\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/html-text02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/html-text02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\na\n<div />b\nc\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/html-text02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  a\n  <div />b\n  c\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/if01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/if01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nlet a = 0\nlet b = 0\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{#if a}\n<div></div>\n{/if}\n{\n#if\na\n}\n<div></div>\n{\n/if\n}\n{\n#if\na\n}\n<div></div>\n{\n:else\nif\nb\n}\n<div></div>\n{\n:else\n}\n<div></div>\n{\n/if\n}\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/if01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/if01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let a = 0\n  let b = 0\n</script>\n\n<!-- prettier-ignore -->\n<div>\n  {#if a}\n    <div></div>\n  {/if}\n  {\n    #if\n      a\n  }\n    <div></div>\n  {\n    /if\n  }\n  {\n    #if\n      a\n  }\n    <div></div>\n  {\n    :else\n    if\n      b\n  }\n    <div></div>\n  {\n    :else\n  }\n    <div></div>\n  {\n    /if\n  }\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/if01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/import-declaration01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/import-declaration01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nimport Def, {\nfoo\n} from 'mod';\nimport\nDef2, {\nbar\n} from 'mod';\n</script>\n\n<!-- import-declaration01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/import-declaration01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  import Def, {\n    foo\n  } from 'mod';\n  import\n    Def2, {\n      bar\n    } from 'mod';\n</script>\n\n<!-- import-declaration01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/indent-script/_config.json",
    "content": "{\n\t\"options\": [{ \"indentScript\": false }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/indent-script/indent-script-errors.yaml",
    "content": "- message: Expected indentation of 0 spaces but found 2 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/indent-script/indent-script-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const a = \"indent-script-input.svelte\"\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/indent-script/indent-script-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nconst a = \"indent-script-input.svelte\"\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/key01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/key01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let value = 42\n  let Component = {}\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{#key value}\n<Component />\n{/key}\n\n{\n#key\nvalue\n}\n<Component />\n{\n/key\n}\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/key01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/key01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let value = 42\n  let Component = {}\n</script>\n\n<!-- prettier-ignore -->\n<div>\n  {#key value}\n    <Component />\n  {/key}\n\n  {\n    #key\n      value\n  }\n    <Component />\n  {\n    /key\n  }\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/key01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-array01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-array01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n(\n[\n1\n,\n,\n2\n,\n]\n)\n;\n(\n[\na\n,\nb\n]\n)=>\na\n+\nb\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-array01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-array01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  (\n    [\n      1\n      ,\n      ,\n      2\n      ,\n    ]\n  )\n  ;\n  (\n    [\n      a\n      ,\n      b\n    ]\n  )=>\n    a\n      +\n      b\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-array01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\na\n=\nb\n;\na\n=\nb\n=\nc\n;\na\n+\nb\n+\nc\n;\na\n+\nb\n;\na\n=\nb\n||\nc\n-\nd\n+\ne;\n\n(\n{\na\n=\n1\n+\n2\n+\n3\n}\n=\nv\n)\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-binary01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  a\n    =\n    b\n  ;\n  a\n    =\n    b\n    =\n    c\n  ;\n  a\n    +\n    b\n    +\n    c\n  ;\n  a\n    +\n    b\n  ;\n  a\n    =\n    b\n    ||\n    c\n    -\n    d\n    +\n    e;\n\n  (\n    {\n      a\n        =\n        1\n        +\n        2\n        +\n        3\n    }\n      =\n      v\n  )\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-binary01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 78\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nif\n(\na\n=\nb\n)\n{\n}\nif\n(\na\n=\nb\n=\nc\n)\n{\n}\nif\n(\na\n+\nb\n+\nc\n)\n{\n}\nif\n(\na\n+\nb\n)\n{\n}\nif\n(\na === b\n||\nc === d\n||\ne === f\n)\n{\n}\nif\n(\na\n=\nb\n||\nc\n-\nd\n+\ne\n)\n{\n}\nif\n(\n{\na\n=\n1\n+\n2\n+\n3\n}\n=\nv\n)\n{\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-binary02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  if\n    (\n      a\n        =\n        b\n    )\n  {\n  }\n  if\n    (\n      a\n        =\n        b\n        =\n        c\n    )\n  {\n  }\n  if\n    (\n      a\n      +\n      b\n      +\n      c\n    )\n  {\n  }\n  if\n    (\n      a\n      +\n      b\n    )\n  {\n  }\n  if\n    (\n      a === b\n      ||\n      c === d\n      ||\n      e === f\n    )\n  {\n  }\n  if\n    (\n      a\n        =\n        b\n        ||\n        c\n        -\n        d\n        +\n        e\n    )\n  {\n  }\n  if\n    (\n      {\n        a\n          =\n          1\n          +\n          2\n          +\n          3\n      }\n        =\n        v\n    )\n  {\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-binary02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nif (\na === b ||\nc === d ||\ne === f\n) {\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-binary03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-binary03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  if (\n    a === b ||\n    c === d ||\n    e === f\n  ) {\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-binary03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-block01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-block01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n{\na\n+\nb\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-block01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-block01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  {\n    a\n      +\n      b\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-block01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-break01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-break01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nl\n:\nwhile\n(\na\n)\nfor\n(\nconst\niterator\nof\nobject\n)\n{\nif\n(\na\n)\n{\nbreak l\n}\ncontinue l\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-break01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-break01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  l\n    :\n    while\n      (\n        a\n      )\n      for\n        (\n          const\n            iterator\n            of\n            object\n        )\n      {\n        if\n          (\n            a\n          )\n        {\n          break l\n        }\n        continue l\n      }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-break01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-call01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-call01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\na\n(\n)\n;\nb\n.\nc\n(\na\n,\n{\nb\n}\n,\n)\n;\na\n?.\n(\nb\n)\n\nnew\nA\n(\n)\n;\nnew\nA\n(\na\n,\nb\n)\n;\n\nnew\nA\n\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-call01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-call01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  a\n    (\n    )\n  ;\n  b\n    .\n    c\n    (\n      a\n      ,\n      {\n        b\n      }\n      ,\n    )\n  ;\n  a\n    ?.\n    (\n      b\n    )\n\n  new\n    A\n      (\n      )\n  ;\n  new\n    A\n      (\n        a\n        ,\n        b\n      )\n  ;\n\n  new\n    A\n\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-call01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-class01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-class01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nclass\nA\n{\nstatic\ns\n(\n)\n{\n}\n\nget\na\n(\n)\n{\n}\n\nset\na\n(\na\n)\n{\n}\n\nf\n(\n)\n{\n}\n}\nclass\nB\nextends\nA\n{\nf\n(\n)\n{\n}\n}\na\n=\nclass\n{\nf\n(\n)\n{\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-class01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-class01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  class\n    A\n  {\n    static\n    s\n      (\n      )\n    {\n    }\n\n    get\n    a\n      (\n      )\n    {\n    }\n\n    set\n    a\n      (\n        a\n      )\n    {\n    }\n\n    f\n      (\n      )\n    {\n    }\n  }\n  class\n    B\n    extends\n      A\n  {\n    f\n      (\n      )\n    {\n    }\n  }\n  a\n    =\n    class\n    {\n      f\n        (\n        )\n      {\n      }\n    }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-class01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-conditional01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-conditional01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\na\n=\nb\n?\nc\n:\nd\n\na\n=\n(\nb\n)\n?\n(\nc\n)\n:\n(\nd\n)\n\na\n=\n(\nb\n) ? (\nc\n)\n:\n(\nd\n)\na = b\n? c\n: d\n? e\n: f;\na = b\n? c\n? d\n: e\n: e;\na = b\n? c\n: d\n? e\n: f\n? g\n: h;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-conditional01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-conditional01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  a\n    =\n    b\n      ?\n        c\n      :\n        d\n\n  a\n    =\n    (\n      b\n    )\n      ?\n        (\n          c\n        )\n      :\n        (\n          d\n        )\n\n  a\n    =\n    (\n      b\n    ) ? (\n      c\n    )\n      :\n        (\n          d\n        )\n  a = b\n    ? c\n    : d\n    ? e\n    : f;\n  a = b\n    ? c\n      ? d\n      : e\n    : e;\n  a = b\n    ? c\n    : d\n    ? e\n    : f\n    ? g\n    : h;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-conditional01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-do-while01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-do-while01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\ndo\n{\na++\n}\nwhile\n(\na\n)\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-do-while01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-do-while01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  do\n  {\n    a++\n  }\n  while\n    (\n      a\n    )\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-do-while01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-export01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-export01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script context=\"module\">\nexport\n*\nfrom\n\"mod\"\nexport\n*\nas\nfoo\nfrom\n\"mod\"\nexport\ndefault\nA\nexport\nvar\nv\n=\n1\n;\nlet a, b\nexport\n{\na\n,\nb\n}\nexport\n{\na1\n,\nb1\n}\nfrom\n\"mod\"\nexport\n{\na1\nas\na2\n,\nb1\nas\nb2\n}\nfrom\n\"mod\"\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-export01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-export01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script context=\"module\">\n  export\n    *\n  from\n    \"mod\"\n  export\n    *\n      as\n      foo\n  from\n    \"mod\"\n  export\n    default\n    A\n  export\n    var\n      v\n        =\n        1\n    ;\n  let a, b\n  export\n  {\n    a\n    ,\n    b\n  }\n  export\n  {\n    a1\n    ,\n    b1\n  }\n  from\n    \"mod\"\n  export\n  {\n    a1\n      as\n      a2\n    ,\n    b1\n      as\n      b2\n  }\n  from\n    \"mod\"\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-export01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-export02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-export02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nexport\n{\n}\n;\nexport\n{\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-export02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-export02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  export\n  {\n  }\n  ;\n  export\n  {\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-export02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-expr01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-expr01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nv =(\na\n,\nb\n,\nc\n)\n;\n++\ni\n;\ni++\n;\n`a`\n;\n`a${\nb\n}c`\n;\n`a${\nb\n}c${\nd\n}`\n;\ntag\n``\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-expr01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-expr01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  v =(\n    a\n    ,\n    b\n    ,\n    c\n  )\n  ;\n  ++\n    i\n  ;\n  i++\n  ;\n  `a`\n  ;\n  `a${\n    b\n  }c`\n  ;\n  `a${\n    b\n  }c${\n    d\n  }`\n  ;\n  tag\n    ``\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-expr01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-for01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 4 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-for01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nfor\n(\nconst\nkey\nin\nobject\n)\n{\na()\n}\nfor\n(\nconst\niterator\nof\nobject\n)\n{\na()\n}\nasync function f() {\nfor\nawait\n(\nconst\niterator\nof\nobject\n)\n{\na()\n}\n}\nfor\n(\nlet\nindex\n=\n0\n;\nindex\n<\narray\n.\nlength\n;\nindex++\n)\n{\nconst\nelement\n=\narray\n[\n    index\n]\n;\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-for01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-for01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  for\n    (\n      const\n        key\n        in\n        object\n    )\n  {\n    a()\n  }\n  for\n    (\n      const\n        iterator\n        of\n        object\n    )\n  {\n    a()\n  }\n  async function f() {\n    for\n    await\n      (\n        const\n          iterator\n          of\n          object\n      )\n    {\n      a()\n    }\n  }\n  for\n    (\n      let\n        index\n          =\n          0\n      ;\n      index\n        <\n        array\n          .\n          length\n      ;\n      index++\n    )\n  {\n    const\n      element\n        =\n        array\n          [\n            index\n          ]\n    ;\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-for01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-function01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-function01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n(\n[\na\n,\nb\n]\n)=>\na\n+\nb\n\nfunction\nfn\n(\na\n,\nb\n)\n{\na\n+\nb\n}\n\nf\n=\nfunction\n(\na\n,\nb\n)\n{\na\n+\nb\n}\n\no={\nfn\n(\na\n,\nb\n)\n{\na+b\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-function01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-function01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  (\n    [\n      a\n      ,\n      b\n    ]\n  )=>\n    a\n      +\n      b\n\n  function\n    fn\n    (\n      a\n      ,\n      b\n    )\n  {\n    a\n      +\n      b\n  }\n\n  f\n    =\n    function\n      (\n        a\n        ,\n        b\n      )\n    {\n      a\n        +\n        b\n    }\n\n  o={\n    fn\n      (\n        a\n        ,\n        b\n      )\n    {\n      a+b\n    }\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-function01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-if01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-if01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nif\n(\na\n)\n{\nb=c\n}\n\nif\n(\na\n)\nb=c\nif\n(\na\n)\nb=c\nelse\nc=b\n\nif\n(\na\n)\n{\nb=c\n}\nelse\n{\nc=b\n}\n\nif\n(\na\n)\n{\nb=c\n}\nelse\nif\n(\nd\n)\n{\nc=b\n}\n\nif\n(\na\n)\n{\nb=c\n}\nelse if\n(\nd\n)\n{\nc=b\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-if01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-if01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  if\n    (\n      a\n    )\n  {\n    b=c\n  }\n\n  if\n    (\n      a\n    )\n    b=c\n  if\n    (\n      a\n    )\n    b=c\n  else\n    c=b\n\n  if\n    (\n      a\n    )\n  {\n    b=c\n  }\n  else\n  {\n    c=b\n  }\n\n  if\n    (\n      a\n    )\n  {\n    b=c\n  }\n  else\n    if\n      (\n        d\n      )\n    {\n      c=b\n    }\n\n  if\n    (\n      a\n    )\n  {\n    b=c\n  }\n  else if\n    (\n      d\n    )\n  {\n    c=b\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-if01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-import01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-import01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script context=\"module\">\nimport\n\"mod\"\n\nimport\n{\n}\nfrom\n\"mod\"\n\nimport\nA\nfrom\n\"mod\"\n\nimport\nB\n,\n*\nas\nb\nfrom\n\"mod\"\n\nimport\nC\n,\n{\n}\nfrom\n\"mod\"\n\nimport\nD\n,\n{\nd\n}\nfrom\n\"mod\"\n\nimport\n*\nas\ne\nfrom\n\"mod\"\n\nimport\n{\nf\n}\nfrom\n\"foo\"\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-import01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-import01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script context=\"module\">\n  import\n    \"mod\"\n\n  import\n  {\n  }\n  from\n    \"mod\"\n\n  import\n    A\n  from\n    \"mod\"\n\n  import\n    B\n    ,\n    *\n      as\n      b\n  from\n    \"mod\"\n\n  import\n    C\n    ,\n    {\n    }\n  from\n    \"mod\"\n\n  import\n    D\n    ,\n    {\n      d\n    }\n  from\n    \"mod\"\n\n  import\n    *\n      as\n      e\n  from\n    \"mod\"\n\n  import\n  {\n    f\n  }\n  from\n    \"foo\"\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-import01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-import02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-import02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nimport {\nA,\nB,\nC,\n} from\n\"mod\"\nimport {\nD,\n} from\n\"mod\"\nimport {E,\nF,\n} from\n\"mod\"\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-import01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-import02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  import {\n    A,\n    B,\n    C,\n  } from\n    \"mod\"\n  import {\n    D,\n  } from\n    \"mod\"\n  import {E,\n    F,\n  } from\n    \"mod\"\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-import01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-member01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-member01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\na\n.\nb\n.\nc\n;\n\na\n?.\nb\n?.\nc\n;\n\na\n[\nb\n]\n[\nc\n]\n;\n\na\n?.\n[\nb\n]\n?.\n[\nc\n]\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-member01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-member01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  a\n    .\n    b\n    .\n    c\n  ;\n\n  a\n    ?.\n    b\n    ?.\n    c\n  ;\n\n  a\n    [\n      b\n    ]\n    [\n      c\n    ]\n  ;\n\n  a\n    ?.\n    [\n      b\n    ]\n    ?.\n    [\n      c\n    ]\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-member01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-methods01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-methods01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nclass A {\na\n() {\nreturn 42\n}\n\nb\n() {\nreturn 42\n}\n}\n\nconst o = {\na\n() {\nreturn 42\n},\nb\n() {\nreturn 42\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-methods01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-methods01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  class A {\n    a\n      () {\n      return 42\n    }\n\n    b\n      () {\n      return 42\n    }\n  }\n\n  const o = {\n    a\n      () {\n      return 42\n    },\n    b\n      () {\n      return 42\n    }\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-methods01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-prop01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-prop01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\no\n=\n{\na\n,\n[\nb\n]\n:\nb\n,\nc\n:\nd\n,\ne\n(\n)\n{\n},\n[\nf\n]\n(\n)\n{\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-prop01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-prop01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  o\n    =\n    {\n      a\n      ,\n      [\n        b\n      ]\n        :\n        b\n      ,\n      c\n        :\n        d\n      ,\n      e\n        (\n        )\n      {\n      },\n      [\n        f\n      ]\n        (\n        )\n      {\n      }\n    }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-prop01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-switch01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-switch01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nswitch\n(\ne\n)\n{\ncase\n1\n:\ncase\n2\n:\nbreak\ncase\n3\n:\n{\nbreak\n}\ndefault\n:\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-switch01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-switch01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  switch\n    (\n      e\n    )\n  {\n    case\n      1\n      :\n    case\n      2\n      :\n      break\n    case\n      3\n      :\n    {\n      break\n    }\n    default\n      :\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-switch01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-try01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-try01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\ntry\n{\na\n=\n1\n}\ncatch\n(\ne\n)\n{\na\n=\n2\n}\nfinally\n{\na\n=\n3\n}\n\ntry\n{\na\n=\n1\n}\ncatch\n{\na\n=\n2\n}\nfinally\n{\na\n=\n3\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-try01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-try01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  try\n  {\n    a\n      =\n      1\n  }\n  catch\n    (\n      e\n    )\n  {\n    a\n      =\n      2\n  }\n  finally\n  {\n    a\n      =\n      3\n  }\n\n  try\n  {\n    a\n      =\n      1\n  }\n  catch\n  {\n    a\n      =\n      2\n  }\n  finally\n  {\n    a\n      =\n      3\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-try01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-unary01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-unary01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nasync function\n*\nfn\n(\n...\na\n)\n{\nyield (\na)\nyield *\na\nawait\na\no\n=\n{\n...\na\n}\nif(b)\nthrow (\ne)\nreturn (\na)\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-unary01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-unary01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  async function\n    *\n    fn\n    (\n      ...\n        a\n    )\n  {\n    yield (\n      a)\n    yield *\n      a\n    await\n      a\n    o\n      =\n      {\n        ...\n          a\n      }\n    if(b)\n      throw (\n        e)\n    return (\n      a)\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-unary01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-yield-expression01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-yield-expression01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nfunction* f(){\nyield*\na\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-yield-expression01-inpiut.svelte.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/script-yield-expression01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  function* f(){\n    yield*\n      a\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/script-yield-expression01-inpiut.svelte.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 2 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet\nfoo(\n{\na\n}\n)\n}\n{/snippet}\n{@render\nfoo(\n{\na\n}\n)\n}\n<div>\n{#snippet example()}\n<div></div>\n{/snippet}\n\n{\n  #snippet example_2()\n}\n<div></div>\n{\n/snippet\n}\n</div>\n{\n#snippet example_3\n(\n\n)\n}\n<div></div>\n{\n/snippet\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet\n  foo(\n    {\n      a\n    }\n  )\n}\n{/snippet}\n{@render\n  foo(\n    {\n      a\n    }\n  )\n}\n<div>\n  {#snippet example()}\n    <div></div>\n  {/snippet}\n\n  {\n    #snippet example_2()\n  }\n    <div></div>\n  {\n    /snippet\n  }\n</div>\n{\n  #snippet example_3\n    (\n\n    )\n}\n  <div></div>\n{\n  /snippet\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/style-directive01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/style-directive01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let color = 'red'\n</script>\n\n<!-- prettier-ignore -->\n<div\nstyle:color\n>\n</div>\n<!-- prettier-ignore -->\n<div\nstyle:color\n=\n\"\nr{\ncolor\n}\n\"\n>\n</div>\n<!-- prettier-ignore -->\n<div\nstyle:color\n=\n{\ncolor\n}\n>\n</div>\n<!-- prettier-ignore -->\n<div\nstyle:color\n=\nred\n>\n</div>\n<!-- prettier-ignore -->\n<div\nstyle:color\n=\n\"\nred\n\"\n>\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/style-directive01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/style-directive01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let color = 'red'\n</script>\n\n<!-- prettier-ignore -->\n<div\n  style:color\n>\n</div>\n<!-- prettier-ignore -->\n<div\n  style:color\n    =\n    \"\n      r{\n        color\n      }\n    \"\n>\n</div>\n<!-- prettier-ignore -->\n<div\n  style:color\n    =\n    {\n      color\n    }\n>\n</div>\n<!-- prettier-ignore -->\n<div\n  style:color\n    =\n    red\n>\n</div>\n<!-- prettier-ignore -->\n<div\n  style:color\n    =\n    \"\n      red\n    \"\n>\n</div>\n\n<!--tests/fixtures/rules/indent/invalid/style-directive01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/switch-case/_config.json",
    "content": "{\n\t\"options\": [{ \"switchCase\": 0 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/switch-case/script-switch01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/switch-case/script-switch01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nswitch\n(\ne\n)\n{\ncase\n1\n:\ncase\n2\n:\nbreak\ncase\n3\n:\n{\nbreak\n}\ndefault\n:\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/switch-case/script-switch01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/switch-case/script-switch01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  switch\n    (\n      e\n    )\n  {\n  case\n    1\n    :\n  case\n    2\n    :\n    break\n  case\n    3\n    :\n  {\n    break\n  }\n  default\n    :\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/switch-case/script-switch01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/_config.json",
    "content": "{\n\t\"options\": [{ \"indent\": \"tab\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/test01-errors.yaml",
    "content": "- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 tabs but found 0 tabs.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 tabs but found 0 tabs.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 tabs but found 0 tabs.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 0 tabs.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 0 tabs.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 0 tabs.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 0 tabs.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 84\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 0 tabs.\n  line: 85\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nlet text = \"abc\"\nconst maxlength = 42\nconst attrs = { disabled: true }\nfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\ntype=\"text\"\nclass=\"\na\nb\n\"\nbind:value={text}\n{maxlength}\n{...attrs}\nreadonly />\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\non:click={click}\n{maxlength}\n{...attrs}>\nCLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\ndata-attr\n>\n<div\ndata-attr\n>\n<div\ndata-attr\n>\n<input\ntype\n=\n\"text\"\nclass\n=\"\na\nb\n\"\nbind:value\n=\n{\ntext\n}\n{\nmaxlength\n}\n{\n...attrs\n}\nreadonly\n/>\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\non:click={\nclick\n}\n{\nmaxlength\n}\n{\n...attrs\n}\n>\nCLICK\nME!\n</button\n>\n</div\n>\n</div\n>\n<div\ndata-attr\n>\n</div\n>\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/tab-indent/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n\tlet text = \"abc\"\n\tconst maxlength = 42\n\tconst attrs = { disabled: true }\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n\ttype=\"text\"\n\tclass=\"\n\t\ta\n\t\tb\n\t\"\n\tbind:value={text}\n\t{maxlength}\n\t{...attrs}\n\treadonly />\n<!-- prettier-ignore -->\n<button\n\ttype=\"button\"\n\ton:click={click}\n\t{maxlength}\n\t{...attrs}>\n\tCLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\n\tdata-attr\n>\n\t<div\n\t\tdata-attr\n\t>\n\t\t<div\n\t\t\tdata-attr\n\t\t>\n\t\t\t<input\n\t\t\t\ttype\n\t\t\t\t\t=\n\t\t\t\t\t\"text\"\n\t\t\t\tclass\n\t\t\t\t\t=\"\n\t\t\t\t\t\ta\n\t\t\t\t\t\tb\n\t\t\t\t\t\"\n\t\t\t\tbind:value\n\t\t\t\t\t=\n\t\t\t\t\t{\n\t\t\t\t\t\ttext\n\t\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tmaxlength\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\t...attrs\n\t\t\t\t}\n\t\t\t\treadonly\n\t\t\t/>\n\t\t\t<!-- prettier-ignore -->\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\ton:click={\n\t\t\t\t\tclick\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tmaxlength\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\t...attrs\n\t\t\t\t}\n\t\t\t>\n\t\t\t\tCLICK\n\t\t\t\tME!\n\t\t\t</button\n\t\t\t>\n\t\t</div\n\t\t>\n\t</div\n\t>\n\t<div\n\t\tdata-attr\n\t>\n\t</div\n\t>\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/tab-indent/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/test02-errors.yaml",
    "content": "- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 tabs but found 24 whitespaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 tabs but found 24 whitespaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 tabs but found 24 whitespaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 5 tabs but found 20 whitespaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 tabs but found 16 whitespaces.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 3 tabs but found 12 whitespaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 tabs but found 8 whitespaces.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 84\n  column: 1\n  suggestions: null\n- message: Expected indentation of 1 tab but found 4 whitespaces.\n  line: 85\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/test02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n    let text = \"abc\"\n    const maxlength = 42\n    const attrs = { disabled: true }\n    function click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n    type=\"text\"\n    class=\"\n        a\n        b\n    \"\n    bind:value={text}\n    {maxlength}\n    {...attrs}\n    readonly />\n<!-- prettier-ignore -->\n<button\n    type=\"button\"\n    on:click={click}\n    {maxlength}\n    {...attrs}>\n    CLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\n    data-attr\n>\n    <div\n        data-attr\n    >\n        <div\n            data-attr\n        >\n            <input\n                type\n                    =\n                    \"text\"\n                class\n                    =\"\n                        a\n                        b\n                    \"\n                bind:value\n                    =\n                    {\n                        text\n                    }\n                {\n                    maxlength\n                }\n                {\n                    ...attrs\n                }\n                readonly\n            />\n            <!-- prettier-ignore -->\n            <button\n                type=\"button\"\n                on:click={\n                    click\n                }\n                {\n                    maxlength\n                }\n                {\n                    ...attrs\n                }\n            >\n                CLICK\n                ME!\n            </button\n            >\n        </div\n        >\n    </div\n    >\n    <div\n        data-attr\n    >\n    </div\n    >\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/tab-indent/test02-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/tab-indent/test02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n\tlet text = \"abc\"\n\tconst maxlength = 42\n\tconst attrs = { disabled: true }\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n\ttype=\"text\"\n\tclass=\"\n\t\ta\n\t\tb\n\t\"\n\tbind:value={text}\n\t{maxlength}\n\t{...attrs}\n\treadonly />\n<!-- prettier-ignore -->\n<button\n\ttype=\"button\"\n\ton:click={click}\n\t{maxlength}\n\t{...attrs}>\n\tCLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\n\tdata-attr\n>\n\t<div\n\t\tdata-attr\n\t>\n\t\t<div\n\t\t\tdata-attr\n\t\t>\n\t\t\t<input\n\t\t\t\ttype\n\t\t\t\t\t=\n\t\t\t\t\t\"text\"\n\t\t\t\tclass\n\t\t\t\t\t=\"\n\t\t\t\t\t\ta\n\t\t\t\t\t\tb\n\t\t\t\t\t\"\n\t\t\t\tbind:value\n\t\t\t\t\t=\n\t\t\t\t\t{\n\t\t\t\t\t\ttext\n\t\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tmaxlength\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\t...attrs\n\t\t\t\t}\n\t\t\t\treadonly\n\t\t\t/>\n\t\t\t<!-- prettier-ignore -->\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\ton:click={\n\t\t\t\t\tclick\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tmaxlength\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\t...attrs\n\t\t\t\t}\n\t\t\t>\n\t\t\t\tCLICK\n\t\t\t\tME!\n\t\t\t</button\n\t\t\t>\n\t\t</div\n\t\t>\n\t</div\n\t>\n\t<div\n\t\tdata-attr\n\t>\n\t</div\n\t>\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/tab-indent/test02-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/test01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 84\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 85\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\nlet text = \"abc\"\nconst maxlength = 42\nconst attrs = { disabled: true }\nfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\ntype=\"text\"\nclass=\"\na\nb\n\"\nbind:value={text}\n{maxlength}\n{...attrs}\nreadonly />\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\non:click={click}\n{maxlength}\n{...attrs}>\nCLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\ndata-attr\n>\n<div\ndata-attr\n>\n<div\ndata-attr\n>\n<input\ntype\n=\n\"text\"\nclass\n=\"\na\nb\n\"\nbind:value\n=\n{\ntext\n}\n{\nmaxlength\n}\n{\n...attrs\n}\nreadonly\n/>\n<!-- prettier-ignore -->\n<button\ntype=\"button\"\non:click={\nclick\n}\n{\nmaxlength\n}\n{\n...attrs\n}\n>\nCLICK\nME!\n</button\n>\n</div\n>\n</div\n>\n<div\ndata-attr\n>\n</div\n>\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let text = \"abc\"\n  const maxlength = 42\n  const attrs = { disabled: true }\n  function click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"text\"\n  class=\"\n    a\n    b\n  \"\n  bind:value={text}\n  {maxlength}\n  {...attrs}\n  readonly />\n<!-- prettier-ignore -->\n<button\n  type=\"button\"\n  on:click={click}\n  {maxlength}\n  {...attrs}>\n  CLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\n  data-attr\n>\n  <div\n    data-attr\n  >\n    <div\n      data-attr\n    >\n      <input\n        type\n          =\n          \"text\"\n        class\n          =\"\n            a\n            b\n          \"\n        bind:value\n          =\n          {\n            text\n          }\n        {\n          maxlength\n        }\n        {\n          ...attrs\n        }\n        readonly\n      />\n      <!-- prettier-ignore -->\n      <button\n        type=\"button\"\n        on:click={\n          click\n        }\n        {\n          maxlength\n        }\n        {\n          ...attrs\n        }\n      >\n        CLICK\n        ME!\n      </button\n      >\n    </div\n    >\n  </div\n  >\n  <div\n    data-attr\n  >\n  </div\n  >\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nabstract\nclass\nC\n{\nabstract f\n:\nboolean\nabstract fn\n(\na\n)\n:\nboolean\n}\n\nclass Foo {\nconstructor\n(\nprotected a\n: \nstring\n,\nprotected readonly b\n: \nstring\n,\nprotected c\n:\nnumber\n=\n30\n,\nprotected readonly d\n:\nboolean \n= \nfalse\n) \n{\n}\n}\n\nclass Foo {\nprop\n:\nnumber;\nopt\n?\n:\nnumber;\nopt2\n?\n:\nnumber\n=\n42;\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-class01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  abstract\n  class\n    C\n  {\n    abstract f\n      :\n      boolean\n    abstract fn\n      (\n        a\n      )\n        :\n        boolean\n  }\n\n  class Foo {\n    constructor\n      (\n        protected a\n          : \n          string\n        ,\n        protected readonly b\n          : \n          string\n        ,\n        protected c\n          :\n          number\n          =\n          30\n        ,\n        protected readonly d\n          :\n          boolean \n          = \n          false\n      ) \n    {\n    }\n  }\n\n  class Foo {\n    prop\n      :\n      number;\n    opt\n      ?\n      :\n      number;\n    opt2\n      ?\n      :\n      number\n      =\n      42;\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-class01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass A {\na: number\n=\n1\n;\npublic b\n:\nCustomType<\nT\n>\n=\n's'\n;\nreadonly protected c\n:\n{\nkey: string;\n[\nname\nin\nCustomType\n]: undefined;\n[\nkey:\nstring\n]:\nstring\n;\n}\n=\ni\n;\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-class02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class A {\n    a: number\n      =\n      1\n    ;\n    public b\n      :\n      CustomType<\n        T\n      >\n      =\n      's'\n    ;\n    readonly protected c\n      :\n      {\n        key: string;\n        [\n          name\n            in\n            CustomType\n        ]: undefined;\n        [\n          key:\n            string\n        ]:\n          string\n        ;\n      }\n      =\n      i\n    ;\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-class02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport {D} from \"foo\";\n\n@D\nexport default class C extends E {\nprivate foo = \"str\";\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-class03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-class03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import {D} from \"foo\";\n\n  @D\n  export default class C extends E {\n    private foo = \"str\";\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-class03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-conditional-type01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-conditional-type01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype X = A extends B ?\nC :\nD extends E ?\nF :\nG extends H ?\nI :\nJ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-conditional-type01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-conditional-type01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type X = A extends B ?\n    C :\n      D extends E ?\n      F :\n      G extends H ?\n      I :\n      J;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-conditional-type01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-d-ts-eslint-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 84\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 85\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 86\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 90\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 91\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 92\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 93\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 97\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 98\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 99\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 100\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 101\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 103\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 105\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 107\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 109\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 111\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 115\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 116\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 117\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 118\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 119\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 120\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 121\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 122\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 10 spaces.\n  line: 123\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 124\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 125\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 126\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 127\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 10 spaces.\n  line: 128\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 129\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 130\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 133\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 135\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 137\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 202\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 205\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 206\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 214\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 216\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 218\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 219\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 220\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 221\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 222\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 228\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 232\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 233\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 234\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 235\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 236\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 237\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 238\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 239\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 240\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 241\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 242\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 243\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 244\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 245\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 246\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 247\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 248\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 249\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 250\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 251\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 252\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 253\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 254\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 255\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 256\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 257\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 258\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 259\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 260\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 264\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 265\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 266\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 267\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 268\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 269\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 270\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 271\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 272\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 273\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 274\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 275\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 276\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 277\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 278\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 279\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 280\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 281\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 282\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 283\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 284\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 285\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 286\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 287\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 288\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 289\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 290\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 291\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 292\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 296\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 297\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 298\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 299\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 300\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 301\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 302\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 303\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 304\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 305\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 306\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 307\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 308\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 309\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 310\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 311\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 312\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 313\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 314\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 315\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 316\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 317\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 318\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 319\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 320\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 321\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 322\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 323\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 324\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 328\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 329\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 330\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 331\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 332\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 333\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 334\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 335\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 336\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 337\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 338\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 339\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 340\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 341\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 342\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 343\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 344\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 345\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 346\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 347\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 348\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 349\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 350\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 351\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 352\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 353\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 354\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 355\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 356\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 360\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 361\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 362\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 363\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 364\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 365\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 366\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 367\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 368\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 369\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 370\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 371\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 372\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 373\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 374\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 375\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 376\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 377\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 378\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 379\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 380\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 381\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 382\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 383\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 384\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 385\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 386\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 387\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 388\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 389\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 390\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 391\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 392\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 396\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 397\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 398\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 399\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 400\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 401\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 402\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 403\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 404\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 405\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 406\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 407\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 408\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 409\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 410\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 411\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 412\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 413\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 414\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 415\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 416\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 417\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 418\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 419\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 420\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 421\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 422\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 423\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 424\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 425\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 16 spaces.\n  line: 426\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 427\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 428\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 430\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 432\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 434\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 436\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 437\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 442\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 443\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 444\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 445\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 446\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 447\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 448\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 449\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 450\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 451\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 452\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 453\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 454\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 455\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 456\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 457\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 458\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 459\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 460\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 461\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 462\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 463\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 464\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 465\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 466\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 467\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 468\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 469\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 470\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 471\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 472\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 473\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 474\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 475\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 476\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 477\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 478\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 479\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 480\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 481\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 482\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 483\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 484\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 485\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 486\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 487\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 488\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 489\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 490\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 491\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 492\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 493\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 494\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 495\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 496\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 497\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 498\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 499\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 500\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 501\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 502\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 503\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 504\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 505\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 506\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 507\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 508\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 509\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 513\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 518\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 520\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 522\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 524\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 526\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 528\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 529\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 530\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 531\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 532\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 533\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 534\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 538\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 539\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 540\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 541\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 542\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 543\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 544\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 545\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 549\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 550\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 551\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 552\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 556\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 557\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 558\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 559\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 560\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 561\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 562\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 563\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 564\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 565\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 566\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 567\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 568\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 569\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 570\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 571\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 572\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 576\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 577\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 578\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 579\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 580\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 581\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 583\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 585\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 587\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 589\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 591\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 593\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 595\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 597\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 601\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 603\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 610\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 616\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 617\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 620\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 622\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 624\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 626\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 628\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 630\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 632\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 634\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 638\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 639\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 641\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 643\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 645\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 667\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 669\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 678\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 682\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 686\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 687\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 688\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 689\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 690\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 691\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 692\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 693\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 694\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 695\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 696\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 697\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 701\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 702\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 707\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 708\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 712\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 713\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 714\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 715\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 716\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 717\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 718\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 719\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 720\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 721\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 725\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 726\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 727\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 728\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 729\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 730\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 731\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 735\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 736\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 737\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 741\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 742\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 743\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 744\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 745\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 746\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 747\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 748\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 749\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 750\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 751\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 752\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 753\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 754\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 758\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 762\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 763\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 764\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 768\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 769\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 10 spaces.\n  line: 770\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 771\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 14 spaces.\n  line: 772\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 10 spaces.\n  line: 773\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 776\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 777\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 778\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 779\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 783\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 784\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 789\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 790\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 791\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 793\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 795\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 799\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 817\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 819\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 821\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 822\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 823\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 824\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 825\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 826\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 827\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 829\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 830\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 831\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 832\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 833\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 834\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 835\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 836\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 837\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 838\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 840\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 841\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 842\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 844\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 845\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 846\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 847\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 851\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 852\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 853\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 854\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 855\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 856\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 857\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 858\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 859\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 863\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 864\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 865\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 869\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 870\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 874\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 879\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 881\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 886\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 912\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 914\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 915\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 917\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 918\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 919\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 920\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 921\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 922\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 923\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 924\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 925\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 926\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 927\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 928\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 929\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 930\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 931\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 932\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 933\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 934\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 935\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 936\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 937\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 938\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 939\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 940\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 941\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 942\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 950\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 951\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 952\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 953\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 954\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 955\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 961\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 963\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 967\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 971\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 972\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 973\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 974\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 12 spaces.\n  line: 975\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 976\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 978\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 980\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 982\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 983\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 984\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 985\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 986\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 987\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 988\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 992\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 993\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 994\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 995\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 999\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1000\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1004\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1005\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1006\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1007\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1008\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1009\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1010\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1011\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 8 spaces.\n  line: 1012\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 1014\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-d-ts-eslint-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n// Type definitions for eslint 7.2\n// Project: https://eslint.org\n// Definitions by: Pierre-Marie Dartus <https://github.com/pmdartus>\n//                 Jed Fox <https://github.com/j-f1>\n//                 Saad Quadri <https://github.com/saadq>\n//                 Jason Kwok <https://github.com/JasonHK>\n//                 Brad Zacher <https://github.com/bradzacher>\n//                 JounQin <https://github.com/JounQin>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/// <reference path=\"helpers.d.ts\" />\n/// <reference path=\"lib/rules/index.d.ts\" />\n\nimport { JSONSchema4 } from \"json-schema\";\nimport * as ESTree from \"estree\";\n\nexport namespace AST {\n    type TokenType =\n        | \"Boolean\"\n        | \"Null\"\n        | \"Identifier\"\n        | \"Keyword\"\n        | \"Punctuator\"\n        | \"JSXIdentifier\"\n        | \"JSXText\"\n        | \"Numeric\"\n        | \"String\"\n        | \"RegularExpression\";\n\n    interface Token {\n        type: TokenType;\n        value: string;\n        range: Range;\n        loc: SourceLocation;\n    }\n\n    interface SourceLocation {\n        start: ESTree.Position;\n        end: ESTree.Position;\n    }\n\n    type Range = [number, number];\n\n    interface Program extends ESTree.Program {\n        comments: ESTree.Comment[];\n        tokens: Token[];\n        loc: SourceLocation;\n        range: Range;\n    }\n}\n\nexport namespace Scope {\n    interface ScopeManager {\n        scopes: Scope[];\n        globalScope: Scope | null;\n\n        acquire(node: ESTree.Node, inner?: boolean): Scope | null;\n\n        getDeclaredVariables(node: ESTree.Node): Variable[];\n    }\n\n    interface Scope {\n        type:\n            | \"block\"\n            | \"catch\"\n            | \"class\"\n            | \"for\"\n            | \"function\"\n            | \"function-expression-name\"\n            | \"global\"\n            | \"module\"\n            | \"switch\"\n            | \"with\"\n            | \"TDZ\";\n        isStrict: boolean;\n        upper: Scope | null;\n        childScopes: Scope[];\n        variableScope: Scope;\n        block: ESTree.Node;\n        variables: Variable[];\n        set: Map<string, Variable>;\n        references: Reference[];\n        through: Reference[];\n        functionExpressionScope: boolean;\n    }\n\n    interface Variable {\n        name: string;\n        identifiers: ESTree.Identifier[];\n        references: Reference[];\n        defs: Definition[];\n    }\n\n    interface Reference {\n        identifier: ESTree.Identifier;\n        from: Scope;\n        resolved: Variable | null;\n        writeExpr: ESTree.Node | null;\n        init: boolean;\n\n        isWrite(): boolean;\n\n        isRead(): boolean;\n\n        isWriteOnly(): boolean;\n\n        isReadOnly(): boolean;\n\n        isReadWrite(): boolean;\n    }\n\n    type DefinitionType =\n        | { type: \"CatchClause\"; node: ESTree.CatchClause; parent: null }\n        | { type: \"ClassName\"; node: ESTree.ClassDeclaration | ESTree.ClassExpression; parent: null }\n        | { type: \"FunctionName\"; node: ESTree.FunctionDeclaration | ESTree.FunctionExpression; parent: null }\n        | { type: \"ImplicitGlobalVariable\"; node: ESTree.Program; parent: null }\n        | {\n              type: \"ImportBinding\";\n              node: ESTree.ImportSpecifier | ESTree.ImportDefaultSpecifier | ESTree.ImportNamespaceSpecifier;\n              parent: ESTree.ImportDeclaration;\n          }\n        | {\n              type: \"Parameter\";\n              node: ESTree.FunctionDeclaration | ESTree.FunctionExpression | ESTree.ArrowFunctionExpression;\n              parent: null;\n          }\n        | { type: \"TDZ\"; node: any; parent: null }\n        | { type: \"Variable\"; node: ESTree.VariableDeclarator; parent: ESTree.VariableDeclaration };\n\n    type Definition = DefinitionType & { name: ESTree.Identifier };\n}\n\n//#region SourceCode\n\nexport class SourceCode {\n    text: string;\n    ast: AST.Program;\n    lines: string[];\n    hasBOM: boolean;\n    parserServices: SourceCode.ParserServices;\n    scopeManager: Scope.ScopeManager;\n    visitorKeys: SourceCode.VisitorKeys;\n\n    constructor(text: string, ast: AST.Program);\n    constructor(config: SourceCode.Config);\n\n    static splitLines(text: string): string[];\n\n    getText(node?: ESTree.Node, beforeCount?: number, afterCount?: number): string;\n\n    getLines(): string[];\n\n    getAllComments(): ESTree.Comment[];\n\n    getComments(node: ESTree.Node): { leading: ESTree.Comment[]; trailing: ESTree.Comment[] };\n\n    getJSDocComment(node: ESTree.Node): ESTree.Comment | null;\n\n    getNodeByRangeIndex(index: number): ESTree.Node | null;\n\n    isSpaceBetweenTokens(first: AST.Token, second: AST.Token): boolean;\n\n    getLocFromIndex(index: number): ESTree.Position;\n\n    getIndexFromLoc(location: ESTree.Position): number;\n\n    // Inherited methods from TokenStore\n    // ---------------------------------\n\n    getTokenByRangeStart(offset: number, options?: { includeComments: false }): AST.Token | null;\n    getTokenByRangeStart(offset: number, options: { includeComments: boolean }): AST.Token | ESTree.Comment | null;\n\n    getFirstToken: SourceCode.UnaryNodeCursorWithSkipOptions;\n\n    getFirstTokens: SourceCode.UnaryNodeCursorWithCountOptions;\n\n    getLastToken: SourceCode.UnaryNodeCursorWithSkipOptions;\n\n    getLastTokens: SourceCode.UnaryNodeCursorWithCountOptions;\n\n    getTokenBefore: SourceCode.UnaryCursorWithSkipOptions;\n\n    getTokensBefore: SourceCode.UnaryCursorWithCountOptions;\n\n    getTokenAfter: SourceCode.UnaryCursorWithSkipOptions;\n\n    getTokensAfter: SourceCode.UnaryCursorWithCountOptions;\n\n    getFirstTokenBetween: SourceCode.BinaryCursorWithSkipOptions;\n\n    getFirstTokensBetween: SourceCode.BinaryCursorWithCountOptions;\n\n    getLastTokenBetween: SourceCode.BinaryCursorWithSkipOptions;\n\n    getLastTokensBetween: SourceCode.BinaryCursorWithCountOptions;\n\n    getTokensBetween: SourceCode.BinaryCursorWithCountOptions;\n\n    getTokens: ((node: ESTree.Node, beforeCount?: number, afterCount?: number) => AST.Token[]) &\n        SourceCode.UnaryNodeCursorWithCountOptions;\n\n    commentsExistBetween(\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n    ): boolean;\n\n    getCommentsBefore(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];\n\n    getCommentsAfter(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];\n\n    getCommentsInside(node: ESTree.Node): ESTree.Comment[];\n}\n\nexport namespace SourceCode {\n    interface Config {\n        text: string;\n        ast: AST.Program;\n        parserServices?: ParserServices;\n        scopeManager?: Scope.ScopeManager;\n        visitorKeys?: VisitorKeys;\n    }\n\n    type ParserServices = any;\n\n    interface VisitorKeys {\n        [nodeType: string]: string[];\n    }\n\n    interface UnaryNodeCursorWithSkipOptions {\n        <T extends AST.Token>(\n            node: ESTree.Node,\n            options:\n                | ((token: AST.Token) => token is T)\n                | { filter: (token: AST.Token) => token is T; includeComments?: false; skip?: number },\n        ): T | null;\n        <T extends AST.Token | ESTree.Comment>(\n            node: ESTree.Node,\n            options: {\n                filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n                includeComments: boolean;\n                skip?: number;\n            },\n        ): T | null;\n        (\n            node: ESTree.Node,\n            options?:\n                | { filter?: (token: AST.Token) => boolean; includeComments?: false; skip?: number }\n                | ((token: AST.Token) => boolean)\n                | number,\n        ): AST.Token | null;\n        (\n            node: ESTree.Node,\n            options: {\n                filter?: (token: AST.Token | ESTree.Comment) => boolean;\n                includeComments: boolean;\n                skip?: number;\n            },\n        ): AST.Token | ESTree.Comment | null;\n    }\n\n    interface UnaryNodeCursorWithCountOptions {\n        <T extends AST.Token>(\n            node: ESTree.Node,\n            options:\n                | ((token: AST.Token) => token is T)\n                | { filter: (token: AST.Token) => token is T; includeComments?: false; count?: number },\n        ): T[];\n        <T extends AST.Token | ESTree.Comment>(\n            node: ESTree.Node,\n            options: {\n                filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n                includeComments: boolean;\n                count?: number;\n            },\n        ): T[];\n        (\n            node: ESTree.Node,\n            options?:\n                | { filter?: (token: AST.Token) => boolean; includeComments?: false; count?: number }\n                | ((token: AST.Token) => boolean)\n                | number,\n        ): AST.Token[];\n        (\n            node: ESTree.Node,\n            options: {\n                filter?: (token: AST.Token | ESTree.Comment) => boolean;\n                includeComments: boolean;\n                count?: number;\n            },\n        ): Array<AST.Token | ESTree.Comment>;\n    }\n\n    interface UnaryCursorWithSkipOptions {\n        <T extends AST.Token>(\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options:\n                | ((token: AST.Token) => token is T)\n                | { filter: (token: AST.Token) => token is T; includeComments?: false; skip?: number },\n        ): T | null;\n        <T extends AST.Token | ESTree.Comment>(\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n                includeComments: boolean;\n                skip?: number;\n            },\n        ): T | null;\n        (\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options?:\n                | { filter?: (token: AST.Token) => boolean; includeComments?: false; skip?: number }\n                | ((token: AST.Token) => boolean)\n                | number,\n        ): AST.Token | null;\n        (\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter?: (token: AST.Token | ESTree.Comment) => boolean;\n                includeComments: boolean;\n                skip?: number;\n            },\n        ): AST.Token | ESTree.Comment | null;\n    }\n\n    interface UnaryCursorWithCountOptions {\n        <T extends AST.Token>(\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options:\n                | ((token: AST.Token) => token is T)\n                | { filter: (token: AST.Token) => token is T; includeComments?: false; count?: number },\n        ): T[];\n        <T extends AST.Token | ESTree.Comment>(\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n                includeComments: boolean;\n                count?: number;\n            },\n        ): T[];\n        (\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options?:\n                | { filter?: (token: AST.Token) => boolean; includeComments?: false; count?: number }\n                | ((token: AST.Token) => boolean)\n                | number,\n        ): AST.Token[];\n        (\n            node: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter?: (token: AST.Token | ESTree.Comment) => boolean;\n                includeComments: boolean;\n                count?: number;\n            },\n        ): Array<AST.Token | ESTree.Comment>;\n    }\n\n    interface BinaryCursorWithSkipOptions {\n        <T extends AST.Token>(\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options:\n                | ((token: AST.Token) => token is T)\n                | { filter: (token: AST.Token) => token is T; includeComments?: false; skip?: number },\n        ): T | null;\n        <T extends AST.Token | ESTree.Comment>(\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n                includeComments: boolean;\n                skip?: number;\n            },\n        ): T | null;\n        (\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options?:\n                | { filter?: (token: AST.Token) => boolean; includeComments?: false; skip?: number }\n                | ((token: AST.Token) => boolean)\n                | number,\n        ): AST.Token | null;\n        (\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter?: (token: AST.Token | ESTree.Comment) => boolean;\n                includeComments: boolean;\n                skip?: number;\n            },\n        ): AST.Token | ESTree.Comment | null;\n    }\n\n    interface BinaryCursorWithCountOptions {\n        <T extends AST.Token>(\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options:\n                | ((token: AST.Token) => token is T)\n                | { filter: (token: AST.Token) => token is T; includeComments?: false; count?: number },\n        ): T[];\n        <T extends AST.Token | ESTree.Comment>(\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n                includeComments: boolean;\n                count?: number;\n            },\n        ): T[];\n        (\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options?:\n                | { filter?: (token: AST.Token) => boolean; includeComments?: false; count?: number }\n                | ((token: AST.Token) => boolean)\n                | number,\n        ): AST.Token[];\n        (\n            left: ESTree.Node | AST.Token | ESTree.Comment,\n            right: ESTree.Node | AST.Token | ESTree.Comment,\n            options: {\n                filter?: (token: AST.Token | ESTree.Comment) => boolean;\n                includeComments: boolean;\n                count?: number;\n            },\n        ): Array<AST.Token | ESTree.Comment>;\n    }\n}\n\n//#endregion\n\nexport namespace Rule {\n    interface RuleModule {\n        create(context: RuleContext): RuleListener;\n        meta?: RuleMetaData;\n    }\n\n    type NodeTypes = ESTree.Node[\"type\"];\n    interface NodeListener {\n        ArrayExpression?: (node: ESTree.ArrayExpression & NodeParentExtension) => void;\n        ArrayPattern?: (node: ESTree.ArrayPattern & NodeParentExtension) => void;\n        ArrowFunctionExpression?: (node: ESTree.ArrowFunctionExpression & NodeParentExtension) => void;\n        AssignmentExpression?: (node: ESTree.AssignmentExpression & NodeParentExtension) => void;\n        AssignmentPattern?: (node: ESTree.AssignmentPattern & NodeParentExtension) => void;\n        AwaitExpression?: (node: ESTree.AwaitExpression & NodeParentExtension) => void;\n        BinaryExpression?: (node: ESTree.BinaryExpression & NodeParentExtension) => void;\n        BlockStatement?: (node: ESTree.BlockStatement & NodeParentExtension) => void;\n        BreakStatement?: (node: ESTree.BreakStatement & NodeParentExtension) => void;\n        CallExpression?: (node: ESTree.CallExpression & NodeParentExtension) => void;\n        CatchClause?: (node: ESTree.CatchClause & NodeParentExtension) => void;\n        ChainExpression?: (node: ESTree.ChainExpression & NodeParentExtension) => void;\n        ClassBody?: (node: ESTree.ClassBody & NodeParentExtension) => void;\n        ClassDeclaration?: (node: ESTree.ClassDeclaration & NodeParentExtension) => void;\n        ClassExpression?: (node: ESTree.ClassExpression & NodeParentExtension) => void;\n        ConditionalExpression?: (node: ESTree.ConditionalExpression & NodeParentExtension) => void;\n        ContinueStatement?: (node: ESTree.ContinueStatement & NodeParentExtension) => void;\n        DebuggerStatement?: (node: ESTree.DebuggerStatement & NodeParentExtension) => void;\n        DoWhileStatement?: (node: ESTree.DoWhileStatement & NodeParentExtension) => void;\n        EmptyStatement?: (node: ESTree.EmptyStatement & NodeParentExtension) => void;\n        ExportAllDeclaration?: (node: ESTree.ExportAllDeclaration & NodeParentExtension) => void;\n        ExportDefaultDeclaration?: (node: ESTree.ExportDefaultDeclaration & NodeParentExtension) => void;\n        ExportNamedDeclaration?: (node: ESTree.ExportNamedDeclaration & NodeParentExtension) => void;\n        ExportSpecifier?: (node: ESTree.ExportSpecifier & NodeParentExtension) => void;\n        ExpressionStatement?: (node: ESTree.ExpressionStatement & NodeParentExtension) => void;\n        ForInStatement?: (node: ESTree.ForInStatement & NodeParentExtension) => void;\n        ForOfStatement?: (node: ESTree.ForOfStatement & NodeParentExtension) => void;\n        ForStatement?: (node: ESTree.ForStatement & NodeParentExtension) => void;\n        FunctionDeclaration?: (node: ESTree.FunctionDeclaration & NodeParentExtension) => void;\n        FunctionExpression?: (node: ESTree.FunctionExpression & NodeParentExtension) => void;\n        Identifier?: (node: ESTree.Identifier & NodeParentExtension) => void;\n        IfStatement?: (node: ESTree.IfStatement & NodeParentExtension) => void;\n        ImportDeclaration?: (node: ESTree.ImportDeclaration & NodeParentExtension) => void;\n        ImportDefaultSpecifier?: (node: ESTree.ImportDefaultSpecifier & NodeParentExtension) => void;\n        ImportExpression?: (node: ESTree.ImportExpression & NodeParentExtension) => void;\n        ImportNamespaceSpecifier?: (node: ESTree.ImportNamespaceSpecifier & NodeParentExtension) => void;\n        ImportSpecifier?: (node: ESTree.ImportSpecifier & NodeParentExtension) => void;\n        LabeledStatement?: (node: ESTree.LabeledStatement & NodeParentExtension) => void;\n        Literal?: (node: ESTree.Literal & NodeParentExtension) => void;\n        LogicalExpression?: (node: ESTree.LogicalExpression & NodeParentExtension) => void;\n        MemberExpression?: (node: ESTree.MemberExpression & NodeParentExtension) => void;\n        MetaProperty?: (node: ESTree.MetaProperty & NodeParentExtension) => void;\n        MethodDefinition?: (node: ESTree.MethodDefinition & NodeParentExtension) => void;\n        NewExpression?: (node: ESTree.NewExpression & NodeParentExtension) => void;\n        ObjectExpression?: (node: ESTree.ObjectExpression & NodeParentExtension) => void;\n        ObjectPattern?: (node: ESTree.ObjectPattern & NodeParentExtension) => void;\n        Program?: (node: ESTree.Program) => void;\n        Property?: (node: ESTree.Property & NodeParentExtension) => void;\n        RestElement?: (node: ESTree.RestElement & NodeParentExtension) => void;\n        ReturnStatement?: (node: ESTree.ReturnStatement & NodeParentExtension) => void;\n        SequenceExpression?: (node: ESTree.SequenceExpression & NodeParentExtension) => void;\n        SpreadElement?: (node: ESTree.SpreadElement & NodeParentExtension) => void;\n        Super?: (node: ESTree.Super & NodeParentExtension) => void;\n        SwitchCase?: (node: ESTree.SwitchCase & NodeParentExtension) => void;\n        SwitchStatement?: (node: ESTree.SwitchStatement & NodeParentExtension) => void;\n        TaggedTemplateExpression?: (node: ESTree.TaggedTemplateExpression & NodeParentExtension) => void;\n        TemplateElement?: (node: ESTree.TemplateElement & NodeParentExtension) => void;\n        TemplateLiteral?: (node: ESTree.TemplateLiteral & NodeParentExtension) => void;\n        ThisExpression?: (node: ESTree.ThisExpression & NodeParentExtension) => void;\n        ThrowStatement?: (node: ESTree.ThrowStatement & NodeParentExtension) => void;\n        TryStatement?: (node: ESTree.TryStatement & NodeParentExtension) => void;\n        UnaryExpression?: (node: ESTree.UnaryExpression & NodeParentExtension) => void;\n        UpdateExpression?: (node: ESTree.UpdateExpression & NodeParentExtension) => void;\n        VariableDeclaration?: (node: ESTree.VariableDeclaration & NodeParentExtension) => void;\n        VariableDeclarator?: (node: ESTree.VariableDeclarator & NodeParentExtension) => void;\n        WhileStatement?: (node: ESTree.WhileStatement & NodeParentExtension) => void;\n        WithStatement?: (node: ESTree.WithStatement & NodeParentExtension) => void;\n        YieldExpression?: (node: ESTree.YieldExpression & NodeParentExtension) => void;\n    }\n\n    interface NodeParentExtension {\n        parent: Node;\n    }\n    type Node = ESTree.Node & NodeParentExtension;\n\n    interface RuleListener extends NodeListener {\n        onCodePathStart?(codePath: CodePath, node: Node): void;\n\n        onCodePathEnd?(codePath: CodePath, node: Node): void;\n\n        onCodePathSegmentStart?(segment: CodePathSegment, node: Node): void;\n\n        onCodePathSegmentEnd?(segment: CodePathSegment, node: Node): void;\n\n        onCodePathSegmentLoop?(fromSegment: CodePathSegment, toSegment: CodePathSegment, node: Node): void;\n\n        [key: string]:\n            | ((codePath: CodePath, node: Node) => void)\n            | ((segment: CodePathSegment, node: Node) => void)\n            | ((fromSegment: CodePathSegment, toSegment: CodePathSegment, node: Node) => void)\n            | ((node: Node) => void)\n            | NodeListener[keyof NodeListener]\n            | undefined;\n    }\n\n    interface CodePath {\n        id: string;\n        initialSegment: CodePathSegment;\n        finalSegments: CodePathSegment[];\n        returnedSegments: CodePathSegment[];\n        thrownSegments: CodePathSegment[];\n        currentSegments: CodePathSegment[];\n        upper: CodePath | null;\n        childCodePaths: CodePath[];\n    }\n\n    interface CodePathSegment {\n        id: string;\n        nextSegments: CodePathSegment[];\n        prevSegments: CodePathSegment[];\n        reachable: boolean;\n    }\n\n    interface RuleMetaData {\n        docs?: {\n            /** provides the short description of the rule in the [rules index](https://eslint.org/docs/rules/) */\n            description?: string;\n            /** specifies the heading under which the rule is listed in the [rules index](https://eslint.org/docs/rules/) */\n            category?: string;\n            /** is whether the `\"extends\": \"eslint:recommended\"` property in a [configuration file](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) enables the rule */\n            recommended?: boolean;\n            /** specifies the URL at which the full documentation can be accessed */\n            url?: string;\n            /** specifies whether rules can return suggestions (defaults to false if omitted) */\n            suggestion?: boolean;\n        };\n        messages?: { [messageId: string]: string };\n        fixable?: \"code\" | \"whitespace\";\n        schema?: JSONSchema4 | JSONSchema4[];\n        deprecated?: boolean;\n        type?: \"problem\" | \"suggestion\" | \"layout\";\n    }\n\n    interface RuleContext {\n        id: string;\n        options: any[];\n        settings: { [name: string]: any };\n        parserPath: string;\n        parserOptions: Linter.ParserOptions;\n        parserServices: SourceCode.ParserServices;\n\n        getAncestors(): ESTree.Node[];\n\n        getDeclaredVariables(node: ESTree.Node): Scope.Variable[];\n\n        getFilename(): string;\n\n        getCwd(): string;\n\n        getScope(): Scope.Scope;\n\n        getSourceCode(): SourceCode;\n\n        markVariableAsUsed(name: string): boolean;\n\n        report(descriptor: ReportDescriptor): void;\n    }\n\n    interface ReportDescriptorOptionsBase {\n        data?: { [key: string]: string };\n\n        fix?: null | ((fixer: RuleFixer) => null | Fix | IterableIterator<Fix> | Fix[]);\n    }\n\n    type SuggestionDescriptorMessage = { desc: string } | { messageId: string };\n    type SuggestionReportDescriptor = SuggestionDescriptorMessage & ReportDescriptorOptionsBase;\n\n    interface ReportDescriptorOptions extends ReportDescriptorOptionsBase {\n        suggest?: SuggestionReportDescriptor[] | null;\n    }\n\n    type ReportDescriptor = ReportDescriptorMessage & ReportDescriptorLocation & ReportDescriptorOptions;\n    type ReportDescriptorMessage = { message: string } | { messageId: string };\n    type ReportDescriptorLocation =\n        | { node: ESTree.Node }\n        | { loc: AST.SourceLocation | { line: number; column: number } };\n\n    interface RuleFixer {\n        insertTextAfter(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;\n\n        insertTextAfterRange(range: AST.Range, text: string): Fix;\n\n        insertTextBefore(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;\n\n        insertTextBeforeRange(range: AST.Range, text: string): Fix;\n\n        remove(nodeOrToken: ESTree.Node | AST.Token): Fix;\n\n        removeRange(range: AST.Range): Fix;\n\n        replaceText(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;\n\n        replaceTextRange(range: AST.Range, text: string): Fix;\n    }\n\n    interface Fix {\n        range: AST.Range;\n        text: string;\n    }\n}\n\n//#region Linter\n\nexport class Linter {\n    static version: string;\n\n    version: string;\n\n    constructor(options?: { cwd?: string });\n\n    verify(code: SourceCode | string, config: Linter.Config, filename?: string): Linter.LintMessage[];\n    verify(code: SourceCode | string, config: Linter.Config, options: Linter.LintOptions): Linter.LintMessage[];\n\n    verifyAndFix(code: string, config: Linter.Config, filename?: string): Linter.FixReport;\n    verifyAndFix(code: string, config: Linter.Config, options: Linter.FixOptions): Linter.FixReport;\n\n    getSourceCode(): SourceCode;\n\n    defineRule(name: string, rule: Rule.RuleModule): void;\n\n    defineRules(rules: { [name: string]: Rule.RuleModule }): void;\n\n    getRules(): Map<string, Rule.RuleModule>;\n\n    defineParser(name: string, parser: Linter.ParserModule): void;\n}\n\nexport namespace Linter {\n    type Severity = 0 | 1 | 2;\n\n    type RuleLevel = Severity | \"off\" | \"warn\" | \"error\";\n    type RuleLevelAndOptions<Options extends any[] = any[]> = Prepend<Partial<Options>, RuleLevel>;\n\n    type RuleEntry<Options extends any[] = any[]> = RuleLevel | RuleLevelAndOptions<Options>;\n\n    interface RulesRecord {\n        [rule: string]: RuleEntry;\n    }\n\n    interface HasRules<Rules extends RulesRecord = RulesRecord> {\n        rules?: Partial<Rules>;\n    }\n\n    interface BaseConfig<Rules extends RulesRecord = RulesRecord> extends HasRules<Rules> {\n        $schema?: string;\n        env?: { [name: string]: boolean };\n        extends?: string | string[];\n        globals?: { [name: string]: boolean | \"readonly\" | \"readable\" | \"writable\" | \"writeable\" };\n        noInlineConfig?: boolean;\n        overrides?: ConfigOverride[];\n        parser?: string;\n        parserOptions?: ParserOptions;\n        plugins?: string[];\n        processor?: string;\n        reportUnusedDisableDirectives?: boolean;\n        settings?: { [name: string]: any };\n    }\n\n    interface ConfigOverride<Rules extends RulesRecord = RulesRecord> extends BaseConfig<Rules> {\n        excludedFiles?: string | string[];\n        files: string | string[];\n    }\n\n    // https://github.com/eslint/eslint/blob/v6.8.0/conf/config-schema.js\n    interface Config<Rules extends RulesRecord = RulesRecord> extends BaseConfig<Rules> {\n        ignorePatterns?: string | string[];\n        root?: boolean;\n    }\n\n    interface ParserOptions {\n        ecmaVersion?: 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021;\n        sourceType?: \"script\" | \"module\";\n        ecmaFeatures?: {\n            globalReturn?: boolean;\n            impliedStrict?: boolean;\n            jsx?: boolean;\n            experimentalObjectRestSpread?: boolean;\n            [key: string]: any;\n        };\n        [key: string]: any;\n    }\n\n    interface LintOptions {\n        filename?: string;\n        preprocess?: (code: string) => string[];\n        postprocess?: (problemLists: LintMessage[][]) => LintMessage[];\n        filterCodeBlock?: boolean;\n        disableFixes?: boolean;\n        allowInlineConfig?: boolean;\n        reportUnusedDisableDirectives?: boolean;\n    }\n\n    interface LintSuggestion {\n        desc: string;\n        fix: Rule.Fix;\n        messageId?: string;\n    }\n\n    interface LintMessage {\n        column: number;\n        line: number;\n        endColumn?: number;\n        endLine?: number;\n        ruleId: string | null;\n        message: string;\n        messageId?: string;\n        nodeType?: string;\n        fatal?: true;\n        severity: Severity;\n        fix?: Rule.Fix;\n        /** @deprecated Use `linter.getSourceCode()` */\n        source?: string | null;\n        suggestions?: LintSuggestion[];\n    }\n\n    interface FixOptions extends LintOptions {\n        fix?: boolean;\n    }\n\n    interface FixReport {\n        fixed: boolean;\n        output: string;\n        messages: LintMessage[];\n    }\n\n    type ParserModule =\n        | {\n              parse(text: string, options?: any): AST.Program;\n          }\n        | {\n              parseForESLint(text: string, options?: any): ESLintParseResult;\n          };\n\n    interface ESLintParseResult {\n        ast: AST.Program;\n        parserServices?: SourceCode.ParserServices;\n        scopeManager?: Scope.ScopeManager;\n        visitorKeys?: SourceCode.VisitorKeys;\n    }\n\n    interface ProcessorFile {\n        text: string;\n        filename: string;\n    }\n\n    // https://eslint.org/docs/developer-guide/working-with-plugins#processors-in-plugins\n    interface Processor<T extends string | ProcessorFile = string | ProcessorFile> {\n        supportsAutofix?: boolean;\n        preprocess?(text: string, filename: string): T[];\n        postprocess?(messages: LintMessage[][], filename: string): LintMessage[];\n    }\n}\n\n//#endregion\n\n//#region ESLint\n\nexport class ESLint {\n    static version: string;\n\n    static outputFixes(results: ESLint.LintResult[]): Promise<void>;\n\n    static getErrorResults(results: ESLint.LintResult[]): ESLint.LintResult[];\n\n    constructor(options?: ESLint.Options);\n\n    lintFiles(patterns: string | string[]): Promise<ESLint.LintResult[]>;\n\n    lintText(code: string, options?: { filePath?: string; warnIgnored?: boolean }): Promise<ESLint.LintResult[]>;\n\n    calculateConfigForFile(filePath: string): Promise<any>;\n\n    isPathIgnored(filePath: string): Promise<boolean>;\n\n    loadFormatter(nameOrPath?: string): Promise<ESLint.Formatter>;\n}\n\nexport namespace ESLint {\n    interface Options {\n        // File enumeration\n        cwd?: string;\n        errorOnUnmatchedPattern?: boolean;\n        extensions?: string[];\n        globInputPaths?: boolean;\n        ignore?: boolean;\n        ignorePath?: string;\n\n        // Linting\n        allowInlineConfig?: boolean;\n        baseConfig?: Linter.Config;\n        overrideConfig?: Linter.Config;\n        overrideConfigFile?: string;\n        plugins?: Record<string, any>;\n        reportUnusedDisableDirectives?: Linter.RuleLevel;\n        resolvePluginsRelativeTo?: string;\n        rulePaths?: string[];\n        useEslintrc?: boolean;\n\n        // Autofix\n        fix?: boolean | ((message: Linter.LintMessage) => boolean);\n        fixTypes?: Array<Rule.RuleMetaData[\"type\"]>;\n\n        // Cache-related\n        cache?: boolean;\n        cacheLocation?: string;\n        cacheStrategy?: \"content\" | \"metadata\";\n    }\n\n    interface LintResult {\n        filePath: string;\n        messages: Linter.LintMessage[];\n        errorCount: number;\n        warningCount: number;\n        fixableErrorCount: number;\n        fixableWarningCount: number;\n        output?: string;\n        source?: string;\n        usedDeprecatedRules: DeprecatedRuleUse[];\n    }\n\n    interface LintResultData {\n        rulesMeta: {\n            [ruleId: string]: Rule.RuleMetaData;\n        };\n    }\n\n    interface DeprecatedRuleUse {\n        ruleId: string;\n        replacedBy: string[];\n    }\n\n    interface Formatter {\n        format(results: LintResult[], data?: LintResultData): string;\n    }\n\n    // Docs reference the type by this name\n    type EditInfo = Rule.Fix;\n}\n\n//#endregion\n\n//#region CLIEngine\n\n/** @deprecated Deprecated in favor of `ESLint` */\nexport class CLIEngine {\n    static version: string;\n\n    constructor(options: CLIEngine.Options);\n\n    executeOnFiles(patterns: string[]): CLIEngine.LintReport;\n\n    resolveFileGlobPatterns(patterns: string[]): string[];\n\n    getConfigForFile(filePath: string): Linter.Config;\n\n    executeOnText(text: string, filename?: string): CLIEngine.LintReport;\n\n    addPlugin(name: string, pluginObject: any): void;\n\n    isPathIgnored(filePath: string): boolean;\n\n    getFormatter(format?: string): CLIEngine.Formatter;\n\n    getRules(): Map<string, Rule.RuleModule>;\n\n    static getErrorResults(results: CLIEngine.LintResult[]): CLIEngine.LintResult[];\n\n    static getFormatter(format?: string): CLIEngine.Formatter;\n\n    static outputFixes(report: CLIEngine.LintReport): void;\n}\n\n/** @deprecated Deprecated in favor of `ESLint` */\nexport namespace CLIEngine {\n    class Options {\n        allowInlineConfig?: boolean;\n        baseConfig?: false | { [name: string]: any };\n        cache?: boolean;\n        cacheFile?: string;\n        cacheLocation?: string;\n        cacheStrategy?: \"content\" | \"metadata\";\n        configFile?: string;\n        cwd?: string;\n        envs?: string[];\n        errorOnUnmatchedPattern?: boolean;\n        extensions?: string[];\n        fix?: boolean;\n        globals?: string[];\n        ignore?: boolean;\n        ignorePath?: string;\n        ignorePattern?: string | string[];\n        useEslintrc?: boolean;\n        parser?: string;\n        parserOptions?: Linter.ParserOptions;\n        plugins?: string[];\n        resolvePluginsRelativeTo?: string;\n        rules?: {\n            [name: string]: Linter.RuleLevel | Linter.RuleLevelAndOptions;\n        };\n        rulePaths?: string[];\n        reportUnusedDisableDirectives?: boolean;\n    }\n\n    type LintResult = ESLint.LintResult;\n\n    type LintResultData = ESLint.LintResultData;\n\n    interface LintReport {\n        results: LintResult[];\n        errorCount: number;\n        warningCount: number;\n        fixableErrorCount: number;\n        fixableWarningCount: number;\n        usedDeprecatedRules: DeprecatedRuleUse[];\n    }\n\n    type DeprecatedRuleUse = ESLint.DeprecatedRuleUse;\n\n    type Formatter = (results: LintResult[], data?: LintResultData) => string;\n}\n\n//#endregion\n\n//#region RuleTester\n\nexport class RuleTester {\n    constructor(config?: any);\n\n    run(\n        name: string,\n        rule: Rule.RuleModule,\n        tests: {\n            valid?: Array<string | RuleTester.ValidTestCase>;\n            invalid?: RuleTester.InvalidTestCase[];\n        },\n    ): void;\n}\n\nexport namespace RuleTester {\n    interface ValidTestCase {\n        code: string;\n        options?: any;\n        filename?: string;\n        parserOptions?: Linter.ParserOptions;\n        settings?: { [name: string]: any };\n        parser?: string;\n        globals?: { [name: string]: boolean };\n    }\n\n    interface SuggestionOutput {\n        messageId?: string;\n        desc?: string;\n        data?: Record<string, unknown>;\n        output: string;\n    }\n\n    interface InvalidTestCase extends ValidTestCase {\n        errors: number | Array<TestCaseError | string>;\n        output?: string | null;\n    }\n\n    interface TestCaseError {\n        message?: string | RegExp;\n        messageId?: string;\n        type?: string;\n        data?: any;\n        line?: number;\n        column?: number;\n        endLine?: number;\n        endColumn?: number;\n        suggestions?: SuggestionOutput[];\n    }\n}\n\n//#endregion\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-d-ts-eslint-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-d-ts-eslint-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  // Type definitions for eslint 7.2\n// Project: https://eslint.org\n// Definitions by: Pierre-Marie Dartus <https://github.com/pmdartus>\n//                 Jed Fox <https://github.com/j-f1>\n//                 Saad Quadri <https://github.com/saadq>\n//                 Jason Kwok <https://github.com/JasonHK>\n//                 Brad Zacher <https://github.com/bradzacher>\n//                 JounQin <https://github.com/JounQin>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/// <reference path=\"helpers.d.ts\" />\n/// <reference path=\"lib/rules/index.d.ts\" />\n\n  import { JSONSchema4 } from \"json-schema\";\n  import * as ESTree from \"estree\";\n\n  export namespace AST {\n    type TokenType =\n      | \"Boolean\"\n      | \"Null\"\n      | \"Identifier\"\n      | \"Keyword\"\n      | \"Punctuator\"\n      | \"JSXIdentifier\"\n      | \"JSXText\"\n      | \"Numeric\"\n      | \"String\"\n      | \"RegularExpression\";\n\n    interface Token {\n      type: TokenType;\n      value: string;\n      range: Range;\n      loc: SourceLocation;\n    }\n\n    interface SourceLocation {\n      start: ESTree.Position;\n      end: ESTree.Position;\n    }\n\n    type Range = [number, number];\n\n    interface Program extends ESTree.Program {\n      comments: ESTree.Comment[];\n      tokens: Token[];\n      loc: SourceLocation;\n      range: Range;\n    }\n  }\n\n  export namespace Scope {\n    interface ScopeManager {\n      scopes: Scope[];\n      globalScope: Scope | null;\n\n      acquire(node: ESTree.Node, inner?: boolean): Scope | null;\n\n      getDeclaredVariables(node: ESTree.Node): Variable[];\n    }\n\n    interface Scope {\n      type:\n        | \"block\"\n        | \"catch\"\n        | \"class\"\n        | \"for\"\n        | \"function\"\n        | \"function-expression-name\"\n        | \"global\"\n        | \"module\"\n        | \"switch\"\n        | \"with\"\n        | \"TDZ\";\n      isStrict: boolean;\n      upper: Scope | null;\n      childScopes: Scope[];\n      variableScope: Scope;\n      block: ESTree.Node;\n      variables: Variable[];\n      set: Map<string, Variable>;\n      references: Reference[];\n      through: Reference[];\n      functionExpressionScope: boolean;\n    }\n\n    interface Variable {\n      name: string;\n      identifiers: ESTree.Identifier[];\n      references: Reference[];\n      defs: Definition[];\n    }\n\n    interface Reference {\n      identifier: ESTree.Identifier;\n      from: Scope;\n      resolved: Variable | null;\n      writeExpr: ESTree.Node | null;\n      init: boolean;\n\n      isWrite(): boolean;\n\n      isRead(): boolean;\n\n      isWriteOnly(): boolean;\n\n      isReadOnly(): boolean;\n\n      isReadWrite(): boolean;\n    }\n\n    type DefinitionType =\n      | { type: \"CatchClause\"; node: ESTree.CatchClause; parent: null }\n      | { type: \"ClassName\"; node: ESTree.ClassDeclaration | ESTree.ClassExpression; parent: null }\n      | { type: \"FunctionName\"; node: ESTree.FunctionDeclaration | ESTree.FunctionExpression; parent: null }\n      | { type: \"ImplicitGlobalVariable\"; node: ESTree.Program; parent: null }\n      | {\n        type: \"ImportBinding\";\n        node: ESTree.ImportSpecifier | ESTree.ImportDefaultSpecifier | ESTree.ImportNamespaceSpecifier;\n        parent: ESTree.ImportDeclaration;\n      }\n      | {\n        type: \"Parameter\";\n        node: ESTree.FunctionDeclaration | ESTree.FunctionExpression | ESTree.ArrowFunctionExpression;\n        parent: null;\n      }\n      | { type: \"TDZ\"; node: any; parent: null }\n      | { type: \"Variable\"; node: ESTree.VariableDeclarator; parent: ESTree.VariableDeclaration };\n\n    type Definition = DefinitionType & { name: ESTree.Identifier };\n  }\n\n  //#region SourceCode\n\n  export class SourceCode {\n    text: string;\n    ast: AST.Program;\n    lines: string[];\n    hasBOM: boolean;\n    parserServices: SourceCode.ParserServices;\n    scopeManager: Scope.ScopeManager;\n    visitorKeys: SourceCode.VisitorKeys;\n\n    constructor(text: string, ast: AST.Program);\n    constructor(config: SourceCode.Config);\n\n    static splitLines(text: string): string[];\n\n    getText(node?: ESTree.Node, beforeCount?: number, afterCount?: number): string;\n\n    getLines(): string[];\n\n    getAllComments(): ESTree.Comment[];\n\n    getComments(node: ESTree.Node): { leading: ESTree.Comment[]; trailing: ESTree.Comment[] };\n\n    getJSDocComment(node: ESTree.Node): ESTree.Comment | null;\n\n    getNodeByRangeIndex(index: number): ESTree.Node | null;\n\n    isSpaceBetweenTokens(first: AST.Token, second: AST.Token): boolean;\n\n    getLocFromIndex(index: number): ESTree.Position;\n\n    getIndexFromLoc(location: ESTree.Position): number;\n\n    // Inherited methods from TokenStore\n    // ---------------------------------\n\n    getTokenByRangeStart(offset: number, options?: { includeComments: false }): AST.Token | null;\n    getTokenByRangeStart(offset: number, options: { includeComments: boolean }): AST.Token | ESTree.Comment | null;\n\n    getFirstToken: SourceCode.UnaryNodeCursorWithSkipOptions;\n\n    getFirstTokens: SourceCode.UnaryNodeCursorWithCountOptions;\n\n    getLastToken: SourceCode.UnaryNodeCursorWithSkipOptions;\n\n    getLastTokens: SourceCode.UnaryNodeCursorWithCountOptions;\n\n    getTokenBefore: SourceCode.UnaryCursorWithSkipOptions;\n\n    getTokensBefore: SourceCode.UnaryCursorWithCountOptions;\n\n    getTokenAfter: SourceCode.UnaryCursorWithSkipOptions;\n\n    getTokensAfter: SourceCode.UnaryCursorWithCountOptions;\n\n    getFirstTokenBetween: SourceCode.BinaryCursorWithSkipOptions;\n\n    getFirstTokensBetween: SourceCode.BinaryCursorWithCountOptions;\n\n    getLastTokenBetween: SourceCode.BinaryCursorWithSkipOptions;\n\n    getLastTokensBetween: SourceCode.BinaryCursorWithCountOptions;\n\n    getTokensBetween: SourceCode.BinaryCursorWithCountOptions;\n\n    getTokens: ((node: ESTree.Node, beforeCount?: number, afterCount?: number) => AST.Token[]) &\n      SourceCode.UnaryNodeCursorWithCountOptions;\n\n    commentsExistBetween(\n      left: ESTree.Node | AST.Token | ESTree.Comment,\n      right: ESTree.Node | AST.Token | ESTree.Comment,\n    ): boolean;\n\n    getCommentsBefore(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];\n\n    getCommentsAfter(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];\n\n    getCommentsInside(node: ESTree.Node): ESTree.Comment[];\n  }\n\n  export namespace SourceCode {\n    interface Config {\n      text: string;\n      ast: AST.Program;\n      parserServices?: ParserServices;\n      scopeManager?: Scope.ScopeManager;\n      visitorKeys?: VisitorKeys;\n    }\n\n    type ParserServices = any;\n\n    interface VisitorKeys {\n      [nodeType: string]: string[];\n    }\n\n    interface UnaryNodeCursorWithSkipOptions {\n      <T extends AST.Token>(\n        node: ESTree.Node,\n        options:\n          | ((token: AST.Token) => token is T)\n          | { filter: (token: AST.Token) => token is T; includeComments?: false; skip?: number },\n      ): T | null;\n      <T extends AST.Token | ESTree.Comment>(\n        node: ESTree.Node,\n        options: {\n          filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n          includeComments: boolean;\n          skip?: number;\n        },\n      ): T | null;\n      (\n        node: ESTree.Node,\n        options?:\n          | { filter?: (token: AST.Token) => boolean; includeComments?: false; skip?: number }\n          | ((token: AST.Token) => boolean)\n          | number,\n      ): AST.Token | null;\n      (\n        node: ESTree.Node,\n        options: {\n          filter?: (token: AST.Token | ESTree.Comment) => boolean;\n          includeComments: boolean;\n          skip?: number;\n        },\n      ): AST.Token | ESTree.Comment | null;\n    }\n\n    interface UnaryNodeCursorWithCountOptions {\n      <T extends AST.Token>(\n        node: ESTree.Node,\n        options:\n          | ((token: AST.Token) => token is T)\n          | { filter: (token: AST.Token) => token is T; includeComments?: false; count?: number },\n      ): T[];\n      <T extends AST.Token | ESTree.Comment>(\n        node: ESTree.Node,\n        options: {\n          filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n          includeComments: boolean;\n          count?: number;\n        },\n      ): T[];\n      (\n        node: ESTree.Node,\n        options?:\n          | { filter?: (token: AST.Token) => boolean; includeComments?: false; count?: number }\n          | ((token: AST.Token) => boolean)\n          | number,\n      ): AST.Token[];\n      (\n        node: ESTree.Node,\n        options: {\n          filter?: (token: AST.Token | ESTree.Comment) => boolean;\n          includeComments: boolean;\n          count?: number;\n        },\n      ): Array<AST.Token | ESTree.Comment>;\n    }\n\n    interface UnaryCursorWithSkipOptions {\n      <T extends AST.Token>(\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options:\n          | ((token: AST.Token) => token is T)\n          | { filter: (token: AST.Token) => token is T; includeComments?: false; skip?: number },\n      ): T | null;\n      <T extends AST.Token | ESTree.Comment>(\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n          includeComments: boolean;\n          skip?: number;\n        },\n      ): T | null;\n      (\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options?:\n          | { filter?: (token: AST.Token) => boolean; includeComments?: false; skip?: number }\n          | ((token: AST.Token) => boolean)\n          | number,\n      ): AST.Token | null;\n      (\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter?: (token: AST.Token | ESTree.Comment) => boolean;\n          includeComments: boolean;\n          skip?: number;\n        },\n      ): AST.Token | ESTree.Comment | null;\n    }\n\n    interface UnaryCursorWithCountOptions {\n      <T extends AST.Token>(\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options:\n          | ((token: AST.Token) => token is T)\n          | { filter: (token: AST.Token) => token is T; includeComments?: false; count?: number },\n      ): T[];\n      <T extends AST.Token | ESTree.Comment>(\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n          includeComments: boolean;\n          count?: number;\n        },\n      ): T[];\n      (\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options?:\n          | { filter?: (token: AST.Token) => boolean; includeComments?: false; count?: number }\n          | ((token: AST.Token) => boolean)\n          | number,\n      ): AST.Token[];\n      (\n        node: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter?: (token: AST.Token | ESTree.Comment) => boolean;\n          includeComments: boolean;\n          count?: number;\n        },\n      ): Array<AST.Token | ESTree.Comment>;\n    }\n\n    interface BinaryCursorWithSkipOptions {\n      <T extends AST.Token>(\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options:\n          | ((token: AST.Token) => token is T)\n          | { filter: (token: AST.Token) => token is T; includeComments?: false; skip?: number },\n      ): T | null;\n      <T extends AST.Token | ESTree.Comment>(\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n          includeComments: boolean;\n          skip?: number;\n        },\n      ): T | null;\n      (\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options?:\n          | { filter?: (token: AST.Token) => boolean; includeComments?: false; skip?: number }\n          | ((token: AST.Token) => boolean)\n          | number,\n      ): AST.Token | null;\n      (\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter?: (token: AST.Token | ESTree.Comment) => boolean;\n          includeComments: boolean;\n          skip?: number;\n        },\n      ): AST.Token | ESTree.Comment | null;\n    }\n\n    interface BinaryCursorWithCountOptions {\n      <T extends AST.Token>(\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options:\n          | ((token: AST.Token) => token is T)\n          | { filter: (token: AST.Token) => token is T; includeComments?: false; count?: number },\n      ): T[];\n      <T extends AST.Token | ESTree.Comment>(\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;\n          includeComments: boolean;\n          count?: number;\n        },\n      ): T[];\n      (\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options?:\n          | { filter?: (token: AST.Token) => boolean; includeComments?: false; count?: number }\n          | ((token: AST.Token) => boolean)\n          | number,\n      ): AST.Token[];\n      (\n        left: ESTree.Node | AST.Token | ESTree.Comment,\n        right: ESTree.Node | AST.Token | ESTree.Comment,\n        options: {\n          filter?: (token: AST.Token | ESTree.Comment) => boolean;\n          includeComments: boolean;\n          count?: number;\n        },\n      ): Array<AST.Token | ESTree.Comment>;\n    }\n  }\n\n  //#endregion\n\n  export namespace Rule {\n    interface RuleModule {\n      create(context: RuleContext): RuleListener;\n      meta?: RuleMetaData;\n    }\n\n    type NodeTypes = ESTree.Node[\"type\"];\n    interface NodeListener {\n      ArrayExpression?: (node: ESTree.ArrayExpression & NodeParentExtension) => void;\n      ArrayPattern?: (node: ESTree.ArrayPattern & NodeParentExtension) => void;\n      ArrowFunctionExpression?: (node: ESTree.ArrowFunctionExpression & NodeParentExtension) => void;\n      AssignmentExpression?: (node: ESTree.AssignmentExpression & NodeParentExtension) => void;\n      AssignmentPattern?: (node: ESTree.AssignmentPattern & NodeParentExtension) => void;\n      AwaitExpression?: (node: ESTree.AwaitExpression & NodeParentExtension) => void;\n      BinaryExpression?: (node: ESTree.BinaryExpression & NodeParentExtension) => void;\n      BlockStatement?: (node: ESTree.BlockStatement & NodeParentExtension) => void;\n      BreakStatement?: (node: ESTree.BreakStatement & NodeParentExtension) => void;\n      CallExpression?: (node: ESTree.CallExpression & NodeParentExtension) => void;\n      CatchClause?: (node: ESTree.CatchClause & NodeParentExtension) => void;\n      ChainExpression?: (node: ESTree.ChainExpression & NodeParentExtension) => void;\n      ClassBody?: (node: ESTree.ClassBody & NodeParentExtension) => void;\n      ClassDeclaration?: (node: ESTree.ClassDeclaration & NodeParentExtension) => void;\n      ClassExpression?: (node: ESTree.ClassExpression & NodeParentExtension) => void;\n      ConditionalExpression?: (node: ESTree.ConditionalExpression & NodeParentExtension) => void;\n      ContinueStatement?: (node: ESTree.ContinueStatement & NodeParentExtension) => void;\n      DebuggerStatement?: (node: ESTree.DebuggerStatement & NodeParentExtension) => void;\n      DoWhileStatement?: (node: ESTree.DoWhileStatement & NodeParentExtension) => void;\n      EmptyStatement?: (node: ESTree.EmptyStatement & NodeParentExtension) => void;\n      ExportAllDeclaration?: (node: ESTree.ExportAllDeclaration & NodeParentExtension) => void;\n      ExportDefaultDeclaration?: (node: ESTree.ExportDefaultDeclaration & NodeParentExtension) => void;\n      ExportNamedDeclaration?: (node: ESTree.ExportNamedDeclaration & NodeParentExtension) => void;\n      ExportSpecifier?: (node: ESTree.ExportSpecifier & NodeParentExtension) => void;\n      ExpressionStatement?: (node: ESTree.ExpressionStatement & NodeParentExtension) => void;\n      ForInStatement?: (node: ESTree.ForInStatement & NodeParentExtension) => void;\n      ForOfStatement?: (node: ESTree.ForOfStatement & NodeParentExtension) => void;\n      ForStatement?: (node: ESTree.ForStatement & NodeParentExtension) => void;\n      FunctionDeclaration?: (node: ESTree.FunctionDeclaration & NodeParentExtension) => void;\n      FunctionExpression?: (node: ESTree.FunctionExpression & NodeParentExtension) => void;\n      Identifier?: (node: ESTree.Identifier & NodeParentExtension) => void;\n      IfStatement?: (node: ESTree.IfStatement & NodeParentExtension) => void;\n      ImportDeclaration?: (node: ESTree.ImportDeclaration & NodeParentExtension) => void;\n      ImportDefaultSpecifier?: (node: ESTree.ImportDefaultSpecifier & NodeParentExtension) => void;\n      ImportExpression?: (node: ESTree.ImportExpression & NodeParentExtension) => void;\n      ImportNamespaceSpecifier?: (node: ESTree.ImportNamespaceSpecifier & NodeParentExtension) => void;\n      ImportSpecifier?: (node: ESTree.ImportSpecifier & NodeParentExtension) => void;\n      LabeledStatement?: (node: ESTree.LabeledStatement & NodeParentExtension) => void;\n      Literal?: (node: ESTree.Literal & NodeParentExtension) => void;\n      LogicalExpression?: (node: ESTree.LogicalExpression & NodeParentExtension) => void;\n      MemberExpression?: (node: ESTree.MemberExpression & NodeParentExtension) => void;\n      MetaProperty?: (node: ESTree.MetaProperty & NodeParentExtension) => void;\n      MethodDefinition?: (node: ESTree.MethodDefinition & NodeParentExtension) => void;\n      NewExpression?: (node: ESTree.NewExpression & NodeParentExtension) => void;\n      ObjectExpression?: (node: ESTree.ObjectExpression & NodeParentExtension) => void;\n      ObjectPattern?: (node: ESTree.ObjectPattern & NodeParentExtension) => void;\n      Program?: (node: ESTree.Program) => void;\n      Property?: (node: ESTree.Property & NodeParentExtension) => void;\n      RestElement?: (node: ESTree.RestElement & NodeParentExtension) => void;\n      ReturnStatement?: (node: ESTree.ReturnStatement & NodeParentExtension) => void;\n      SequenceExpression?: (node: ESTree.SequenceExpression & NodeParentExtension) => void;\n      SpreadElement?: (node: ESTree.SpreadElement & NodeParentExtension) => void;\n      Super?: (node: ESTree.Super & NodeParentExtension) => void;\n      SwitchCase?: (node: ESTree.SwitchCase & NodeParentExtension) => void;\n      SwitchStatement?: (node: ESTree.SwitchStatement & NodeParentExtension) => void;\n      TaggedTemplateExpression?: (node: ESTree.TaggedTemplateExpression & NodeParentExtension) => void;\n      TemplateElement?: (node: ESTree.TemplateElement & NodeParentExtension) => void;\n      TemplateLiteral?: (node: ESTree.TemplateLiteral & NodeParentExtension) => void;\n      ThisExpression?: (node: ESTree.ThisExpression & NodeParentExtension) => void;\n      ThrowStatement?: (node: ESTree.ThrowStatement & NodeParentExtension) => void;\n      TryStatement?: (node: ESTree.TryStatement & NodeParentExtension) => void;\n      UnaryExpression?: (node: ESTree.UnaryExpression & NodeParentExtension) => void;\n      UpdateExpression?: (node: ESTree.UpdateExpression & NodeParentExtension) => void;\n      VariableDeclaration?: (node: ESTree.VariableDeclaration & NodeParentExtension) => void;\n      VariableDeclarator?: (node: ESTree.VariableDeclarator & NodeParentExtension) => void;\n      WhileStatement?: (node: ESTree.WhileStatement & NodeParentExtension) => void;\n      WithStatement?: (node: ESTree.WithStatement & NodeParentExtension) => void;\n      YieldExpression?: (node: ESTree.YieldExpression & NodeParentExtension) => void;\n    }\n\n    interface NodeParentExtension {\n      parent: Node;\n    }\n    type Node = ESTree.Node & NodeParentExtension;\n\n    interface RuleListener extends NodeListener {\n      onCodePathStart?(codePath: CodePath, node: Node): void;\n\n      onCodePathEnd?(codePath: CodePath, node: Node): void;\n\n      onCodePathSegmentStart?(segment: CodePathSegment, node: Node): void;\n\n      onCodePathSegmentEnd?(segment: CodePathSegment, node: Node): void;\n\n      onCodePathSegmentLoop?(fromSegment: CodePathSegment, toSegment: CodePathSegment, node: Node): void;\n\n      [key: string]:\n        | ((codePath: CodePath, node: Node) => void)\n        | ((segment: CodePathSegment, node: Node) => void)\n        | ((fromSegment: CodePathSegment, toSegment: CodePathSegment, node: Node) => void)\n        | ((node: Node) => void)\n        | NodeListener[keyof NodeListener]\n        | undefined;\n    }\n\n    interface CodePath {\n      id: string;\n      initialSegment: CodePathSegment;\n      finalSegments: CodePathSegment[];\n      returnedSegments: CodePathSegment[];\n      thrownSegments: CodePathSegment[];\n      currentSegments: CodePathSegment[];\n      upper: CodePath | null;\n      childCodePaths: CodePath[];\n    }\n\n    interface CodePathSegment {\n      id: string;\n      nextSegments: CodePathSegment[];\n      prevSegments: CodePathSegment[];\n      reachable: boolean;\n    }\n\n    interface RuleMetaData {\n      docs?: {\n        /** provides the short description of the rule in the [rules index](https://eslint.org/docs/rules/) */\n        description?: string;\n        /** specifies the heading under which the rule is listed in the [rules index](https://eslint.org/docs/rules/) */\n        category?: string;\n        /** is whether the `\"extends\": \"eslint:recommended\"` property in a [configuration file](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) enables the rule */\n        recommended?: boolean;\n        /** specifies the URL at which the full documentation can be accessed */\n        url?: string;\n        /** specifies whether rules can return suggestions (defaults to false if omitted) */\n        suggestion?: boolean;\n      };\n      messages?: { [messageId: string]: string };\n      fixable?: \"code\" | \"whitespace\";\n      schema?: JSONSchema4 | JSONSchema4[];\n      deprecated?: boolean;\n      type?: \"problem\" | \"suggestion\" | \"layout\";\n    }\n\n    interface RuleContext {\n      id: string;\n      options: any[];\n      settings: { [name: string]: any };\n      parserPath: string;\n      parserOptions: Linter.ParserOptions;\n      parserServices: SourceCode.ParserServices;\n\n      getAncestors(): ESTree.Node[];\n\n      getDeclaredVariables(node: ESTree.Node): Scope.Variable[];\n\n      getFilename(): string;\n\n      getCwd(): string;\n\n      getScope(): Scope.Scope;\n\n      getSourceCode(): SourceCode;\n\n      markVariableAsUsed(name: string): boolean;\n\n      report(descriptor: ReportDescriptor): void;\n    }\n\n    interface ReportDescriptorOptionsBase {\n      data?: { [key: string]: string };\n\n      fix?: null | ((fixer: RuleFixer) => null | Fix | IterableIterator<Fix> | Fix[]);\n    }\n\n    type SuggestionDescriptorMessage = { desc: string } | { messageId: string };\n    type SuggestionReportDescriptor = SuggestionDescriptorMessage & ReportDescriptorOptionsBase;\n\n    interface ReportDescriptorOptions extends ReportDescriptorOptionsBase {\n      suggest?: SuggestionReportDescriptor[] | null;\n    }\n\n    type ReportDescriptor = ReportDescriptorMessage & ReportDescriptorLocation & ReportDescriptorOptions;\n    type ReportDescriptorMessage = { message: string } | { messageId: string };\n    type ReportDescriptorLocation =\n      | { node: ESTree.Node }\n      | { loc: AST.SourceLocation | { line: number; column: number } };\n\n    interface RuleFixer {\n      insertTextAfter(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;\n\n      insertTextAfterRange(range: AST.Range, text: string): Fix;\n\n      insertTextBefore(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;\n\n      insertTextBeforeRange(range: AST.Range, text: string): Fix;\n\n      remove(nodeOrToken: ESTree.Node | AST.Token): Fix;\n\n      removeRange(range: AST.Range): Fix;\n\n      replaceText(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;\n\n      replaceTextRange(range: AST.Range, text: string): Fix;\n    }\n\n    interface Fix {\n      range: AST.Range;\n      text: string;\n    }\n  }\n\n  //#region Linter\n\n  export class Linter {\n    static version: string;\n\n    version: string;\n\n    constructor(options?: { cwd?: string });\n\n    verify(code: SourceCode | string, config: Linter.Config, filename?: string): Linter.LintMessage[];\n    verify(code: SourceCode | string, config: Linter.Config, options: Linter.LintOptions): Linter.LintMessage[];\n\n    verifyAndFix(code: string, config: Linter.Config, filename?: string): Linter.FixReport;\n    verifyAndFix(code: string, config: Linter.Config, options: Linter.FixOptions): Linter.FixReport;\n\n    getSourceCode(): SourceCode;\n\n    defineRule(name: string, rule: Rule.RuleModule): void;\n\n    defineRules(rules: { [name: string]: Rule.RuleModule }): void;\n\n    getRules(): Map<string, Rule.RuleModule>;\n\n    defineParser(name: string, parser: Linter.ParserModule): void;\n  }\n\n  export namespace Linter {\n    type Severity = 0 | 1 | 2;\n\n    type RuleLevel = Severity | \"off\" | \"warn\" | \"error\";\n    type RuleLevelAndOptions<Options extends any[] = any[]> = Prepend<Partial<Options>, RuleLevel>;\n\n    type RuleEntry<Options extends any[] = any[]> = RuleLevel | RuleLevelAndOptions<Options>;\n\n    interface RulesRecord {\n      [rule: string]: RuleEntry;\n    }\n\n    interface HasRules<Rules extends RulesRecord = RulesRecord> {\n      rules?: Partial<Rules>;\n    }\n\n    interface BaseConfig<Rules extends RulesRecord = RulesRecord> extends HasRules<Rules> {\n      $schema?: string;\n      env?: { [name: string]: boolean };\n      extends?: string | string[];\n      globals?: { [name: string]: boolean | \"readonly\" | \"readable\" | \"writable\" | \"writeable\" };\n      noInlineConfig?: boolean;\n      overrides?: ConfigOverride[];\n      parser?: string;\n      parserOptions?: ParserOptions;\n      plugins?: string[];\n      processor?: string;\n      reportUnusedDisableDirectives?: boolean;\n      settings?: { [name: string]: any };\n    }\n\n    interface ConfigOverride<Rules extends RulesRecord = RulesRecord> extends BaseConfig<Rules> {\n      excludedFiles?: string | string[];\n      files: string | string[];\n    }\n\n    // https://github.com/eslint/eslint/blob/v6.8.0/conf/config-schema.js\n    interface Config<Rules extends RulesRecord = RulesRecord> extends BaseConfig<Rules> {\n      ignorePatterns?: string | string[];\n      root?: boolean;\n    }\n\n    interface ParserOptions {\n      ecmaVersion?: 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021;\n      sourceType?: \"script\" | \"module\";\n      ecmaFeatures?: {\n        globalReturn?: boolean;\n        impliedStrict?: boolean;\n        jsx?: boolean;\n        experimentalObjectRestSpread?: boolean;\n        [key: string]: any;\n      };\n      [key: string]: any;\n    }\n\n    interface LintOptions {\n      filename?: string;\n      preprocess?: (code: string) => string[];\n      postprocess?: (problemLists: LintMessage[][]) => LintMessage[];\n      filterCodeBlock?: boolean;\n      disableFixes?: boolean;\n      allowInlineConfig?: boolean;\n      reportUnusedDisableDirectives?: boolean;\n    }\n\n    interface LintSuggestion {\n      desc: string;\n      fix: Rule.Fix;\n      messageId?: string;\n    }\n\n    interface LintMessage {\n      column: number;\n      line: number;\n      endColumn?: number;\n      endLine?: number;\n      ruleId: string | null;\n      message: string;\n      messageId?: string;\n      nodeType?: string;\n      fatal?: true;\n      severity: Severity;\n      fix?: Rule.Fix;\n      /** @deprecated Use `linter.getSourceCode()` */\n      source?: string | null;\n      suggestions?: LintSuggestion[];\n    }\n\n    interface FixOptions extends LintOptions {\n      fix?: boolean;\n    }\n\n    interface FixReport {\n      fixed: boolean;\n      output: string;\n      messages: LintMessage[];\n    }\n\n    type ParserModule =\n      | {\n        parse(text: string, options?: any): AST.Program;\n      }\n      | {\n        parseForESLint(text: string, options?: any): ESLintParseResult;\n      };\n\n    interface ESLintParseResult {\n      ast: AST.Program;\n      parserServices?: SourceCode.ParserServices;\n      scopeManager?: Scope.ScopeManager;\n      visitorKeys?: SourceCode.VisitorKeys;\n    }\n\n    interface ProcessorFile {\n      text: string;\n      filename: string;\n    }\n\n    // https://eslint.org/docs/developer-guide/working-with-plugins#processors-in-plugins\n    interface Processor<T extends string | ProcessorFile = string | ProcessorFile> {\n      supportsAutofix?: boolean;\n      preprocess?(text: string, filename: string): T[];\n      postprocess?(messages: LintMessage[][], filename: string): LintMessage[];\n    }\n  }\n\n  //#endregion\n\n//#region ESLint\n\n  export class ESLint {\n    static version: string;\n\n    static outputFixes(results: ESLint.LintResult[]): Promise<void>;\n\n    static getErrorResults(results: ESLint.LintResult[]): ESLint.LintResult[];\n\n    constructor(options?: ESLint.Options);\n\n    lintFiles(patterns: string | string[]): Promise<ESLint.LintResult[]>;\n\n    lintText(code: string, options?: { filePath?: string; warnIgnored?: boolean }): Promise<ESLint.LintResult[]>;\n\n    calculateConfigForFile(filePath: string): Promise<any>;\n\n    isPathIgnored(filePath: string): Promise<boolean>;\n\n    loadFormatter(nameOrPath?: string): Promise<ESLint.Formatter>;\n  }\n\n  export namespace ESLint {\n    interface Options {\n      // File enumeration\n      cwd?: string;\n      errorOnUnmatchedPattern?: boolean;\n      extensions?: string[];\n      globInputPaths?: boolean;\n      ignore?: boolean;\n      ignorePath?: string;\n\n      // Linting\n      allowInlineConfig?: boolean;\n      baseConfig?: Linter.Config;\n      overrideConfig?: Linter.Config;\n      overrideConfigFile?: string;\n      plugins?: Record<string, any>;\n      reportUnusedDisableDirectives?: Linter.RuleLevel;\n      resolvePluginsRelativeTo?: string;\n      rulePaths?: string[];\n      useEslintrc?: boolean;\n\n      // Autofix\n      fix?: boolean | ((message: Linter.LintMessage) => boolean);\n      fixTypes?: Array<Rule.RuleMetaData[\"type\"]>;\n\n      // Cache-related\n      cache?: boolean;\n      cacheLocation?: string;\n      cacheStrategy?: \"content\" | \"metadata\";\n    }\n\n    interface LintResult {\n      filePath: string;\n      messages: Linter.LintMessage[];\n      errorCount: number;\n      warningCount: number;\n      fixableErrorCount: number;\n      fixableWarningCount: number;\n      output?: string;\n      source?: string;\n      usedDeprecatedRules: DeprecatedRuleUse[];\n    }\n\n    interface LintResultData {\n      rulesMeta: {\n        [ruleId: string]: Rule.RuleMetaData;\n      };\n    }\n\n    interface DeprecatedRuleUse {\n      ruleId: string;\n      replacedBy: string[];\n    }\n\n    interface Formatter {\n      format(results: LintResult[], data?: LintResultData): string;\n    }\n\n    // Docs reference the type by this name\n    type EditInfo = Rule.Fix;\n  }\n\n  //#endregion\n\n//#region CLIEngine\n\n/** @deprecated Deprecated in favor of `ESLint` */\n  export class CLIEngine {\n    static version: string;\n\n    constructor(options: CLIEngine.Options);\n\n    executeOnFiles(patterns: string[]): CLIEngine.LintReport;\n\n    resolveFileGlobPatterns(patterns: string[]): string[];\n\n    getConfigForFile(filePath: string): Linter.Config;\n\n    executeOnText(text: string, filename?: string): CLIEngine.LintReport;\n\n    addPlugin(name: string, pluginObject: any): void;\n\n    isPathIgnored(filePath: string): boolean;\n\n    getFormatter(format?: string): CLIEngine.Formatter;\n\n    getRules(): Map<string, Rule.RuleModule>;\n\n    static getErrorResults(results: CLIEngine.LintResult[]): CLIEngine.LintResult[];\n\n    static getFormatter(format?: string): CLIEngine.Formatter;\n\n    static outputFixes(report: CLIEngine.LintReport): void;\n  }\n\n  /** @deprecated Deprecated in favor of `ESLint` */\n  export namespace CLIEngine {\n    class Options {\n      allowInlineConfig?: boolean;\n      baseConfig?: false | { [name: string]: any };\n      cache?: boolean;\n      cacheFile?: string;\n      cacheLocation?: string;\n      cacheStrategy?: \"content\" | \"metadata\";\n      configFile?: string;\n      cwd?: string;\n      envs?: string[];\n      errorOnUnmatchedPattern?: boolean;\n      extensions?: string[];\n      fix?: boolean;\n      globals?: string[];\n      ignore?: boolean;\n      ignorePath?: string;\n      ignorePattern?: string | string[];\n      useEslintrc?: boolean;\n      parser?: string;\n      parserOptions?: Linter.ParserOptions;\n      plugins?: string[];\n      resolvePluginsRelativeTo?: string;\n      rules?: {\n        [name: string]: Linter.RuleLevel | Linter.RuleLevelAndOptions;\n      };\n      rulePaths?: string[];\n      reportUnusedDisableDirectives?: boolean;\n    }\n\n    type LintResult = ESLint.LintResult;\n\n    type LintResultData = ESLint.LintResultData;\n\n    interface LintReport {\n      results: LintResult[];\n      errorCount: number;\n      warningCount: number;\n      fixableErrorCount: number;\n      fixableWarningCount: number;\n      usedDeprecatedRules: DeprecatedRuleUse[];\n    }\n\n    type DeprecatedRuleUse = ESLint.DeprecatedRuleUse;\n\n    type Formatter = (results: LintResult[], data?: LintResultData) => string;\n  }\n\n  //#endregion\n\n//#region RuleTester\n\n  export class RuleTester {\n    constructor(config?: any);\n\n    run(\n      name: string,\n      rule: Rule.RuleModule,\n      tests: {\n        valid?: Array<string | RuleTester.ValidTestCase>;\n        invalid?: RuleTester.InvalidTestCase[];\n      },\n    ): void;\n  }\n\n  export namespace RuleTester {\n    interface ValidTestCase {\n      code: string;\n      options?: any;\n      filename?: string;\n      parserOptions?: Linter.ParserOptions;\n      settings?: { [name: string]: any };\n      parser?: string;\n      globals?: { [name: string]: boolean };\n    }\n\n    interface SuggestionOutput {\n      messageId?: string;\n      desc?: string;\n      data?: Record<string, unknown>;\n      output: string;\n    }\n\n    interface InvalidTestCase extends ValidTestCase {\n      errors: number | Array<TestCaseError | string>;\n      output?: string | null;\n    }\n\n    interface TestCaseError {\n      message?: string | RegExp;\n      messageId?: string;\n      type?: string;\n      data?: any;\n      line?: number;\n      column?: number;\n      endLine?: number;\n      endColumn?: number;\n      suggestions?: SuggestionOutput[];\n    }\n  }\n\n//#endregion\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-d-ts-eslint-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-decorator01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 75\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 76\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 77\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 78\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 79\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 80\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 81\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 82\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 83\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 84\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 85\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 86\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 88\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 89\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 90\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 91\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 92\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 93\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 94\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 96\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 97\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 98\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 99\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 100\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 101\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 102\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 103\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 104\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 105\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 106\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 107\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 109\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 110\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 111\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 112\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 113\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 114\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 115\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 116\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 117\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 118\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 119\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 120\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 121\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 123\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 124\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 125\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 126\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 127\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 128\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 129\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 130\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 131\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 132\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 133\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 134\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 135\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 136\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 137\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 138\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 139\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 140\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 142\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 143\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 144\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 146\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 147\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 148\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 150\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 151\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 152\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 153\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 154\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 155\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 156\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 157\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 158\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 159\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 160\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 161\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 162\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 163\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 164\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 165\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 166\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 168\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 169\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 170\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 171\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 172\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 173\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 174\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 175\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 176\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 177\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 178\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 179\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 180\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 181\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 182\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 183\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 184\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 185\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 186\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 187\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 188\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 189\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 190\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 191\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 192\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 193\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 194\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 195\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 196\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 197\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 198\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 199\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 200\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 201\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 202\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 203\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 204\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-decorator01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass\nExampleClass\n{\n@first\n(\n)\n@second\n(\n)\nmethod\n(\n)\n{\n}\n}\n\n@sealed\nclass\nBugReport\n{\ntype\n=\n\"report\"\n;\ntitle\n:\nstring\n;\n\nconstructor\n(\nt\n:\nstring\n)\n{\nthis\n.\ntitle\n=\nt\n;\n}\n}\n\nclass\nGreeter\n{\ngreeting\n:\nstring\n;\nconstructor\n(\nmessage\n:\nstring\n)\n{\nthis\n.\ngreeting\n=\nmessage\n;\n}\n\n@\nenumerable\n(\nfalse\n)\ngreet\n(\n)\n{\nreturn \"Hello, \"\n+\nthis\n.\ngreeting\n;\n}\n}\n\nclass Point {\nprivate _x: number;\nprivate _y: number;\nconstructor(x: number, y: number) {\nthis._x = x;\nthis._y = y;\n}\n\n@\nconfigurable\n(\nfalse\n)\nget\nx\n(\n)\n{\nreturn this._x;\n}\n\n@\nconfigurable\n(\nfalse\n)\nget\ny\n(\n)\n{\nreturn this._y;\n}\n}\n\nclass Greeter {\n@\nformat\n(\n\"Hello, %s\"\n)\ngreeting\n:\nstring\n;\nconstructor(message: string) {\nthis.greeting = message;\n}\ngreet() {\nlet formatString = getFormat(this, \"greeting\");\nreturn formatString.replace(\"%s\", this.greeting);\n}\n}\n\nclass BugReport {\ntype = \"report\";\ntitle: string;\n\nconstructor(t: string) {\nthis.title = t;\n}\n\n@\nvalidate\nprint\n(\n@\nrequired\nverbose\n:\nboolean\n) {\nif (verbose) {\nreturn `type: ${this.type}\\ntitle: ${this.title}`;\n} else {\nreturn this.title;\n}\n}\n}\n\nclass Line {\nprivate _start: Point;\nprivate _end: Point;\n@\nvalidate\n@\nReflect\n.\nmetadata(\n\"design:type\"\n,\nPoint\n)\nset start(value: Point) {\nthis._start = value;\n}\nget start() {\nreturn this._start;\n}\n@\nvalidate\n@\nReflect\n.\nmetadata(\n\"design:type\"\n,\nPoint\n)\nset\nend(value: Point) {\nthis._end = value;\n}\nget end() {\nreturn this._end;\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-decorator01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-decorator01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class\n    ExampleClass\n  {\n    @first\n      (\n      )\n    @second\n      (\n      )\n    method\n      (\n      )\n    {\n    }\n  }\n\n  @sealed\n  class\n    BugReport\n  {\n    type\n      =\n      \"report\"\n    ;\n    title\n      :\n      string\n    ;\n\n    constructor\n      (\n        t\n          :\n          string\n      )\n    {\n      this\n        .\n        title\n        =\n        t\n      ;\n    }\n  }\n\n  class\n    Greeter\n  {\n    greeting\n      :\n      string\n    ;\n    constructor\n      (\n        message\n          :\n          string\n      )\n    {\n      this\n        .\n        greeting\n        =\n        message\n      ;\n    }\n\n    @\n    enumerable\n      (\n        false\n      )\n    greet\n      (\n      )\n    {\n      return \"Hello, \"\n        +\n        this\n          .\n          greeting\n      ;\n    }\n  }\n\n  class Point {\n    private _x: number;\n    private _y: number;\n    constructor(x: number, y: number) {\n      this._x = x;\n      this._y = y;\n    }\n\n    @\n    configurable\n      (\n        false\n      )\n    get\n    x\n      (\n      )\n    {\n      return this._x;\n    }\n\n    @\n    configurable\n      (\n        false\n      )\n    get\n    y\n      (\n      )\n    {\n      return this._y;\n    }\n  }\n\n  class Greeter {\n    @\n    format\n      (\n        \"Hello, %s\"\n      )\n    greeting\n      :\n      string\n    ;\n    constructor(message: string) {\n      this.greeting = message;\n    }\n    greet() {\n      let formatString = getFormat(this, \"greeting\");\n      return formatString.replace(\"%s\", this.greeting);\n    }\n  }\n\n  class BugReport {\n    type = \"report\";\n    title: string;\n\n    constructor(t: string) {\n      this.title = t;\n    }\n\n    @\n    validate\n    print\n      (\n        @\n        required\n        verbose\n          :\n          boolean\n      ) {\n      if (verbose) {\n        return `type: ${this.type}\\ntitle: ${this.title}`;\n      } else {\n        return this.title;\n      }\n    }\n  }\n\n  class Line {\n    private _start: Point;\n    private _end: Point;\n    @\n    validate\n    @\n    Reflect\n      .\n      metadata(\n        \"design:type\"\n        ,\n        Point\n      )\n    set start(value: Point) {\n      this._start = value;\n    }\n    get start() {\n      return this._start;\n    }\n    @\n    validate\n    @\n    Reflect\n      .\n      metadata(\n        \"design:type\"\n        ,\n        Point\n      )\n    set\n    end(value: Point) {\n      this._end = value;\n    }\n    get end() {\n      return this._end;\n    }\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-decorator01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-decorator02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-decorator02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n@\n(\nd\n)\n@\n(\nd\n)\n.d\nexport class Foo {\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-decorator02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-decorator02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  @\n  (\n    d\n  )\n  @\n  (\n    d\n  )\n    .d\n  export class Foo {\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-decorator02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-enum01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-enum01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nenum\nA\n{\na\n,\nb\n}\n\nconst\nenum\nB\n{\na\n=\n1\n,\n// [ Computed property names are not allowed in enums.\nb\n// ]\n=\n2\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-enum01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-enum01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  enum\n    A\n  {\n    a\n    ,\n    b\n  }\n\n  const\n  enum\n    B\n  {\n    a\n      =\n      1\n    ,\n    // [ Computed property names are not allowed in enums.\n    b\n      // ]\n      =\n      2\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-enum01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-function01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-function01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass\nA\n{\nfn <\nT\n>\n(\ne\n:\nT\n)\n:\nR\n\nfn <\nT\n>\n(\ne\n:\nT\n)\n:\nR\n{\na++\n}\n\nfn2 <\nT extends (A)\n>\n(\n)\n: R\n{\na++\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-function01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-function01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class\n    A\n  {\n    fn <\n      T\n    >\n      (\n        e\n          :\n          T\n      )\n      :\n      R\n\n    fn <\n      T\n    >\n      (\n        e\n          :\n          T\n      )\n      :\n      R\n    {\n      a++\n    }\n\n    fn2 <\n      T extends (A)\n    >\n      (\n      )\n      : R\n    {\n      a++\n    }\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-function01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-function02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-function02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ndeclare function\nfoo\n(\narg1: string,\narg2: string\n)\n:\narg1 is\nstring;\nfunction\n*\nbar() {}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-function02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-function02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  declare function\n    foo\n    (\n      arg1: string,\n      arg2: string\n    )\n    :\n    arg1 is\n      string;\n  function\n    *\n    bar() {}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-function02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-export01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-export01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport\nfoo\n=\nrequire\n(\n'bar'\n)\n;\nexport\n=\nfoo\n;\n\nexport\nas\nnamespace\na\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-export01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-export01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import\n    foo\n      =\n      require\n        (\n          'bar'\n        )\n  ;\n  export\n    =\n    foo\n;\n\n  export\n    as\n    namespace\n    a\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-export01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-type01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-type01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type Props = {\n    children: import('svelte').Snippet,\n  }\n\nconst { children }: Props = $props();\n</script>\n\n{@render children()}\n\n<!-- tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-type01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type Props = {\n    children: import('svelte').Snippet,\n  }\n\n  const { children }: Props = $props();\n</script>\n\n{@render children()}\n\n<!-- tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-import-type01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ninterface I\n{\nfoo\n?\n:\nnumber\n}\ninterface I2\nextends\nI\n{\nbar\n:\nstring\n}\nclass\nImpl\nextends\nE\nimplements\nI2\n,\nI\n{\npublic foo\n=\n42\nprotected get\nbar\n(\n)\n{\nreturn 'abc'\n}\n}\n\nclass\nImpl2\nextends\nE\nimplements\nI2\n,\nI\n{\npublic foo\n=\n42\nprotected get\nbar\n(\n)\n{\nreturn 'abc'\n}\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-interface01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  interface I\n  {\n    foo\n      ?\n      :\n      number\n  }\n  interface I2\n    extends\n      I\n  {\n    bar\n      :\n      string\n  }\n  class\n    Impl\n    extends\n      E\n    implements\n      I2\n      ,\n      I\n  {\n    public foo\n      =\n      42\n    protected get\n    bar\n      (\n      )\n    {\n      return 'abc'\n    }\n  }\n\n  class\n    Impl2\n    extends\n      E\n    implements\n      I2\n      ,\n      I\n  {\n    public foo\n      =\n      42\n    protected get\n    bar\n      (\n      )\n    {\n      return 'abc'\n    }\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-interface01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ninterface A {\nfn\n?\n(\na\n:\nstring\n)\n:\nnumber\n}\n\ninterface B {\n[\nk\n:\nstring\n]\n:\nstring[\n];\n}\n\ninterface C {\n<\nT\nextends\nU\n>\n(\ne\n:\nE,\n)\n:\nR\n;\n}\n\ninterface D {\nnew\n(\narg\n:\nreadonly\nstring[\n]\n)\n:\nvoid\n;\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-interface02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  interface A {\n    fn\n      ?\n      (\n        a\n          :\n          string\n      )\n      :\n      number\n  }\n\n  interface B {\n    [\n      k\n        :\n        string\n    ]\n      :\n      string[\n      ];\n  }\n\n  interface C {\n    <\n      T\n        extends\n          U\n    >\n      (\n        e\n          :\n          E,\n      )\n      :\n      R\n    ;\n  }\n\n  interface D {\n    new\n      (\n        arg\n          :\n          readonly\n            string[\n            ]\n      )\n      :\n      void\n    ;\n  }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-interface02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ninterface Foo\n<\nT\n>\nextends\nBar\n<\nT\n>\n{ }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-interface03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-interface03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  interface Foo\n    <\n      T\n    >\n    extends\n      Bar\n        <\n          T\n        >\n  { }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-interface03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-static-block01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-static-block01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass Foo {\nstatic {\nfoo(\narg\n)\n}\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-static-block01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class Foo {\n    static {\n      foo(\n        arg\n      )\n    }\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-template-literal-type01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-template-literal-type01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype T =\n`foo`\n;\ntype U = \n`foo${\n'bar'\n}`\n;\ntype Color = \"red\" | \"blue\";\ntype Quantity = \"one\" | \"two\";\ntype SeussFish = \n`${\nQuantity\n| \nColor\n} fish`\n;\ntype EnthusiasticGreeting<T extends string> = \n`${\nUppercase<\nT\n>\n} - ${\nLowercase<\nT\n>\n} - ${\nCapitalize<\nT\n>\n} - ${\nUncapitalize<\nT\n>\n}`\n;\ntype HELLO = EnthusiasticGreeting<\"heLLo\">;\n\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-template-literal-type01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-template-literal-type01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type T =\n    `foo`\n  ;\n  type U = \n    `foo${\n      'bar'\n    }`\n  ;\n  type Color = \"red\" | \"blue\";\n  type Quantity = \"one\" | \"two\";\n  type SeussFish = \n    `${\n      Quantity\n      | \n      Color\n    } fish`\n  ;\n  type EnthusiasticGreeting<T extends string> = \n    `${\n      Uppercase<\n        T\n      >\n    } - ${\n      Lowercase<\n        T\n      >\n    } - ${\n      Capitalize<\n        T\n      >\n    } - ${\n      Uncapitalize<\n        T\n      >\n    }`\n  ;\n  type HELLO = EnthusiasticGreeting<\"heLLo\">;\n\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-template-literal-type01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nconst\nA\n:\nT\n=\n{\n} as\nany\n\ntype b\n=\n(\na\n:\nT\n,\nb\n:\nT\n)\n=>\nboolean\n\ntype C\n=\nD<\nE\n>\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-annotation01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  const\n    A\n      :\n      T\n      =\n      {\n      } as\n        any\n\n  type b\n    =\n    (\n      a\n        :\n        T\n      ,\n      b\n        :\n        T\n    )\n      =>\n      boolean\n\n  type C\n    =\n    D<\n      E\n    >\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-annotation01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype T\n=\n{\na\n:\nnumber\nb\n?\n:\nstring\nc\n?\nd\n}\nconst o\n:\nA[\n] = []\n\nconst v\n=\nb!\n\nlet\nx\n=\n10 as\nconst\n;\n\nlet\nx\n=\n<\nconst\n>\n10\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-annotation02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type T\n    =\n    {\n      a\n        :\n        number\n      b\n        ?\n        :\n        string\n      c\n        ?\n      d\n    }\n  const o\n    :\n    A[\n    ] = []\n\n  const v\n    =\n    b!\n\n  let\n    x\n      =\n      10 as\n        const\n  ;\n\n  let\n    x\n      =\n      <\n        const\n      >\n        10\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-annotation02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nlet x:\nnew\n(\n)\n=>\nvoid\n;\n\nlet y:\n[\na\n:\nstring\n,\n...\nb\n:\nnumber[\n]\n]\n\nvar\n[\nfoo\n,\nbar\n]\n:\nany [\n]\n= arr\n\n\nvar\n{\nfoo\n,\nbar\n}\n:\n{\nfoo:\nnumber\n}\n= obj\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-annotation03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-annotation03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  let x:\n    new\n      (\n      )\n      =>\n      void\n  ;\n\n  let y:\n    [\n      a\n        :\n        string\n      ,\n      ...\n        b\n          :\n          number[\n          ]\n    ]\n\n  var\n    [\n      foo\n      ,\n      bar\n    ]\n      :\n      any [\n      ]\n      = arr\n\n\n  var\n    {\n      foo\n      ,\n      bar\n    }\n      :\n      {\n        foo:\n          number\n      }\n      = obj\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-annotation03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport\ntype\nFoo\nfrom\n'foo'\nimport\ntype\n{\nFoo\n}\nfrom\n'foo';\n\nexport\ntype Foo = {}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import\n    type\n    Foo\n  from\n    'foo'\n  import\n    type\n    {\n      Foo\n    }\n  from\n    'foo';\n\n  export\n    type Foo = {}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport\n{\ntype\nFoo\n}\nfrom\n'foo';\nexport\n{\ntype\nBar\n}\nfrom\n'bar';\nexport\n{\ntype\nBaz\n}\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import\n  {\n    type\n    Foo\n  }\n  from\n    'foo';\n  export\n  {\n    type\n    Bar\n  }\n  from\n    'bar';\n  export\n  {\n    type\n    Baz\n  }\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport\n{\ntype\nFoo\nas Foo2\n}\nfrom\n'foo';\nexport\n{\ntype\nBar\nas Bar2\n}\nfrom\n'bar';\nexport\n{\ntype\nBaz\nas Baz2\n}\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import\n  {\n    type\n    Foo\n      as Foo2\n  }\n  from\n    'foo';\n  export\n  {\n    type\n    Bar\n      as Bar2\n  }\n  from\n    'bar';\n  export\n  {\n    type\n    Baz\n      as Baz2\n  }\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-type-only-import-export02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-parameters01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-parameters01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nfoo\n<\nT\n,\nU\n>\n(\narg\n)\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-parameters01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  foo\n    <\n      T\n      ,\n      U\n    >\n    (\n      arg\n    )\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-parameters02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-parameters02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nconst foo = new\nFoo\n<\nT\n,\nU\n>\n(\narg\n)\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-type-parameters02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  const foo = new\n    Foo\n      <\n        T\n        ,\n        U\n      >\n      (\n        arg\n      )\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 14 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 74\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype a =\n'a'\n|\n'b'\ntype b = 'a'\n|\n'b'\n\nexport\ntype A\n=\n|\nB\n.\nC\n|\nD\n|\nExclude<\nE\n,\n{\nfoo\n: F[\n\"g\"\n]\n}\n>\ntype H =\n|\n(\nExclude<\nI\n,\nJ\n>\n&\n{\nk\n:\nK\n}\n)\n|\nL\ntype M\n<\nT\nextends\nL\n=\nN\n>\n=\n{\n[\nkey\nin\nO\n]\n:\nT extends\n{\np\n:\nP\n}\n?\nT\n:\nnever\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-types01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type a =\n    'a'\n    |\n    'b'\n  type b = 'a'\n    |\n    'b'\n\n  export\n    type A\n      =\n      |\n      B\n        .\n        C\n      |\n      D\n      |\n      Exclude<\n        E\n        ,\n        {\n          foo\n            : F[\n              \"g\"\n            ]\n        }\n      >\n  type H =\n    |\n    (\n      Exclude<\n        I\n        ,\n        J\n      >\n      &\n      {\n        k\n          :\n          K\n      }\n    )\n    |\n    L\n  type M\n    <\n      T\n        extends\n          L\n            =\n            N\n    >\n    =\n    {\n      [\n        key\n          in\n          O\n      ]\n      :\n      T extends\n        {\n          p\n            :\n            P\n        }\n        ?\n          T\n        :\n          never\n    }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-types01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 54\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 55\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 56\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 57\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 58\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 59\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 60\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 61\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 62\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 63\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 64\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 65\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 66\n  column: 1\n  suggestions: null\n- message: Expected indentation of 14 spaces but found 0 spaces.\n  line: 67\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 68\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 69\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 70\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 71\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 72\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 73\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype T\n=\n[\nnumber\n,\nnumber\n]\n\ntype A\n=\nkeyof\nT\ntype B\n=\ntypeof\nC\n\ntype D = (v)\n=>\nv is\nnumber\n\ntype E = [\nnumber,\nstring?,\nboolean?\n]\n|\n[\n{\n}\n,\n[\nnumber?\n]\n|\nnull\n&\nboolean[\n]\n]\n&\n{\n}\n\ntype F<T> =\nT extends\n(\ninfer\nU\n)[\n]\n?\nU\n:\nT extends\ninfer\nU\n?\nU\n:\nT extends\nPromise<\ninfer\nU\n>\n?\nU\n:\nT\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-types02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type T\n    =\n    [\n      number\n      ,\n      number\n    ]\n\n  type A\n    =\n    keyof\n      T\n  type B\n    =\n    typeof\n      C\n\n  type D = (v)\n    =>\n    v is\n      number\n\n  type E = [\n    number,\n    string?,\n    boolean?\n  ]\n    |\n    [\n      {\n      }\n      ,\n      [\n        number?\n      ]\n      |\n      null\n      &\n      boolean[\n      ]\n    ]\n    &\n    {\n    }\n\n  type F<T> =\n    T extends\n      (\n        infer\n          U\n      )[\n      ]\n      ?\n        U\n      :\n        T extends\n          infer\n            U\n      ?\n        U\n      :\n        T extends\n          Promise<\n            infer\n              U\n          >\n      ?\n        U\n      :\n        T\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-types02-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype T\n=\nU\n|\nnull\n\ntype V =\nT!\n\ntype A =\nimport\n(\n'foo'\n)\n.\nB<\nT\n>\n;\nimportFn\n(\n'foo'\n)\n.\nB\n\nfunction\nfoo\n(\narg\n:\nreadonly\nstring[\n]\n)\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-types03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-types03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type T\n    =\n    U\n    |\n    null\n\n  type V =\n    T!\n\n  type A =\n    import\n      (\n        'foo'\n      )\n      .\n      B<\n        T\n      >\n  ;\n  importFn\n    (\n      'foo'\n    )\n    .\n    B\n\n  function\n    foo\n    (\n      arg\n        :\n        readonly\n          string[\n          ]\n    )\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-types03-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-union01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-union01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype A =\n| a\n| b\n| c\n| d\n\n\ntype T =\na\n|\nb\ntype U =\n|\na\n|\nb\ntype V =\na\n&\nb\ntype W =\n&\na\n&\nb\ntype X =\n&\n(\na\n|\nb\n)\n\ntype T =\na\n| b\ntype U =\n| a\n| b\ntype V =\na\n& b\ntype W =\n& a\n& b\ntype X =\n&\n(\na\n| b\n)\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-union01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-union01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type A =\n    | a\n    | b\n    | c\n    | d\n\n\n  type T =\n    a\n    |\n    b\n  type U =\n    |\n    a\n    |\n    b\n  type V =\n    a\n    &\n    b\n  type W =\n    &\n    a\n    &\n    b\n  type X =\n    &\n    (\n      a\n      |\n      b\n    )\n\n  type T =\n    a\n    | b\n  type U =\n    | a\n    | b\n  type V =\n    a\n    & b\n  type W =\n    & a\n    & b\n  type X =\n    &\n    (\n      a\n      | b\n    )\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-union01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-union02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 15\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 16\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 17\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 19\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 21\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 49\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 50\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 51\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 52\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 53\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-union02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\ntype A = | a\n| b\n| c\n| d\n\n\ntype T =a\n|\nb\n|\nc\ntype U = | c\n|\na\n|\nb\ntype V = c &\na\n&\nb\ntype W = & c\n&\na\n&\nb\ntype X = c\n&\n(\na\n|\nb\n)\n\ntype T = c |\na\n| b\ntype U = | c\n| a\n| b\ntype V = c\n& a\n& b\ntype W = c\n& a\n& b\ntype X = c\n&\n(\na\n| b\n)\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-union01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts/ts-union02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type A = | a\n    | b\n    | c\n    | d\n\n\n  type T =a\n    |\n    b\n    |\n    c\n  type U = | c\n    |\n    a\n    |\n    b\n  type V = c &\n    a\n    &\n    b\n  type W = & c\n    &\n    a\n    &\n    b\n  type X = c\n    &\n    (\n      a\n      |\n      b\n    )\n\n  type T = c |\n    a\n    | b\n  type U = | c\n    | a\n    | b\n  type V = c\n    & a\n    & b\n  type W = c\n    & a\n    & b\n  type X = c\n    &\n    (\n      a\n      | b\n    )\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-union01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-abstract-accessor-property-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-abstract-accessor-property-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nabstract class Foo {\nabstract accessor\nfoo:\nnumber\n// parser v5 does not parse value.\n//    =\n//    1\n;\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-abstract-accessor-property-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  abstract class Foo {\n    abstract accessor\n    foo:\n      number\n    // parser v5 does not parse value.\n//    =\n//    1\n    ;\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass Foo {\naccessor\nfoo\n;\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class Foo {\n    accessor\n    foo\n    ;\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass Foo {\naccessor\nfoo\n=\n2\n;\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class Foo {\n    accessor\n    foo\n      =\n      2\n    ;\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass Foo {\ndeclare accessor\nfoo:\nnumber\n;\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class Foo {\n    declare accessor\n    foo:\n      number\n    ;\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property04-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property04-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass Foo {\noverride accessor\nfoo\n=\n2\n;\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property04-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class Foo {\n    override accessor\n    foo\n      =\n      2\n    ;\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property05-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property05-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nclass Foo {\naccessor\n[\n1\n]\n=\n2\n;\n}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-accessor-property05-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  class Foo {\n    accessor\n    [\n      1\n    ]\n      =\n      2\n    ;\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport foo from \"./foo.json\" assert\n{\ntype\n:\n\"json\"\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion01-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import foo from \"./foo.json\" assert\n    {\n      type\n        :\n        \"json\"\n    }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion01-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion01-requirements.json",
    "content": "{\n\t\"@typescript-eslint/parser\": \"<6.11.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport(\n\"./foo.json\",\n{\nassert\n:\n{\ntype\n:\n\"json\" \n}\n}\n)\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion02-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import(\n    \"./foo.json\",\n    {\n      assert\n        :\n        {\n          type\n            :\n            \"json\" \n        }\n    }\n  )\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion02-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nexport * from \"mod\" assert\n{\ntype\n:\n\"json\" \n}\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion03-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  export * from \"mod\" assert\n    {\n      type\n        :\n        \"json\" \n    }\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion03-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion03-requirements.json",
    "content": "{\n\t\"@typescript-eslint/parser\": \"<6.11.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion04-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion04-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nexport { foo } from \"mod\" assert\n{ \ntype\n:\n\"json\"\n}\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion04-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion04-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  export { foo } from \"mod\" assert\n    { \n      type\n        :\n        \"json\"\n    }\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-assertion04-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-assertion04-requirements.json",
    "content": "{\n\t\"@typescript-eslint/parser\": \"<6.11.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport foo from \"./foo.json\" with\n{\ntype\n:\n\"json\"\n}\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes01-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import foo from \"./foo.json\" with\n    {\n      type\n        :\n        \"json\"\n    }\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes01-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes01-requirements.json",
    "content": "{\n\t\"typescript\": \">=5.3.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes02-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 10 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 10\n  column: 1\n  suggestions: null\n- message: Expected indentation of 12 spaces but found 0 spaces.\n  line: 11\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 12\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 13\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 14\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nimport(\n\"./foo.json\",\n{\nassert\n:\n{\ntype\n:\n\"json\" \n}\n}\n)\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes02-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes02-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  import(\n    \"./foo.json\",\n    {\n      assert\n        :\n        {\n          type\n            :\n            \"json\" \n        }\n    }\n  )\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes02-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes03-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes03-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nexport * from \"mod\" with\n{\ntype\n:\n\"json\" \n}\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes03-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes03-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  export * from \"mod\" with\n    {\n      type\n        :\n        \"json\" \n    }\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes03-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes03-requirements.json",
    "content": "{\n\t\"typescript\": \">=5.3.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes04-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 8 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 8\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 9\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes04-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nexport { foo } from \"mod\" with\n{ \ntype\n:\n\"json\"\n}\n;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes04-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes04-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  export { foo } from \"mod\" with\n    { \n      type\n        :\n        \"json\"\n    }\n  ;\n</script>\n\n<!--tests/fixtures/rules/indent/invalid/ts/ts-import-attributes04-input-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-import-attributes04-requirements.json",
    "content": "{\n\t\"typescript\": \">=5.3.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-instantiation-expression01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-instantiation-expression01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nconst ErrorMap = Map\n<\nstring,\nError\n>;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-instantiation-expression01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  const ErrorMap = Map\n    <\n      string,\n      Error\n    >;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-satisfies-operators01-errors.yaml",
    "content": "- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected indentation of 6 spaces but found 0 spaces.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Expected indentation of 2 spaces but found 0 spaces.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Expected indentation of 4 spaces but found 0 spaces.\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-satisfies-operators01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\nvar a =\n{} satisfies\nFoo\nvar b =\n{} satisfies Bar\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/ts-v5/ts-satisfies-operators01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  var a =\n    {} satisfies\n      Foo\n  var b =\n    {} satisfies Bar\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/valid/indent-script-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const a = \"indent-script-input.svelte\"\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/valid/inline-style-tag-input.svelte",
    "content": "<svg>\n  <style>\n    /* prettier-ignore */\n    .test {\n      fill: red;\n    }\n  </style>\n</svg>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/valid/pug01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  export const hello = 'world';\n</script>\n\n<template lang=\"pug\">\n  div Posts +each('posts as post')\n    a(href=\"{ post.url }\") {post.title}\n</template>\n\n<style src=\"./style.scss\"></style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/valid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  let text = \"abc\"\n  const maxlength = 42\n  const attrs = { disabled: true }\n  function click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"text\"\n  class=\"\n    a\n    b\n  \"\n  bind:value={text}\n  {maxlength}\n  {...attrs}\n  readonly />\n<!-- prettier-ignore -->\n<button\n  type=\"button\"\n  on:click={click}\n  {maxlength}\n  {...attrs}>\n  CLICK ME!\n</button>\n<!-- prettier-ignore -->\n<div\n  data-attr\n>\n  <div\n    data-attr\n  >\n    <div\n      data-attr\n    >\n      <input\n        type\n          =\n          \"text\"\n        class\n          =\"\n            a\n            b\n          \"\n        bind:value\n          =\n          {\n            text\n          }\n        {\n          maxlength\n        }\n        {\n          ...attrs\n        }\n        readonly\n      />\n      <!-- prettier-ignore -->\n      <button\n        type=\"button\"\n        on:click={\n          click\n        }\n        {\n          maxlength\n        }\n        {\n          ...attrs\n        }\n      >\n        CLICK\n        ME!\n      </button\n      >\n    </div\n    >\n  </div\n  >\n  <div\n    data-attr\n  >\n  </div\n  >\n</div\n>\n\n<!--tests/fixtures/rules/indent/invalid/test01-input.svelte-->\n\n<!-- prettier-ignore -->\n<style>\n.my-class\n{\n}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script lang=\"ts\">\n  type Props = {\n    children: import('svelte').Snippet,\n  }\n\n  const { children }: Props = $props();\n</script>\n\n{@render children()}\n\n<!-- tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/indent/valid/ts/ts-import-type01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/await/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/await/test01-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (async () => {\n\t\ta = a + 1;\n\t\tawait doSomething();\n\t\ta = a + 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 6\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test01-input.svelte",
    "content": "<script>\n\tconst fetch = () => new Promise((resolve) => setTimeout(resolve, 100));\n\tlet a = 0;\n\n\t$: fetch().then(() => {\n\t\ta = a + 1;\n\t});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test02-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 8\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `a`.\n  line: 14\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test02-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\tconst fetch = async () => {\n\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t};\n\tconst doSomething = () => {\n\t\tfetch().then(() => {\n\t\t\ta += 1;\n\t\t});\n\t};\n\n\t$: (async () => {\n\t\tconsole.log(a);\n\t\tawait doSomething();\n\t})();\n\n\t$: (async () => {\n\t\t// should not report here\n\t\tawait doSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test03-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `a`.\n  line: 13\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test03-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\tconst fetch = async () => {\n\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t};\n\tconst doSomething = async () => {\n\t\tawait fetch();\n\t\ta += 1;\n\t};\n\n\t$: (async () => {\n\t\tconsole.log(a);\n\t\tawait doSomething();\n\t})();\n\n\t$: (async () => {\n\t\t// should not report here\n\t\tawait doSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test04-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 6\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 11\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `a`.\n  line: 17\n  column: 9\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `a`.\n  line: 18\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test04-input.svelte",
    "content": "<script>\n\timport { count } from './store.js';\n\tlet a = 0;\n\tconst doSomething = async () => {\n\t\tawait fetchFromServer();\n\t\ta += 1;\n\t\t$count += 1;\n\t};\n\n\tconst doSomething2 = () => {\n\t\ta += 1;\n\t\t$count += 1;\n\t};\n\n\t$: (async () => {\n\t\tconsole.log(a);\n\t\tawait doSomething();\n\t\tdoSomething2();\n\t})();\n\n\t$: (async () => {\n\t\t// should not report here\n\t\tawait doSomething();\n\t\tdoSomething2();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test05-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 6\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `a`.\n  line: 12\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test05-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\tlet obj = { a: 0 };\n\tconst doSomething = async () => {\n\t\tawait fetchFromServer();\n\t\ta += 1;\n\t\tobj.a += 1;\n\t};\n\n\t$: (async () => {\n\t\tconsole.log(a);\n\t\tawait doSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test06-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 5\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `obj`.\n  line: 9\n  column: 9\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 10\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test06-input.svelte",
    "content": "<script>\n\tlet obj = { a: 0 };\n\tconst doSomething = async () => {\n\t\tawait fetchFromServer();\n\t\tobj.a += 1;\n\t};\n\n\t$: (async () => {\n\t\tawait doSomething();\n\t\tobj.a += 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test07-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 5\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `$store`.\n  line: 11\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test07-input.svelte",
    "content": "<script>\n\timport { store } from './store.js';\n\n\tconst doSomething = () => {\n\t\t$store += 1;\n\t};\n\n\t$: (async () => {\n\t\tconsole.log($store);\n\t\tawait fetch();\n\t\tdoSomething();\n\t})();\n\n\t$: (async () => {\n\t\t// should not report here\n\t\tawait fetch();\n\t\tdoSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test08-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 6\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop because this function\n    may update `foo`.\n  line: 12\n  column: 9\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 13\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test08-input.svelte",
    "content": "<script>\n\tlet foo = { obj: 1 };\n\n\tconst doSomething = async () => {\n\t\tawait fetchFromServer();\n\t\tfoo.obj += 1;\n\t};\n\n\t$: (async () => {\n\t\tconst obj = { a: 0 };\n\t\tconsole.log(obj);\n\t\tawait doSomething();\n\t\tfoo.obj += 1;\n\t\tobj.a = 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test09-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 10\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test09-input.svelte",
    "content": "<script>\n\tlet obj = { a: 0 };\n\n\tconst doSomething = async () => {\n\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t\treturn 1;\n\t};\n\n\t$: (async () => {\n\t\tobj.a += await doSomething((obj.a += 1));\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test10-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 9\n  column: 28\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test10-input.svelte",
    "content": "<script>\n\tlet obj = { a: 0 };\n\n\tconst doSomething = (a, b) => {\n\t\tconsole.log({ a, b });\n\t};\n\n\t$: (async () => {\n\t\tdoSomething((await 'a', (obj.a += 1)));\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test11-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 8\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/function-call/test11-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: {\n\t\ta += 1;\n\t\tvoid (async () => {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t\t\ta += 1;\n\t\t})();\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 6\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 11\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test01-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (() => {\n\t\tPromise.resolve().then(() => {\n\t\t\ta = a + 1;\n\t\t\ta += 1;\n\t\t});\n\n\t\tPromise.resolve().catch(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test02-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 10\n  column: 5\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 13\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test02-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: {\n\t\ta = a + 1;\n\t\tnew Promise((resolve, reject) => {\n\t\t\t/** do something */\n\t\t})\n\t\t\t.then(() => {\n\t\t\t\ta = a + 1;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\ta = a + 1;\n\t\t\t});\n\t\ta = a + 1;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test03-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 8\n  column: 5\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 11\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test03-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (() => {\n\t\ta = a + 1;\n\t\tPromise.all([])\n\t\t\t.then(() => {\n\t\t\t\ta = a + 1;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\ta = a + 1;\n\t\t\t});\n\t\ta = a + 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test04-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test04-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (async () => {\n\t\ta = a + 1;\n\t\tawait Promise.resolve();\n\t\ta = a + 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test05-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 5\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 10\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test05-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (() => {\n\t\tPromise.resolve()\n\t\t\t.catch(() => {\n\t\t\t\ta = a + 1;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\ta = a + 1;\n\t\t\t});\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test06-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 5\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 10\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/promise/test06-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (() => {\n\t\tPromise.resolve()\n\t\t\t.catch(() => {\n\t\t\t\ta = a + 1;\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\ta = a + 1;\n\t\t\t});\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/queueMicrotask/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 13\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/queueMicrotask/test01-input.svelte",
    "content": "<script>\n\tconst queueMicrotask2 = queueMicrotask;\n\tlet a = 0;\n\n\t$: {\n\t\tqueueMicrotask(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: {\n\t\tqueueMicrotask2(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/setInterval/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 7\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 13\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/setInterval/test01-input.svelte",
    "content": "<script>\n\tconst setInterval2 = setInterval;\n\tlet a = 0;\n\n\t$: {\n\t\tsetInterval(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: {\n\t\tsetInterval2(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/setTimeout/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 11\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 17\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/setTimeout/test01-input.svelte",
    "content": "<script>\n\tconst setTimeout2 = setTimeout;\n\tlet a = 0;\n\n\tfunction doSomething(fn) {\n\t\tfn();\n\t}\n\n\t$: {\n\t\tsetTimeout(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: {\n\t\tsetTimeout2(() => {\n\t\t\ta = a + 1;\n\t\t});\n\n\t\tdoSomething(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/setTimeout/test02-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 5\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/setTimeout/test02-input.svelte",
    "content": "<script>\n\timport { store } from './store.js';\n\n\t$: setTimeout(() => {\n\t\t$store += 1;\n\t}, 100);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/tick/test01-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 8\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 14\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 20\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 25\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/tick/test01-input.svelte",
    "content": "<script>\n\timport { tick } from 'svelte';\n\tconst tick2 = tick;\n\tlet a = 0;\n\n\t$: {\n\t\ttick(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: {\n\t\ttick2(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: (async () => {\n\t\tawait tick();\n\t\ta = a + 1;\n\t})();\n\n\t$: (async () => {\n\t\tawait tick2();\n\t\ta = a + 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/tick/test02-errors.yaml",
    "content": "- message: Possibly it may occur an infinite reactive loop.\n  line: 17\n  column: 4\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 23\n  column: 3\n  suggestions: null\n- message: Possibly it may occur an infinite reactive loop.\n  line: 28\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/invalid/tick/test02-input.svelte",
    "content": "<script>\n\timport { tick as tick2 } from 'svelte';\n\tlet a = 0;\n\n\tfunction tick(fn) {\n\t\tfn();\n\t}\n\n\t$: {\n\t\ttick(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: {\n\t\ttick2(() => {\n\t\t\ta = a + 1;\n\t\t});\n\t}\n\n\t$: (async () => {\n\t\tawait tick();\n\t\ta = a + 1;\n\t})();\n\n\t$: (async () => {\n\t\tawait tick2();\n\t\ta = a + 1;\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/recursive-reference-input.svelte",
    "content": "<script>\n\t$: {\n\t\tconst foo = (recurse) => (recurse ? foo(false) : undefined);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test01-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (async () => {\n\t\ta = a + 1;\n\t\ta += 1;\n\t\tawait new Promise((resolve) => {});\n\t})();\n\n\t$: (async () => {\n\t\tlet a = 0;\n\t\tawait new Promise((resolve) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\ta = a + 1;\n\t\t\t\ta += 1;\n\t\t\t}, 100);\n\t\t});\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test02-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\tconst func = () => {\n\t\tsetTimeout(() => {\n\t\t\ta = a + 1;\n\t\t}, 100);\n\t};\n\t$: func();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test03-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\t$: (async () => {\n\t\tawait doSomething((a += 1));\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test04-input.svelte",
    "content": "<script>\n\tlet list = [0];\n\n\t$: (async () => {\n\t\tawait doSomething();\n\t\tlist.push(list.length);\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test05-input.svelte",
    "content": "<script>\n\timport { store } from './store.js';\n\n\tconst doSomething = () => {\n\t\t$store += 1;\n\t};\n\n\t$: (async () => {\n\t\tawait doSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test06-input.svelte",
    "content": "<script>\n\tlet obj = { a: 0 };\n\n\tconst doSomething = async () => {\n\t\tobj.a += 1;\n\t\tawait fetch();\n\t};\n\n\t$: (async () => {\n\t\tobj.a += 1;\n\t\tawait doSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test07-input.svelte",
    "content": "<script>\n\tlet obj = { a: 0 };\n\n\tconst doSomething = async () => {\n\t\tobj.a += 1;\n\t\tawait fetch();\n\t};\n\n\t$: (async () => {\n\t\tconst doSomething = async () => {\n\t\t\tawait fetch();\n\t\t};\n\t\tobj.a += 1;\n\t\tawait doSomething();\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/infinite-reactive-loop/valid/test08-input.svelte",
    "content": "<script>\n\tlet a = 0;\n\n\tconst func = () => {\n\t\treturn {\n\t\t\tthen: (fun) => fun(),\n\t\t\tcatch: (fun) => fun()\n\t\t};\n\t};\n\n\t$: (() => {\n\t\t// TODO: This is a false positive. we need to check if the `then` or `catch` is `Promise` object's function.\n\t\t// func().then(() => (a += 1))\n\t\t// func().catch(() => (a += 1))\n\t})();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/max3/_config.json",
    "content": "{\n\t\"options\": [{ \"multiline\": 3, \"singleline\": 3 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/max3/test01-errors.yaml",
    "content": "- message: \"'{...attrs}' should be on a new line.\"\n  line: 8\n  column: 50\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/max3/test01-input.svelte",
    "content": "<script>\n\tlet text = 'abc';\n\tconst maxlength = 42;\n\tconst attrs = { disabled: true };\n\tfunction click() {}\n</script>\n\n<input type=\"text\" bind:value={text} {maxlength} {...attrs} readonly />\n<!-- prettier-ignore -->\n<button type=\"button\" on:click={click}\n  {maxlength} {...attrs}>\n  CLICK ME!\n</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/max3/test01-output.svelte",
    "content": "<script>\n\tlet text = 'abc';\n\tconst maxlength = 42;\n\tconst attrs = { disabled: true };\n\tfunction click() {}\n</script>\n\n<input type=\"text\" bind:value={text} {maxlength}\n{...attrs} readonly />\n<!-- prettier-ignore -->\n<button type=\"button\" on:click={click}\n  {maxlength} {...attrs}>\n  CLICK ME!\n</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/test01-errors.yaml",
    "content": "- message: \"'bind:value' should be on a new line.\"\n  line: 8\n  column: 20\n  suggestions: null\n- message: \"'on:click' should be on a new line.\"\n  line: 10\n  column: 23\n  suggestions: null\n- message: \"'{...attrs}' should be on a new line.\"\n  line: 11\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/test01-input.svelte",
    "content": "<script>\n\tlet text = 'abc';\n\tconst maxlength = 42;\n\tconst attrs = { disabled: true };\n\tfunction click() {}\n</script>\n\n<input type=\"text\" bind:value={text} {maxlength} {...attrs} readonly />\n<!-- prettier-ignore -->\n<button type=\"button\" on:click={click}\n  {maxlength} {...attrs}>\n  CLICK ME!\n</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/invalid/test01-output.svelte",
    "content": "<script>\n\tlet text = 'abc';\n\tconst maxlength = 42;\n\tconst attrs = { disabled: true };\n\tfunction click() {}\n</script>\n\n<input type=\"text\"\nbind:value={text} {maxlength} {...attrs} readonly />\n<!-- prettier-ignore -->\n<button type=\"button\"\non:click={click}\n  {maxlength}\n{...attrs}>\n  CLICK ME!\n</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-attributes-per-line/valid/test01-input.svelte",
    "content": "<script>\n\tlet text = 'abc';\n\tconst maxlength = 42;\n\tconst attrs = { disabled: true };\n\tfunction click() {}\n</script>\n\n<!-- prettier-ignore -->\n<input\n  type=\"text\"\n  bind:value={text}\n  {maxlength}\n  {...attrs}\n  readonly />\n<!-- prettier-ignore -->\n<button\n  type=\"button\"\n  on:click={click}\n  {maxlength}\n  {...attrs}>\n  CLICK ME!\n</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/all-blocks-exceed/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 1, \"style\": 1, \"template\": 1 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/all-blocks-exceed/all01-errors.yaml",
    "content": "- message: \"<script> block has too many lines (3). Maximum allowed is 1.\"\n  line: 1\n  column: 1\n  suggestions: null\n- message: \"template block has too many lines (6). Maximum allowed is 1.\"\n  line: 5\n  column: 10\n  suggestions: null\n- message: \"<style> block has too many lines (4). Maximum allowed is 1.\"\n  line: 11\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/all-blocks-exceed/all01-input.svelte",
    "content": "<script>\n\tlet a = 1;\n\tlet b = 2;\n\tlet c = 3;\n</script>\n\n<div>{a}</div>\n<div>{b}</div>\n<div>{c}</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t\tmargin: 0;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/mixed-comment-code/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 1, \"style\": 1, \"skipComments\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/mixed-comment-code/mixed01-errors.yaml",
    "content": "- message: '<script> block has too many lines (2). Maximum allowed is 1.'\n  line: 1\n  column: 1\n  suggestions: null\n- message: '<style> block has too many lines (2). Maximum allowed is 1.'\n  line: 6\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/mixed-comment-code/mixed01-input.svelte",
    "content": "<script>\n\t/* comment */ let x = 1;\n\tlet y = 2;\n</script>\n\n<style>\n\t/* comment */ div { color: red; }\n\t.a { font-size: 12px; }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/script-too-long/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 3 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/script-too-long/script01-errors.yaml",
    "content": "- message: \"<script> block has too many lines (5). Maximum allowed is 3.\"\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/script-too-long/script01-input.svelte",
    "content": "<script>\n\tlet count = 0;\n\tlet name = 'World';\n\tfunction increment() {\n\t\tcount++;\n\t}\n</script>\n\n<h1>Hello {name}</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/skip-not-enough/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 2, \"skipComments\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/skip-not-enough/skip01-errors.yaml",
    "content": "- message: \"<script> block has too many lines (3). Maximum allowed is 2.\"\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/skip-not-enough/skip01-input.svelte",
    "content": "<script>\n\t// Comment 1\n\t// Comment 2\n\tlet a = 1;\n\tlet b = 2;\n\tlet c = 3;\n</script>\n\n<div>Hello</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/style-too-long/_config.json",
    "content": "{\n\t\"options\": [{ \"style\": 5 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/style-too-long/style01-errors.yaml",
    "content": "- message: \"<style> block has too many lines (7). Maximum allowed is 5.\"\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/style-too-long/style01-input.svelte",
    "content": "<script>\n\tlet name = 'World';\n</script>\n\n<h1>Hello {name}</h1>\n\n<style>\n\th1 {\n\t\tcolor: red;\n\t\tfont-size: 2rem;\n\t\tfont-weight: bold;\n\t\tmargin: 0;\n\t\tpadding: 1rem;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/template-too-long/_config.json",
    "content": "{\n\t\"options\": [{ \"template\": 3 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/template-too-long/template01-errors.yaml",
    "content": "- message: \"template block has too many lines (10). Maximum allowed is 3.\"\n  line: 3\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/invalid/template-too-long/template01-input.svelte",
    "content": "<script>\n\tlet name = 'World';\n</script>\n\n<h1>Hello {name}</h1>\n<p>Line 1</p>\n<p>Line 2</p>\n<p>Line 3</p>\n<p>Line 4</p>\n<p>Line 5</p>\n<p>Line 6</p>\n\n<style>\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/default-config.json",
    "content": "{\n\t\"options\": [{ \"script\": 10, \"style\": 10, \"template\": 10 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/default-input.svelte",
    "content": "<script>\n\tlet count = 0;\n\tfunction increment() {\n\t\tcount++;\n\t}\n</script>\n\n<button on:click={increment}>\n\tCount: {count}\n</button>\n\n<style>\n\tbutton {\n\t\tbackground: blue;\n\t\tcolor: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/empty-block/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 1, \"style\": 1, \"template\": 5 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/empty-block/empty01-input.svelte",
    "content": "<script>\n</script>\n\n<div>Hello</div>\n\n<style>\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/no-style/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 5, \"template\": 5 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/no-style/no-style01-input.svelte",
    "content": "<script>\n\tlet name = 'World';\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/only-style/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 10 }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/only-style/only-style01-input.svelte",
    "content": "<script>\n\tlet count = 0;\n\tlet name = 'World';\n\tlet items = ['a', 'b', 'c'];\n\tfunction add() {\n\t\titems.push('d');\n\t}\n\tfunction remove() {\n\t\titems.pop();\n\t}\n</script>\n\n<h1>{name}</h1>\n\n<style>\n\th1 {\n\t\tcolor: red;\n\t\tfont-size: 2rem;\n\t\tfont-weight: bold;\n\t\tmargin: 0;\n\t\tpadding: 1rem;\n\t\ttext-align: center;\n\t\tborder: 1px solid #ccc;\n\t\tborder-radius: 8px;\n\t\tbackground: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/skip-blank-lines/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 4, \"skipBlankLines\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/skip-blank-lines/skip-blank01-input.svelte",
    "content": "<script>\n\tlet count = 0;\n\n\tfunction increment() {\n\n\t\tcount++;\n\n\t}\n</script>\n\n<button on:click={increment}>{count}</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/skip-both/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 4, \"style\": 3, \"template\": 2, \"skipBlankLines\": true, \"skipComments\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/skip-both/skip-both01-input.svelte",
    "content": "<script>\n\t// Comment line 1\n\t// Comment line 2\n\n\t/* Block comment */\n\n\tlet count = 0;\n\tfunction increment() {\n\t\tcount++;\n\t}\n</script>\n\n<!-- HTML comment -->\n\n<button on:click={increment}>{count}</button>\n\n<style>\n\t/* CSS comment */\n\n\tbutton {\n\t\tcolor: red;\n\t}\n\n\t/* Another comment */\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/skip-comments/_config.json",
    "content": "{\n\t\"options\": [{ \"script\": 1, \"style\": 3, \"skipComments\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/max-lines-per-block/valid/skip-comments/skip-comments01-input.svelte",
    "content": "<script>\n\t// This is a comment\n\t/* Another comment */\n\tlet count = 0;\n</script>\n\n<div>{count}</div>\n\n<style>\n\t/* CSS comment */\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"textExpressions\": \"always\",\n\t\t\t\"attributesAndProps\": \"always\",\n\t\t\t\"directiveExpressions\": \"always\",\n\t\t\t\"tags\": {\n\t\t\t\t\"openingBrace\": \"always\",\n\t\t\t\t\"closingBrace\": \"always\"\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/snippet-render01-errors.yaml",
    "content": "- message: Expected 1 space after '{', but not found.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 2\n  column: 16\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 3\n  column: 10\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 4\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/snippet-render01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet foo()}\n{/snippet}\n{@render foo()}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/snippet-render01-output.svelte",
    "content": "<!-- prettier-ignore -->\n{ #snippet foo() }\n{ /snippet }\n{ @render foo() }\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/snippet-render01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/test01-errors.yaml",
    "content": "- message: Expected 1 space after '{', but not found.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 18\n  column: 5\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 19\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 19\n  column: 24\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 19\n  column: 31\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 19\n  column: 37\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 19\n  column: 50\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 19\n  column: 58\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 20\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 20\n  column: 22\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 21\n  column: 8\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 21\n  column: 17\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 22\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 22\n  column: 11\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 23\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 23\n  column: 11\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 24\n  column: 15\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 26\n  column: 16\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 26\n  column: 20\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 26\n  column: 24\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 27\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 27\n  column: 16\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 27\n  column: 20\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 27\n  column: 40\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 27\n  column: 44\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 27\n  column: 48\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 28\n  column: 16\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 28\n  column: 20\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 28\n  column: 26\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 28\n  column: 30\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 28\n  column: 34\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 29\n  column: 16\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 29\n  column: 17\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 29\n  column: 23\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 29\n  column: 24\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 29\n  column: 28\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 31\n  column: 20\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 31\n  column: 24\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 31\n  column: 30\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 32\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 32\n  column: 27\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 32\n  column: 31\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 32\n  column: 37\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 33\n  column: 31\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 33\n  column: 35\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 33\n  column: 41\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 34\n  column: 38\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 34\n  column: 42\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 34\n  column: 48\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 35\n  column: 20\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 35\n  column: 24\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 35\n  column: 30\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 35\n  column: 34\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 35\n  column: 40\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 19\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 37\n  column: 23\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 34\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 37\n  column: 38\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 50\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 37\n  column: 54\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 61\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 38\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 38\n  column: 19\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 38\n  column: 23\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 38\n  column: 34\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 38\n  column: 38\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 38\n  column: 45\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 39\n  column: 29\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 39\n  column: 33\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 39\n  column: 40\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 41\n  column: 30\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 41\n  column: 34\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 41\n  column: 41\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 42\n  column: 24\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 42\n  column: 28\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 42\n  column: 35\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 44\n  column: 25\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 44\n  column: 29\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 44\n  column: 36\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 46\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 46\n  column: 19\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 46\n  column: 23\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 46\n  column: 33\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 46\n  column: 44\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 46\n  column: 51\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 48\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 48\n  column: 17\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 48\n  column: 21\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 48\n  column: 26\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/test01-input.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n{foo}\n<input bind:value={text} this={input} class=\"foo {myClass}\" />\n<input bind:value {id} />\n<input {...attrs} />\n{@html bar}\n{@debug o1}\n{@debug o1, o2}\n\n{#if expression}...{/if}\n{#if expression}...{:else if expression}...{/if}\n{#if expression}...{:else}...{/if}\n{#if expression}{:else}{/if}\n\n{#each list as item}...{/each}\n{#each list as item, index}...{/each}\n{#each list as item (item.key)}...{/each}\n{#each list as item, index (item.key)}...{/each}\n{#each list as item}...{:else}...{/each}\n\n{#await expression}...{:then name}...{:catch name}...{/await}\n{#await expression}...{:then name}...{/await}\n{#await expression then name}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch name}...{/await}\n{#await expression then}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch}...{/await}\n\n{#await expression}...{:then}...{:catch}...{/await}\n\n{#key expression}...{/key}\n\n<!--tests/fixtures/rules/mustache-spacing/invalid/always/test01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always/test01-output.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n{ foo }\n<input bind:value={ text } this={ input } class=\"foo { myClass }\" />\n<input bind:value { id } />\n<input { ...attrs } />\n{ @html bar }\n{ @debug o1 }\n{ @debug o1, o2 }\n\n{ #if expression }...{ /if }\n{ #if expression }...{ :else if expression }...{ /if }\n{ #if expression }...{ :else }...{ /if }\n{ #if expression }{ :else }{ /if }\n\n{ #each list as item }...{ /each }\n{ #each list as item, index }...{ /each }\n{ #each list as item (item.key) }...{ /each }\n{ #each list as item, index (item.key) }...{ /each }\n{ #each list as item }...{ :else }...{ /each }\n\n{ #await expression }...{ :then name }...{ :catch name }...{ /await }\n{ #await expression }...{ :then name }...{ /await }\n{ #await expression then name }...{ /await }\n<!-- prettier-ignore -->\n{ #await expression catch name }...{ /await }\n{ #await expression then }...{ /await }\n<!-- prettier-ignore -->\n{ #await expression catch }...{ /await }\n\n{ #await expression }...{ :then}...{ :catch}...{ /await }\n\n{ #key expression }...{ /key }\n\n<!--tests/fixtures/rules/mustache-spacing/invalid/always/test01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"textExpressions\": \"always\",\n\t\t\t\"attributesAndProps\": \"always\",\n\t\t\t\"directiveExpressions\": \"always\",\n\t\t\t\"tags\": {\n\t\t\t\t\"openingBrace\": \"never\",\n\t\t\t\t\"closingBrace\": \"always-after-expression\"\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/snippet-render01-errors.yaml",
    "content": "- message: Expected 1 space before '}', but not found.\n  line: 2\n  column: 16\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 4\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/snippet-render01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet foo()}\n{/snippet}\n{@render foo()}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/snippet-render01-output.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet foo() }\n{/snippet}\n{@render foo() }\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/snippet-render01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/test01-errors.yaml",
    "content": "- message: Expected 1 space after '{', but not found.\n  line: 18\n  column: 1\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 18\n  column: 5\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 19\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 19\n  column: 24\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 19\n  column: 31\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 19\n  column: 37\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 19\n  column: 50\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 19\n  column: 58\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 20\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 20\n  column: 22\n  suggestions: null\n- message: Expected 1 space after '{', but not found.\n  line: 21\n  column: 8\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 21\n  column: 17\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 22\n  column: 11\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 23\n  column: 11\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 24\n  column: 15\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 26\n  column: 16\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 27\n  column: 16\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 27\n  column: 40\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 28\n  column: 16\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 29\n  column: 16\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 31\n  column: 20\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 32\n  column: 27\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 33\n  column: 31\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 34\n  column: 38\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 35\n  column: 20\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 34\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 37\n  column: 50\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 38\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 38\n  column: 34\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 39\n  column: 29\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 41\n  column: 30\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 46\n  column: 19\n  suggestions: null\n- message: Expected 1 space before '}', but not found.\n  line: 48\n  column: 17\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/test01-input.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n{foo}\n<input bind:value={text} this={input} class=\"foo {myClass}\" />\n<input bind:value {id} />\n<input {...attrs} />\n{@html bar}\n{@debug o1}\n{@debug o1, o2}\n\n{#if expression}...{/if}\n{#if expression}...{:else if expression}...{/if}\n{#if expression}...{:else}...{/if}\n{#if expression}{:else}{/if}\n\n{#each list as item}...{/each}\n{#each list as item, index}...{/each}\n{#each list as item (item.key)}...{/each}\n{#each list as item, index (item.key)}...{/each}\n{#each list as item}...{:else}...{/each}\n\n{#await expression}...{:then name}...{:catch name}...{/await}\n{#await expression}...{:then name}...{/await}\n{#await expression then name}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch name}...{/await}\n{#await expression then}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch}...{/await}\n\n{#await expression}...{:then}...{:catch}...{/await}\n\n{#key expression}...{/key}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/always-after-expression/test01-output.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n{ foo }\n<input bind:value={ text } this={ input } class=\"foo { myClass }\" />\n<input bind:value { id } />\n<input { ...attrs } />\n{@html bar }\n{@debug o1 }\n{@debug o1, o2 }\n\n{#if expression }...{/if}\n{#if expression }...{:else if expression }...{/if}\n{#if expression }...{:else}...{/if}\n{#if expression }{:else}{/if}\n\n{#each list as item }...{/each}\n{#each list as item, index }...{/each}\n{#each list as item (item.key) }...{/each}\n{#each list as item, index (item.key) }...{/each}\n{#each list as item }...{:else}...{/each}\n\n{#await expression }...{:then name }...{:catch name }...{/await}\n{#await expression }...{:then name }...{/await}\n{#await expression then name }...{/await}\n<!-- prettier-ignore -->\n{#await expression catch name }...{/await}\n{#await expression then}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch}...{/await}\n\n{#await expression }...{:then}...{:catch}...{/await}\n\n{#key expression }...{/key}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/snippet-render01-errors.yaml",
    "content": "- message: Expected no space after '{', but found.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 2\n  column: 17\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 3\n  column: 11\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 4\n  column: 16\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/snippet-render01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{ #snippet foo() }\n{ /snippet }\n{ @render foo() }\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/snippet-render01-output.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet foo()}\n{/snippet}\n{@render foo()}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/snippet-render01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/test01-errors.yaml",
    "content": "- message: Expected no space after '{', but found.\n  line: 20\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 20\n  column: 6\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 21\n  column: 19\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 21\n  column: 25\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 21\n  column: 33\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 21\n  column: 40\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 21\n  column: 54\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 21\n  column: 63\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 22\n  column: 19\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 22\n  column: 23\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 23\n  column: 8\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 23\n  column: 18\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 24\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 24\n  column: 12\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 25\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 25\n  column: 12\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 26\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 26\n  column: 16\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 28\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 28\n  column: 17\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 28\n  column: 22\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 28\n  column: 27\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 29\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 29\n  column: 17\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 29\n  column: 22\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 29\n  column: 43\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 29\n  column: 48\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 29\n  column: 53\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 30\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 30\n  column: 17\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 30\n  column: 22\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 30\n  column: 29\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 30\n  column: 34\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 30\n  column: 39\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 31\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 31\n  column: 17\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 31\n  column: 19\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 31\n  column: 26\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 31\n  column: 28\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 31\n  column: 33\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 33\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 33\n  column: 21\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 33\n  column: 26\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 33\n  column: 33\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 34\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 34\n  column: 28\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 34\n  column: 33\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 34\n  column: 40\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 35\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 35\n  column: 32\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 35\n  column: 37\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 35\n  column: 44\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 36\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 36\n  column: 39\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 36\n  column: 44\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 36\n  column: 51\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 37\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 37\n  column: 21\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 37\n  column: 26\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 37\n  column: 33\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 37\n  column: 38\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 37\n  column: 45\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 39\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 39\n  column: 20\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 39\n  column: 25\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 39\n  column: 37\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 39\n  column: 42\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 39\n  column: 55\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 39\n  column: 60\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 39\n  column: 68\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 40\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 40\n  column: 20\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 40\n  column: 25\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 40\n  column: 37\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 40\n  column: 42\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 40\n  column: 50\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 41\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 41\n  column: 30\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 41\n  column: 35\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 41\n  column: 43\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 42\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 42\n  column: 31\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 42\n  column: 36\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 42\n  column: 44\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 43\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 43\n  column: 25\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 43\n  column: 30\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 43\n  column: 38\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 44\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 44\n  column: 26\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 44\n  column: 31\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 44\n  column: 39\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 45\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 45\n  column: 20\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 45\n  column: 25\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 45\n  column: 36\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 45\n  column: 48\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 45\n  column: 56\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 47\n  column: 1\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 47\n  column: 18\n  suggestions: null\n- message: Expected no space after '{', but found.\n  line: 47\n  column: 23\n  suggestions: null\n- message: Expected no space before '}', but found.\n  line: 47\n  column: 29\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/test01-input.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{ foo }\n<input bind:value={ text } this={ input } class=\"foo { myClass }\" />\n<input bind:value { id } />\n<input { ...attrs } />\n{ @html bar }\n{ @debug o1 }\n{ @debug o1, o2 }\n\n{ #if expression }...{ /if }\n{ #if expression }...{ :else if expression }...{ /if }\n{ #if expression }...{ :else }...{ /if }\n{ #if expression }{ :else }{ /if }\n\n{ #each list as item }...{ /each }\n{ #each list as item, index }...{ /each }\n{ #each list as item (item.key) }...{ /each }\n{ #each list as item, index (item.key) }...{ /each }\n{ #each list as item }...{ :else }...{ /each }\n\n{ #await expression }...{ :then name }...{ :catch name }...{ /await }\n{ #await expression }...{ :then name }...{ /await }\n{ #await expression then name }...{ /await }\n{ #await expression catch name }...{ /await }\n{ #await expression then }...{ /await }\n{ #await expression catch }...{ /await }\n{ #await expression }...{ :then}...{ :catch}...{ /await }\n\n{ #key expression }...{ /key }\n</div>\n\n<!--tests/fixtures/rules/mustache-spacing/invalid/test01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/invalid/test01-output.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{foo}\n<input bind:value={text} this={input} class=\"foo {myClass}\" />\n<input bind:value {id} />\n<input {...attrs} />\n{@html bar}\n{@debug o1}\n{@debug o1, o2}\n\n{#if expression}...{/if}\n{#if expression}...{:else if expression}...{/if}\n{#if expression}...{:else}...{/if}\n{#if expression}{:else}{/if}\n\n{#each list as item}...{/each}\n{#each list as item, index}...{/each}\n{#each list as item (item.key)}...{/each}\n{#each list as item, index (item.key)}...{/each}\n{#each list as item}...{:else}...{/each}\n\n{#await expression}...{:then name}...{:catch name}...{/await}\n{#await expression}...{:then name}...{/await}\n{#await expression then name}...{/await}\n{#await expression catch name}...{/await}\n{#await expression then}...{/await}\n{#await expression catch}...{/await}\n{#await expression}...{:then}...{:catch}...{/await}\n\n{#key expression}...{/key}\n</div>\n\n<!--tests/fixtures/rules/mustache-spacing/invalid/test01-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/always/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"textExpressions\": \"always\",\n\t\t\t\"attributesAndProps\": \"always\",\n\t\t\t\"directiveExpressions\": \"always\",\n\t\t\t\"tags\": {\n\t\t\t\t\"openingBrace\": \"always\",\n\t\t\t\t\"closingBrace\": \"always\"\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/always/snippet-render01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{ #snippet foo() }\n{ /snippet }\n{ @render foo() }\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/always/snippet-render01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/always/test01-input.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n<!-- prettier-ignore -->\n<div>\n{ foo }\n<input bind:value={ text } this={ input } class=\"foo { myClass }\" />\n<input bind:value { id } />\n<input { ...attrs } />\n{ @html bar }\n{ @debug o1 }\n{ @debug o1, o2 }\n\n{ #if expression }...{ /if }\n{ #if expression }...{ :else if expression }...{ /if }\n{ #if expression }...{ :else }...{ /if }\n{ #if expression }{ :else }{ /if }\n\n{ #each list as item }...{ /each }\n{ #each list as item, index }...{ /each }\n{ #each list as item (item.key) }...{ /each }\n{ #each list as item, index (item.key) }...{ /each }\n{ #each list as item }...{ :else }...{ /each }\n\n{ #await expression }...{ :then name }...{ :catch name }...{ /await }\n{ #await expression }...{ :then name }...{ /await }\n{ #await expression then name }...{ /await }\n{ #await expression catch name }...{ /await }\n{ #await expression then }...{ /await }\n{ #await expression catch }...{ /await }\n{ #await expression }...{ :then}...{ :catch}...{ /await }\n\n{ #key expression }...{ /key }\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/snippet-render01-input.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet foo()}\n{/snippet}\n{@render foo()}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/snippet-render01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/mustache-spacing/valid/test01-input.svelte",
    "content": "<script>\n\timport A from 'A.svelte';\n\n\tconst foo = 'foo';\n\tlet text = '';\n\tlet value = '';\n\tlet input;\n\tconst myClass = 'my-class';\n\tconst id = 'id';\n\tconst attrs = {};\n\tconst bar = '<div></div>';\n\tconst o1 = 1,\n\t\to2 = 2;\n\tconst expression = true;\n\tconst list = [];\n</script>\n\n{foo}\n<input bind:value={text} this={input} class=\"foo {myClass}\" />\n<input bind:value {id} />\n<input {...attrs} />\n{@html bar}\n{@debug o1}\n{@debug o1, o2}\n\n{#if expression}...{/if}\n{#if expression}...{:else if expression}...{/if}\n{#if expression}...{:else}...{/if}\n{#if expression}{:else}{/if}\n\n{#each list as item}...{/each}\n{#each list as item, index}...{/each}\n{#each list as item (item.key)}...{/each}\n{#each list as item, index (item.key)}...{/each}\n{#each list as item}...{:else}...{/each}\n\n{#await expression}...{:then name}...{:catch name}...{/await}\n{#await expression}...{:then name}...{/await}\n{#await expression then name}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch name}...{/await}\n{#await expression then}...{/await}\n<!-- prettier-ignore -->\n{#await expression catch}...{/await}\n\n{#await expression}...{:then}...{:catch}...{/await}\n\n{#key expression}...{/key}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml",
    "content": "- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 17\n  column: 3\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ton(target, 'focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 18\n  column: 3\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\ton(deepObj.deep.obj.target, 'focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 21\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \ton(window, 'message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 22\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \ton(window, 'message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 23\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \ton(document, 'visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 26\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \ton    (window, 'message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 28\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \ton/* foo */(window, 'message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 31\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \ton(window, 'message', handler, { once: true });\n\n        \t// using spread\n        \twindow.addEventListener(...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 34\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script>\n        \tconst handler = (ev) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \tfunction onClick(event) {\n        \t\tconst target = event.currentTarget;\n\n        \t\tconst deepObj = {\n        \t\t\tdeep: {\n        \t\t\t\tobj: {\n        \t\t\t\t\ttarget\n        \t\t\t\t}\n        \t\t\t}\n        \t\t};\n\n        \t\ttarget.addEventListener('focus', handler);\n        \t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n        \t}\n\n        \taddEventListener('message', handler);\n        \twindow.addEventListener('message', handler);\n        \tdocument.addEventListener('visibilitychange', handler);\n\n        \t// with a load of whitespace\n        \twindow.addEventListener    ('message', handler);\n        \t// with a comment\n        \twindow.addEventListener/* foo */('message', handler);\n\n        \t// with options\n        \twindow.addEventListener('message', handler, { once: true });\n\n        \t// using spread\n        \ton(window, ...params);\n        </script>\n\n        <button onclick={onClick}>Hello</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte",
    "content": "<script>\n\tconst handler = (ev) => {\n\t\tconsole.log(ev);\n\t};\n\n\tfunction onClick(event) {\n\t\tconst target = event.currentTarget;\n\n\t\tconst deepObj = {\n\t\t\tdeep: {\n\t\t\t\tobj: {\n\t\t\t\t\ttarget\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\ttarget.addEventListener('focus', handler);\n\t\tdeepObj.deep.obj.target.addEventListener('focus', handler);\n\t}\n\n\taddEventListener('message', handler);\n\twindow.addEventListener('message', handler);\n\tdocument.addEventListener('visibilitychange', handler);\n\n\t// with a load of whitespace\n\twindow.addEventListener    ('message', handler);\n\t// with a comment\n\twindow.addEventListener/* foo */('message', handler);\n\n\t// with options\n\twindow.addEventListener('message', handler, { once: true });\n\n\t// using spread\n\twindow.addEventListener(...params);\n</script>\n\n<button onclick={onClick}>Hello</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-errors.yaml",
    "content": "- message: Do not use `addEventListener`. Use the `on` function from\n    `svelte/events` instead.\n  line: 6\n  column: 2\n  suggestions:\n    - desc: Use `on` from `svelte/events` instead\n      output: |\n        <script lang=\"ts\">\n        \tconst handler = (ev: Event) => {\n        \t\tconsole.log(ev);\n        \t};\n\n        \ton(window as any, 'message', handler);\n        \t(window.addEventListener as any)('message', handler);\n        </script>\n\n        <div>Hello</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-input.svelte",
    "content": "<script lang=\"ts\">\n\tconst handler = (ev: Event) => {\n\t\tconsole.log(ev);\n\t};\n\n\t(window as any).addEventListener('message', handler);\n\t(window.addEventListener as any)('message', handler);\n</script>\n\n<div>Hello</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/test01-input.svelte",
    "content": "<script>\n\timport { on } from 'svelte/events';\n\n\tconst handler = (ev) => {\n\t\tconsole.log(ev);\n\t};\n\n\tfunction onClick(event) {\n\t\tconst target = event.currentTarget;\n\n\t\ton(target, 'focus', handler);\n\t}\n\n\ton(window, 'message', handler);\n\ton(document, 'visibilitychange', handler);\n\n</script>\n\n<button onclick={onClick}>Hello</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-debug-tags/invalid/debug01-errors.yaml",
    "content": "- message: Unexpected `{@debug}`.\n  line: 11\n  column: 1\n  suggestions:\n    - desc: Remove `{@debug}` from the source\n      messageId: suggestRemove\n      output: |\n        <script>\n        \tlet user = {\n        \t\tfirstname: 'Ada',\n        \t\tlastname: 'Lovelace'\n        \t};\n        </script>\n\n        <input bind:value={user.firstname} />\n        <input bind:value={user.lastname} />\n\n\n\n        <h1>Hello {user.firstname}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-debug-tags/invalid/debug01-input.svelte",
    "content": "<script>\n\tlet user = {\n\t\tfirstname: 'Ada',\n\t\tlastname: 'Lovelace'\n\t};\n</script>\n\n<input bind:value={user.firstname} />\n<input bind:value={user.lastname} />\n\n{@debug}\n\n<h1>Hello {user.firstname}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-debug-tags/invalid/debug02-errors.yaml",
    "content": "- message: Unexpected `{@debug}`.\n  line: 11\n  column: 1\n  suggestions:\n    - desc: Remove `{@debug}` from the source\n      messageId: suggestRemove\n      output: |\n        <script>\n        \tlet user = {\n        \t\tfirstname: 'Ada',\n        \t\tlastname: 'Lovelace'\n        \t};\n        </script>\n\n        <input bind:value={user.firstname} />\n        <input bind:value={user.lastname} />\n\n\n\n        <h1>Hello {user.firstname}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-debug-tags/invalid/debug02-input.svelte",
    "content": "<script>\n\tlet user = {\n\t\tfirstname: 'Ada',\n\t\tlastname: 'Lovelace'\n\t};\n</script>\n\n<input bind:value={user.firstname} />\n<input bind:value={user.lastname} />\n\n{@debug user}\n\n<h1>Hello {user.firstname}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-debug-tags/valid/html-input.svelte",
    "content": "<script>\n\tlet string = `this string contains some <strong>HTML!!!</strong>`;\n</script>\n\n<p>{@html string}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-debug-tags/valid/text-mustash-input.svelte",
    "content": "<script>\n\tlet string = `this string contains some <strong>HTML!!!</strong>`;\n</script>\n\n<p>{string}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-html-tags/invalid/html-errors.yaml",
    "content": "- message: \"`{@html}` can lead to XSS attack.\"\n  line: 5\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-html-tags/invalid/html-input.svelte",
    "content": "<script>\n\tlet string = `this string contains some <strong>HTML!!!</strong>`;\n</script>\n\n<p>{@html string}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-html-tags/valid/debug01-input.svelte",
    "content": "<script>\n\tlet user = {\n\t\tfirstname: 'Ada',\n\t\tlastname: 'Lovelace'\n\t};\n</script>\n\n<input bind:value={user.firstname} />\n<input bind:value={user.lastname} />\n\n{@debug}\n\n<h1>Hello {user.firstname}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-html-tags/valid/debug02-input.svelte",
    "content": "<script>\n\tlet user = {\n\t\tfirstname: 'Ada',\n\t\tlastname: 'Lovelace'\n\t};\n</script>\n\n<input bind:value={user.firstname} />\n<input bind:value={user.lastname} />\n\n{@debug user}\n\n<h1>Hello {user.firstname}!</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-at-html-tags/valid/text-mustash-input.svelte",
    "content": "<script>\n\tlet string = `this string contains some <strong>HTML!!!</strong>`;\n</script>\n\n<p>{string}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/chain01-errors.yaml",
    "content": "- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 5\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 8\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/chain01-input.svelte",
    "content": "<script>\n\tlet foo;\n\n\tconst remove1 = () => {\n\t\tfoo?.remove();\n\t};\n\tconst remove2 = () => {\n\t\t(foo?.remove)();\n\t};\n</script>\n\n<p bind:this={foo}>div</p>\n\n<button on:click={() => remove1()}>Click Me</button>\n<button on:click={() => remove2()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/remove-text01-errors.yaml",
    "content": "- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 9\n  column: 24\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/remove-text01-input.svelte",
    "content": "<script>\n\tlet div;\n\tlet show;\n\n\t// ✓ GOOD\n\tconst toggle = () => (show = !show);\n\n\t// ✗ BAD\n\tconst update = () => (div.textContent = 'foo');\n</script>\n\n<div bind:this={div}>\n\t{#if show}\n\t\tdiv\n\t{/if}\n</div>\n\n<button on:click={() => toggle()}>Click Me (Good)</button>\n<button on:click={() => update()}>Click Me (Bad)</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/remove01-errors.yaml",
    "content": "- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 9\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/remove01-input.svelte",
    "content": "<script>\n\tlet div;\n\tlet show;\n\n\t// ✓ GOOD\n\tconst toggle = () => (show = !show);\n\n\t// ✗ BAD\n\tconst remove = () => div.remove();\n</script>\n\n{#if show}\n\t<div bind:this={div}>div</div>\n{/if}\n\n<button on:click={() => toggle()}>Click Me (Good)</button>\n<button on:click={() => remove()}>Click Me (Bad)</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/svelte-element01-errors.yaml",
    "content": "- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 8\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/svelte-element01-input.svelte",
    "content": "<script>\n\texport let tag = 'div';\n\tlet foo;\n\tlet bar;\n\n\tconst remove = () => {\n\t\tfoo.remove();\n\t\tbar.remove();\n\t};\n</script>\n\n<p bind:this={foo}>div</p>\n<svelte:element this={tag} bind:this={bar}>div</svelte:element>\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/well-known-method01-errors.yaml",
    "content": "- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 6\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 9\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 10\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 11\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 12\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 13\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 14\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 15\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 16\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 17\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 18\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 19\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 20\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/well-known-method01-input.svelte",
    "content": "<script>\n\tlet foo;\n\tlet div;\n\tconst update = () => {\n\t\tconst newNode = document.createElement('div');\n\t\tdiv.appendChild(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild\n\t\tdiv.insertBefore(newNode, foo); // https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore\n\t\tdiv.normalize(); // https://developer.mozilla.org/en-US/docs/Web/API/Node/normalize\n\t\tdiv.removeChild(foo); // https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild\n\t\tdiv.replaceChild(newNode, foo); // https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild\n\t\tdiv.after(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/after\n\t\tdiv.append(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/append\n\t\tdiv.before(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/before\n\t\tdiv.insertAdjacentElement('beforebegin', newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement\n\t\tdiv.insertAdjacentHTML('beforebegin', '<strong>inserted text</strong>'); // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML\n\t\tdiv.insertAdjacentText('beforebegin', 'Foo'); // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentText\n\t\tdiv.prepend(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/prepend\n\t\tdiv.remove(); // https://developer.mozilla.org/en-US/docs/Web/API/Element/remove\n\t\tdiv.replaceChildren(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceChildren\n\t\tdiv.replaceWith(newNode); // https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceWith\n\t};\n</script>\n\n<div bind:this={div}>\n\t<div bind:this={foo} />\n\tdiv\n</div>\n\n<button on:click={() => update()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/well-known-prop01-errors.yaml",
    "content": "- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 4\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 5\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 6\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Don't manipulate the DOM directly. The Svelte runtime can get confused\n    if there is a difference between the actual DOM and the DOM expected by the\n    Svelte runtime.\n  line: 8\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/invalid/well-known-prop01-input.svelte",
    "content": "<script>\n\tlet div;\n\tconst update = () => {\n\t\tdiv.textContent = ''; // https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent\n\t\tdiv.innerHTML = ''; // https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML\n\t\tdiv.outerHTML = ''; // https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML\n\t\tdiv.innerText = ''; // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText\n\t\tdiv.outerText = ''; // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/outerText\n\t};\n</script>\n\n<div bind:this={div}>div</div>\n\n<button on:click={() => update()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/computed-member01-input.svelte",
    "content": "<script>\n\tlet div;\n\tconst remove = () => div[remove]();\n</script>\n\n<div bind:this={div}>div</div>\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/loop01-input.svelte",
    "content": "<script>\n\tconst list = [1, 2, 3];\n\n\tconst remove = () => {\n\t\tfor (const item of list) {\n\t\t\titem.remove();\n\t\t}\n\t};\n</script>\n\n{#each list as item}\n\t<input bind:this={item} />\n{/each}\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/non-bind-this01-input.svelte",
    "content": "<script>\n\tlet foo;\n\tlet bar;\n\n\tconst remove = () => {\n\t\tfoo.remove();\n\t\tbar.remove();\n\t};\n</script>\n\n<input bind:value={foo} />\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/non-element01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet foo;\n\tlet bar;\n\n\tconst remove = () => {\n\t\tfoo.remove();\n\t\tbar.remove();\n\t};\n</script>\n\n<MyComponent bind:this={foo}>div</MyComponent>\n<svelte:component this={MyComponent} bind:this={bar}>div</svelte:component>\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/read-prop01-input.svelte",
    "content": "<script>\n\tlet divElement;\n\tlet height = '';\n\n\t$: if (divElement) height = `${divElement.clientHeight}px`;\n</script>\n\n<div bind:this={divElement} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/read-prop02-input.svelte",
    "content": "<script>\n\tlet divElement;\n\tlet foo = '';\n\n\t$: if (divElement) foo = `${divElement.data.foo}`;\n</script>\n\n<div bind:this={divElement} data-foo=\"Foo\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/remove-text01-input.svelte",
    "content": "<script>\n\tlet div;\n\tlet show;\n\n\t// ✓ GOOD\n\tconst toggle = () => (show = !show);\n</script>\n\n<div bind:this={div}>\n\t{#if show}\n\t\tdiv\n\t{/if}\n</div>\n\n<button on:click={() => toggle()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/remove01-input.svelte",
    "content": "<script>\n\tlet div;\n\tlet show;\n\n\t// ✓ GOOD\n\tconst toggle = () => (show = !show);\n</script>\n\n{#if show}\n\t<div bind:this={div}>div</div>\n{/if}\n\n<button on:click={() => toggle()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/unknown-method01-input.svelte",
    "content": "<script>\n\tlet div;\n\tconst remove = () => div.unknown();\n</script>\n\n<div bind:this={div}>div</div>\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/unknown-prop01-input.svelte",
    "content": "<script>\n\tlet div;\n\tconst remove = () => (div.unknown = '');\n</script>\n\n<div bind:this={div}>div</div>\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dom-manipulating/valid/unknown-var01-input.svelte",
    "content": "<script>\n\tconst remove = () => {\n\t\tunknown.remove();\n\t};\n</script>\n\n<input bind:this={unknown} />\n\n<button on:click={() => remove()}>Click Me</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/invalid/simple-test01-errors.yaml",
    "content": "- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 7\n  column: 11\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/invalid/simple-test01-input.svelte",
    "content": "<script>\n\tlet foo = true;\n</script>\n\n{#if foo}\n\t<div>if</div>\n{:else if foo}\n\t<div>else if</div>\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/invalid/test01-errors.yaml",
    "content": "- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 21\n  column: 11\n  suggestions: null\n- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 31\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/invalid/test01-input.svelte",
    "content": "<script>\n\texport let a = true;\n\texport let b = true;\n\texport let c = true;\n</script>\n\n<!-- ✓ GOOD -->\n{#if a}\n\t<div>foo</div>\n{:else if b}\n\t<div>bar</div>\n{:else if c}\n\t<div>baz</div>\n{/if}\n\n<!-- ✗ BAD -->\n{#if a}\n\t<div>foo</div>\n{:else if b}\n\t<div>bar</div>\n{:else if b}\n\t<div>baz</div>\n{/if}\n\n{#if a}\n\t<div>foo</div>\n{:else if b}\n\t<div>bar</div>\n{:else}\n\tbaz\n\t{#if b}\n\t\t<div>qux</div>\n\t{/if}\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/invalid/test02-errors.yaml",
    "content": "- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 12\n  column: 11\n  suggestions: null\n- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 20\n  column: 11\n  suggestions: null\n- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 26\n  column: 11\n  suggestions: null\n- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 32\n  column: 11\n  suggestions: null\n- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 38\n  column: 11\n  suggestions: null\n- message: This branch can never execute. Its condition is a duplicate or covered\n    by previous conditions in the `{#if}` / `{:else if}` chain.\n  line: 46\n  column: 17\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/invalid/test02-input.svelte",
    "content": "<script>\n\texport let a = true;\n\texport let b = true;\n\texport let c = true;\n\texport let d = true;\n\texport let e = true;\n</script>\n\n<!-- ✗ BAD -->\n{#if a || b}\n\t1\n{:else if a}\n\t2\n{/if}\n\n{#if a}\n\t1\n{:else if b}\n\t2\n{:else if a || b}\n\t3\n{/if}\n\n{#if a}\n\t1\n{:else if a && b}\n\t2\n{/if}\n\n{#if a && b}\n\t1\n{:else if a && b && c}\n\t2\n{/if}\n\n{#if a || b}\n\t1\n{:else if b && c}\n\t2\n{/if}\n\n{#if a}\n\t1\n{:else if b && c}\n\t2\n{:else if d && ((c && e && b) || a)}\n\t3\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/valid/test01-input.svelte",
    "content": "<script>\n\texport let a = true;\n\texport let b = true;\n\texport let c = true;\n</script>\n\n{#if a}\n\t<div>foo</div>\n{:else if b}\n\t<div>bar</div>\n{:else if c}\n\t<div>baz</div>\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/valid/test02-input.svelte",
    "content": "<script>\n\texport let a = true;\n\texport let b = true;\n\texport let list = [1, 2, 3];\n</script>\n\n{#if a}\n\t<div>foo</div>\n{:else if b}\n\t<div>bar</div>\n{:else}<div>baz</div>{/if}\n{#if b}<div>baz</div>{/if}\n\n{#if a}\n\t<div>foo</div>\n{:else if b}\n\t{#each list as b}\n\t\t{#if b}\n\t\t\t<div>baz</div>\n\t\t{/if}\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-else-if-blocks/valid/test03-input.svelte",
    "content": "<script>\n\texport let a = true;\n\texport let b = true;\n\texport let c = true;\n</script>\n\n{#if b && c}\n\t<div>foo</div>\n{:else if b || c}\n\t<div>bar</div>\n{:else if a || c}\n\t<div>bar</div>\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/inline-expression-errors.yaml",
    "content": "- message: This `on:keydown` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 9\n  suggestions: null\n- message: This `on:keydown` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 47\n  suggestions: null\n- message: This `on:keydown` directive is the same and duplicate directives in L7.\n  line: 4\n  column: 2\n  suggestions: null\n- message: This `on:keydown` directive is the same and duplicate directives in L4.\n  line: 7\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/inline-expression-input.svelte",
    "content": "<button on:keydown={() => console.log('foo')} on:keydown={() => console.log('foo')} />\n\n<button\n\ton:keydown={() =>\n\t\t// foo\n\t\tconsole.log('foo')}\n\ton:keydown={() =>\n\t\tconsole\n\t\t\t// bar\n\t\t\t.log('foo')}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/modifier-errors.yaml",
    "content": "- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 9\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 23\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 32\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 46\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 63\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/modifier-input.svelte",
    "content": "<button on:click|once on:click on:click|self on:click|capture on:click|stopPropagation|self />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/multiple-element-errors.yaml",
    "content": "- message: This `on:mousemove` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 6\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 19\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L2.\n  line: 2\n  column: 7\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L2.\n  line: 2\n  column: 20\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L4.\n  line: 4\n  column: 8\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L4.\n  line: 4\n  column: 21\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L6.\n  line: 6\n  column: 8\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L6.\n  line: 6\n  column: 21\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L10.\n  line: 10\n  column: 8\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L10.\n  line: 10\n  column: 21\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L12.\n  line: 12\n  column: 8\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L12.\n  line: 12\n  column: 21\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L14.\n  line: 14\n  column: 8\n  suggestions: null\n- message: This `on:mousemove` directive is the same and duplicate directives in L14.\n  line: 14\n  column: 21\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/multiple-element-input.svelte",
    "content": "<div on:mousemove on:mousemove>\n\t<div on:mousemove on:mousemove>\n\t\t<div on:mousemove />\n\t\t<div on:mousemove on:mousemove />\n\t\t<div on:mousemove />\n\t\t<div on:mousemove on:mousemove />\n\t\t<div on:mousemove />\n\t</div>\n\t<div on:mousemove>\n\t\t<div on:mousemove on:mousemove />\n\t\t<div on:mousemove />\n\t\t<div on:mousemove on:mousemove />\n\t\t<div on:mousemove />\n\t\t<div on:mousemove on:mousemove />\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/test01-errors.yaml",
    "content": "- message: This `on:click` directive is the same and duplicate directives in L12.\n  line: 12\n  column: 9\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L12.\n  line: 12\n  column: 18\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L13.\n  line: 13\n  column: 9\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L13.\n  line: 13\n  column: 30\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/test01-input.svelte",
    "content": "<script>\n\tfunction myHandler() {}\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<!-- ✓ GOOD -->\n<button on:click on:click={myHandler} />\n<button on:click={foo} on:click={bar} />\n\n<!-- ✗ BAD -->\n<button on:click on:click />\n<button on:click={myHandler} on:click={myHandler} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/test02-errors.yaml",
    "content": "- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 9\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 18\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 27\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 36\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 45\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 54\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 63\n  suggestions: null\n- message: This `on:click` directive is the same and duplicate directives in L1.\n  line: 1\n  column: 72\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/invalid/test02-input.svelte",
    "content": "<button on:click on:click on:click on:click on:click on:click on:click on:click />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/valid/test01-input.svelte",
    "content": "<script>\n\tfunction myHandler() {}\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<!-- ✓ GOOD -->\n<button on:click on:click={myHandler} />\n<button on:click={foo} on:click={bar} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-on-directives/valid/test02-input.svelte",
    "content": "<button\n\ton:focus|once\n\ton:focus={(evt) => console.log(evt)}\n\ton:keydown={() => console.log('foo')}\n\ton:keydown={(evt) => console.log(evt)}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/invalid/ternary01-errors.yaml",
    "content": "- message: Duplicate property 'background'.\n  line: 7\n  column: 5\n  suggestions: null\n- message: Duplicate property 'background'.\n  line: 8\n  column: 13\n  suggestions: null\n- message: Duplicate property 'background'.\n  line: 8\n  column: 36\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/invalid/ternary01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div\n\tstyle=\"\n    background: blue;\n    {red ? `background: ${red}` : 'background: green'}\n  \"\n>\n\t...\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/invalid/test01-errors.yaml",
    "content": "- message: Duplicate property 'background'.\n  line: 10\n  column: 13\n  suggestions: null\n- message: Duplicate property 'background'.\n  line: 10\n  column: 32\n  suggestions: null\n- message: Duplicate property 'background'.\n  line: 11\n  column: 12\n  suggestions: null\n- message: Duplicate property 'background'.\n  line: 11\n  column: 38\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/invalid/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<div style=\"background: green; background-color: {red};\">...</div>\n<div style:background=\"green\" style=\"background-color: {red}\">...</div>\n\n<!-- ✗ BAD -->\n<div style=\"background: green; background: {red};\">...</div>\n<div style:background=\"green\" style=\"background: {red}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/valid/empty01-input.svelte",
    "content": "<script>\n</script>\n\n<div style=\"\">...</div>\n<div style>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/valid/ternary01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div\n\tstyle=\"\n    background: blue;\n    {red ? `background-color: ${red}` : 'background-color: green'}\n  \"\n>\n\t...\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/valid/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<div style=\"background: green; background-color: {red};\">...</div>\n<div style:background=\"green\" style=\"background-color: {red}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-style-properties/valid/test02-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div style:background=\"green\" not-style=\"background: {red}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/inline-expression-errors.yaml",
    "content": "- message: This `use:foo` directive is the same and duplicate directives in L6.\n  line: 6\n  column: 9\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L6.\n  line: 6\n  column: 44\n  suggestions: null\n- message: This `use:bar` directive is the same and duplicate directives in L12.\n  line: 9\n  column: 2\n  suggestions: null\n- message: This `use:bar` directive is the same and duplicate directives in L9.\n  line: 12\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/inline-expression-input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<button use:foo={() => console.log('foo')} use:foo={() => console.log('foo')} />\n\n<button\n\tuse:bar={() =>\n\t\t// foo\n\t\tconsole.log('foo')}\n\tuse:bar={() =>\n\t\tconsole\n\t\t\t// bar\n\t\t\t.log('foo')}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/multiple-element-errors.yaml",
    "content": "- message: This `use:foo` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 6\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 14\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L6.\n  line: 6\n  column: 7\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L6.\n  line: 6\n  column: 15\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L8.\n  line: 8\n  column: 8\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L8.\n  line: 8\n  column: 16\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L10.\n  line: 10\n  column: 8\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L10.\n  line: 10\n  column: 16\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L14.\n  line: 14\n  column: 8\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L14.\n  line: 14\n  column: 16\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L16.\n  line: 16\n  column: 8\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L16.\n  line: 16\n  column: 16\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L18.\n  line: 18\n  column: 8\n  suggestions: null\n- message: This `use:foo` directive is the same and duplicate directives in L18.\n  line: 18\n  column: 16\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/multiple-element-input.svelte",
    "content": "<script>\n\tfunction foo() {}\n</script>\n\n<div use:foo use:foo>\n\t<div use:foo use:foo>\n\t\t<div use:foo />\n\t\t<div use:foo use:foo />\n\t\t<div use:foo />\n\t\t<div use:foo use:foo />\n\t\t<div use:foo />\n\t</div>\n\t<div use:foo>\n\t\t<div use:foo use:foo />\n\t\t<div use:foo />\n\t\t<div use:foo use:foo />\n\t\t<div use:foo />\n\t\t<div use:foo use:foo />\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/test01-errors.yaml",
    "content": "- message: This `use:clickOutside` directive is the same and duplicate directives\n    in L13.\n  line: 13\n  column: 6\n  suggestions: null\n- message: This `use:clickOutside` directive is the same and duplicate directives\n    in L13.\n  line: 13\n  column: 23\n  suggestions: null\n- message: This `use:clickOutside` directive is the same and duplicate directives\n    in L14.\n  line: 14\n  column: 6\n  suggestions: null\n- message: This `use:clickOutside` directive is the same and duplicate directives\n    in L14.\n  line: 14\n  column: 31\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/test01-input.svelte",
    "content": "<script>\n\tfunction clickOutside() {}\n\tconst param = {};\n\tconst foo = {};\n\tconst bar = {};\n</script>\n\n<!-- ✓ GOOD -->\n<div use:clickOutside use:clickOutside={param} />\n<div use:clickOutside={foo} use:clickOutside={bar} />\n\n<!-- ✗ BAD -->\n<div use:clickOutside use:clickOutside />\n<div use:clickOutside={param} use:clickOutside={param} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/test02-errors.yaml",
    "content": "- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 6\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 12\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 18\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 24\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 30\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 36\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 42\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 48\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 54\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 60\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 66\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 72\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 78\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 84\n  suggestions: null\n- message: This `use:x` directive is the same and duplicate directives in L5.\n  line: 5\n  column: 90\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/invalid/test02-input.svelte",
    "content": "<script>\n\tfunction x() {}\n</script>\n\n<div use:x use:x use:x use:x use:x use:x use:x use:x use:x use:x use:x use:x use:x use:x use:x />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/valid/inline-expression-input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n\tconst param = {};\n</script>\n\n<div use:foo use:foo={param} />\n<div use:foo={{ a: 42 }} use:bar={{ a: 42 }} />\n<div use:foo={{ a: 42 }} use:foo={{ b: 42 }} />\n<div use:bar={{ a: 42 }} use:bar={{ a: 42, b: 42 }} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dupe-use-directives/valid/test01-input.svelte",
    "content": "<script>\n\tfunction clickOutside() {}\n\tconst param = {};\n\tconst foo = {};\n\tconst bar = {};\n</script>\n\n<!-- ✓ GOOD -->\n<div use:clickOutside use:clickOutside={param} />\n<div use:clickOutside={foo} use:clickOutside={bar} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/bool-slot01-errors.yaml",
    "content": "- message: \"`<slot>` name requires a value.\"\n  line: 1\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/bool-slot01-input.svelte",
    "content": "<slot name />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/bool-slot01-output.svelte",
    "content": "<slot name />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/literal-slot01-errors.yaml",
    "content": "- message: \"`<slot>` name cannot be dynamic.\"\n  line: 1\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/literal-slot01-input.svelte",
    "content": "<slot name={'name'} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/literal-slot01-output.svelte",
    "content": "<slot name=\"name\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/multi-report01-errors.yaml",
    "content": "- message: \"`<slot>` name cannot be dynamic.\"\n  line: 6\n  column: 12\n  suggestions: null\n- message: \"`<slot>` name cannot be dynamic.\"\n  line: 7\n  column: 12\n  suggestions: null\n- message: \"`<slot>` name cannot be dynamic.\"\n  line: 8\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/multi-report01-input.svelte",
    "content": "<script>\n\tconst x = 'x';\n\tconst SLOT_NAME = x;\n</script>\n\n<slot name={SLOT_NAME} />\n<slot name={SLOT_NAME} />\n<slot name={SLOT_NAME} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/multi-report01-output.svelte",
    "content": "<script>\n\tconst x = 'x';\n\tconst SLOT_NAME = x;\n</script>\n\n<slot name=\"x\" />\n<slot name=\"x\" />\n<slot name=\"x\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/recursive-loop01-errors.yaml",
    "content": "- message: \"`<slot>` name cannot be dynamic.\"\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/recursive-loop01-input.svelte",
    "content": "<script>\n\tconst f = SLOT_NAME;\n\tconst SLOT_NAME = f;\n</script>\n\n<slot name={SLOT_NAME} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/recursive-loop01-output.svelte",
    "content": "<script>\n\tconst f = SLOT_NAME;\n\tconst SLOT_NAME = f;\n</script>\n\n<slot name={SLOT_NAME} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/var-slot01-errors.yaml",
    "content": "- message: \"`<slot>` name cannot be dynamic.\"\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/var-slot01-input.svelte",
    "content": "<script>\n\texport const SLOT_NAME = 'name';\n</script>\n\n<slot name={SLOT_NAME} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/invalid/var-slot01-output.svelte",
    "content": "<script>\n\texport const SLOT_NAME = 'name';\n</script>\n\n<slot name=\"name\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-dynamic-slot-name/valid/slot01-input.svelte",
    "content": "<slot name=\"name\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config/test01/+page.svelte",
    "content": "<script context=\"module\">\n\texport function load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config/test01/errors.yaml",
    "content": "- message: disallow exporting load functions in `*.svelte` module in SvelteKit\n    page components.\n  line: 2\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config/test01/svelte.config.js",
    "content": "export default {\n\tkit: {\n\t\tfiles: {\n\t\t\troutes:\n\t\t\t\t'tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config'\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config-from-parser-options/+page.svelte",
    "content": "<script context=\"module\">\n\texport function load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config-from-parser-options/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config-from-parser-options\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/svelte-config-from-parser-options/errors.yaml",
    "content": "- message: disallow exporting load functions in `*.svelte` module in SvelteKit\n    page components.\n  line: 2\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/test01/+page.svelte",
    "content": "<script context=\"module\">\n\texport function load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/test01/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/test01/errors.yaml",
    "content": "- message: disallow exporting load functions in `*.svelte` module in SvelteKit\n    page components.\n  line: 2\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/test02/+page.svelte",
    "content": "<script context=\"module\">\n\texport const load = () => {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/test02/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/invalid/test02/errors.yaml",
    "content": "- message: disallow exporting load functions in `*.svelte` module in SvelteKit\n    page components.\n  line: 2\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/not-page/+test01-input.svelte",
    "content": "<script context=\"module\">\n\texport function load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/not-page/+test02-input.svelte",
    "content": "<script context=\"module\">\n\texport const load = () => {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/not-page/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"some-path\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test01/+page.svelte",
    "content": "<script>\n\texport function load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test01/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test01\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test02/+page.svelte",
    "content": "<script>\n\texport const load = () => {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test02/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test02\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test03/+page.svelte",
    "content": "<script context=\"module\">\n\tfunction load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test03/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test03\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test04/+page.svelte",
    "content": "<script context=\"module\">\n\tconst load = () => {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test04/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test04\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test05/+page.svelte",
    "content": "<script context=\"module\">\n\texport function foo() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test05/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test05\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test06/+page.svelte",
    "content": "<script context=\"module\">\n\texport function foo() {}\n</script>\n\n<script>\n\texport function load() {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test06/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test06\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test07/+page.svelte",
    "content": "<script context=\"module\">\n\tfunction load() {}\n\texport function foo(load) {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test07/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test07\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test08/+page.svelte",
    "content": "<script context=\"module\">\n\tfunction load() {}\n\texport const foo = load;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test08/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test09/+page.svelte",
    "content": "<script context=\"module\">\n\texport function fn() {\n\t\tfunction load() {}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test09/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test09\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test10/+page.svelte",
    "content": "<script context=\"module\">\n\texport function fn() {\n\t\tconst load = () => {};\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test10/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/no-export-load-in-svelte-module-in-kit-pages/valid/test10\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-extra-reactive-curlies/invalid/test01-errors.yaml",
    "content": "- message: Do not wrap reactive statements in curly braces unless necessary.\n  line: 2\n  column: 5\n  suggestions:\n    - desc: Remove the unnecessary curly braces.\n      messageId: removeExtraCurlies\n      output: |\n        <script>\n        \t$: foo = info;\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-extra-reactive-curlies/invalid/test01-input.svelte",
    "content": "<script>\n\t$: {\n\t\tfoo = info;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-extra-reactive-curlies/invalid/test02-errors.yaml",
    "content": "- message: Do not wrap reactive statements in curly braces unless necessary.\n  line: 3\n  column: 6\n  suggestions:\n    - desc: Remove the unnecessary curly braces.\n      messageId: removeExtraCurlies\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n          $: foo = info;\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-extra-reactive-curlies/invalid/test02-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  $: { foo = info; }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-extra-reactive-curlies/valid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  $: foo1 = \"bar\"\n  $: foo2 = \"bar\";\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-extra-reactive-curlies/valid/test02-input.svelte",
    "content": "<script>\n\t$: {\n\t\tfoo = info;\n\t\tbar = something;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/invalid/aliased-goto01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/invalid/aliased-goto01-input.svelte",
    "content": "<script>\n\timport { goto as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/invalid/base-not-prefixed01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 5\n  column: 7\n  suggestions: null\n- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 6\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/invalid/base-not-prefixed01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tgoto('/foo/' + base);\n\tgoto(`/foo/${base}`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/invalid/no-base01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 4\n  column: 7\n  suggestions: null\n- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 5\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/invalid/no-base01-input.svelte",
    "content": "<script>\n\timport { goto } from '$app/navigation';\n\n\tgoto('/foo');\n\tgoto('/user:42');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/valid/absolute-uri01-input.svelte",
    "content": "<script>\n\timport { goto } from '$app/navigation';\n\n\tgoto('http://localhost/foo/');\n\tgoto('https://localhost/foo/');\n\tgoto('mailto:user@example.com');\n\tgoto('tel:+123456789');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/valid/base-aliased01-input.svelte",
    "content": "<script>\n\timport { base as alias } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tgoto(alias + '/foo/');\n\tgoto(`${alias}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-goto-without-base/valid/base-prefixed01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tgoto(base + '/foo/');\n\tgoto(`${base}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-ignored-unsubscribe/invalid/test01-errors.yaml",
    "content": "- message: Ignoring returned value of the subscribe method is forbidden.\n  line: 6\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-ignored-unsubscribe/invalid/test01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst foo = writable(0);\n\n\tfoo.subscribe(() => {\n\t\tconsole.log('foo changed');\n\t});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-ignored-unsubscribe/valid/test01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst foo = writable(0);\n\n\tconst unsubscribe = foo.subscribe(() => {\n\t\tconsole.log('foo changed');\n\t});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-ignored-unsubscribe/valid/test02-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst foo = writable(0);\n\n\tconst unsubscribers = [];\n\tunsubscribers.push(\n\t\tfoo.subscribe(() => {\n\t\t\tconsole.log('foo changed');\n\t\t})\n\t);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-ignored-unsubscribe/valid/test03-input.svelte",
    "content": "<script>\n\ta(foo.subscribe);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/invalid/immutable-let-errors.yaml",
    "content": "- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 3\n  column: 17\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 4\n  column: 17\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 5\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/invalid/immutable-let-input.svelte",
    "content": "<script>\n\tlet immutableVar = 'hello';\n\t$: computed1 = `${immutableVar} ${immutableVar}`;\n\t$: computed1 = fn1(immutableVar);\n\t$: console.log(immutableVar);\n\n\tfunction fn1(v) {\n\t\treturn `${v} ${v}`;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/invalid/immutable01-errors.yaml",
    "content": "- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 7\n  column: 17\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 8\n  column: 17\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 9\n  column: 5\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 10\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/invalid/immutable01-input.svelte",
    "content": "<script>\n\timport myVar from './my-variables';\n\tlet mutableVar = 'hello';\n\n\tconst immutableVar = 'hello';\n\t/* ✗ BAD */\n\t$: computed3 = fn1(immutableVar);\n\t$: computed4 = fn2();\n\t$: console.log(immutableVar);\n\t$: console.log(myVar);\n\n\tfunction fn1(v) {\n\t\treturn `${v} ${v}`;\n\t}\n\tfunction fn2() {\n\t\treturn `${mutableVar} ${mutableVar}`;\n\t}\n</script>\n\n<input bind:value={mutableVar} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/invalid/readonly-export01-errors.yaml",
    "content": "- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 12\n  column: 16\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 13\n  column: 16\n  suggestions: null\n- message: This statement is not reactive because all variables referenced in the\n    reactive statement are immutable.\n  line: 14\n  column: 16\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/invalid/readonly-export01-input.svelte",
    "content": "<script>\n\texport const thisIs = 'readonly';\n\n\texport function greet(name) {\n\t\tconsole.log(`hello ${name}!`);\n\t}\n\n\texport class Foo {}\n\n\tconst immutableVar = 'hello';\n\n\t$: message1 = greet(immutableVar);\n\t$: message2 = `this is${thisIs}`;\n\t$: instance = new Foo();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/builtin-vars01-input.svelte",
    "content": "<script>\n\t$: desc = $$slots.description;\n</script>\n\n<div>\n\t<slot name=\"title\" />\n\t{#if desc}\n\t\t<hr />\n\t\t<slot name=\"description\" />\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/builtin-vars02-input.svelte",
    "content": "<script>\n\t$: prop = $$props.prop;\n\t$: type = $$restProps.type;\n</script>\n\n<Widget {prop} />\n<input {type} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member01-input.svelte",
    "content": "<script>\n\tconst array = [1];\n\tconst object = { b: 1 };\n\t$: a = array[0];\n\t$: b = object.b;\n</script>\n\n{a}{b}\n<button on:click={() => (array[0] = 2)}>Foo</button>\n<button on:click={() => (object.b = 2)}>Foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member02-wth-bind-input.svelte",
    "content": "<script>\n\tconst values = ['a', 'b'];\n\t$: first = values[0];\n</script>\n\n{first}\n<input bind:value={values[0]} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member03-with-each-input.svelte",
    "content": "<script>\n\tconst values = ['a', 'b'];\n\t$: first = values[0];\n</script>\n\n{first}\n{#each values as value}\n\t<input bind:value />\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member04-with-each-input.svelte",
    "content": "<script>\n\tconst values = [['a'], ['b']];\n\t$: first = values[0][0];\n</script>\n\n{first}\n{#each values as a}\n\t{#each a as value}\n\t\t<input bind:value />\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member05-with-each-input.svelte",
    "content": "<script>\n\tconst values = ['a', 'b'];\n\t$: first = values[0];\n</script>\n\n{first}\n{values}\n{#each values as value}\n\t<button on:click={() => (value = 'foo')}>Foo</button>\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member06-with-each-input.svelte",
    "content": "<script>\n\tconst values = [{ a: 'a' }, { a: 'b' }];\n\t$: first = values[0].a;\n</script>\n\n{first}\n{#each values as { a }}\n\t<input bind:value={a} />\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable-member07-with-each-input.svelte",
    "content": "<script>\n\tconst values = [['a'], ['b']];\n\t$: first = values[0][0];\n</script>\n\n{first}\n{#each values as [value]}\n\t<input bind:value />\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/mutable01-input.svelte",
    "content": "<script>\n\timport myStore from './my-stores';\n\timport myVar from './my-variables';\n\tlet mutableVar = 'hello';\n\texport let prop;\n\t/* ✓ GOOD */\n\t$: computed1 = `${mutableVar} ${mutableVar}`;\n\t$: computed2 = fn1(mutableVar);\n\t$: console.log(mutableVar);\n\t$: console.log(computed1);\n\t$: console.log($myStore);\n\t$: console.log(prop);\n\n\tfunction fn1(v) {\n\t\treturn `${v} ${v}`;\n\t}\n</script>\n\n<input bind:value={mutableVar} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-immutable-reactive-statements/valid/unknown01-input.svelte",
    "content": "<script>\n\t$: console.log(unknown);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/disallowed-transitions/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowTransitions\": false\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/disallowed-transitions/transition01-errors.yaml",
    "content": "- message: Found disallowed transition.\n  line: 5\n  column: 7\n  suggestions: null\n- message: Found disallowed transition.\n  line: 7\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/disallowed-transitions/transition01-input.svelte",
    "content": "<script>\n\timport { fade, fly } from 'svelte/transition';\n</script>\n\n<span transition:fade>Hello World!</span>\n\n<span transition:fly={{ y: 200, duration: 2000 }}>Hello World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/style-attribute01-errors.yaml",
    "content": "- message: Found disallowed style attribute.\n  line: 1\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/style-attribute01-input.svelte",
    "content": "<span style=\"display: block;\">Hello World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/style-directive01-errors.yaml",
    "content": "- message: Found disallowed style directive.\n  line: 5\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/invalid/style-directive01-input.svelte",
    "content": "<script>\n\texport let block;\n</script>\n\n<span style:display={block ? 'block' : 'inline-block'}>Hello World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/valid/class-attribute01-input.svelte",
    "content": "<span class=\"my-class\">Hello World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/valid/class-directive01-input.svelte",
    "content": "<span class:one={true}>Hello World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inline-styles/valid/transition01-input.svelte",
    "content": "<script>\n\timport { fade, fly } from 'svelte/transition';\n</script>\n\n<span transition:fade>Hello World!</span>\n\n<span transition:fly={{ y: 200, duration: 2000 }}>Hello World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/_config.json",
    "content": "{\n\t\"options\": [\"functions\", { \"blockScopedFunctions\": \"disallow\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/_requirements.json",
    "content": "{\n\t\"eslint\": \"^9.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/both/_config.json",
    "content": "{\n\t\"options\": [\"both\", { \"blockScopedFunctions\": \"disallow\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/both/_requirements.json",
    "content": "{\n\t\"eslint\": \"^9.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/both/test01-errors.yaml",
    "content": "- message: Move function declaration to program root.\n  line: 3\n  column: 3\n  suggestions: null\n- message: Move variable declaration to program root.\n  line: 5\n  column: 11\n  suggestions: null\n- message: Move variable declaration to program root.\n  line: 6\n  column: 31\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Move variable declaration to function body root.\n  line: 10\n  column: 5\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 15\n  column: 3\n  suggestions: null\n- message: Move variable declaration to function body root.\n  line: 16\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/both/test01-input.svelte",
    "content": "<script>\n\tif (test) {\n\t\tfunction doSomething() {}\n\t}\n\tif (foo) var a;\n\tif (foo) /* some comments */ var a;\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) {\n\t\t\t\tvar a;\n\t\t\t}\n\t\t}\n\t}\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) var a;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/test01-errors.yaml",
    "content": "- message: Move function declaration to program root.\n  line: 3\n  column: 3\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 15\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/test01-input.svelte",
    "content": "<script>\n\tif (test) {\n\t\tfunction doSomething() {}\n\t}\n\tif (foo) var a;\n\tif (foo) /* some comments */ var a;\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) {\n\t\t\t\tvar a;\n\t\t\t}\n\t\t}\n\t}\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) var a;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/_config.json",
    "content": "{\n\t\"options\": [\"functions\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/_requirements.json",
    "content": "{\n\t\"eslint\": \"<=8\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/both/_config.json",
    "content": "{\n\t\"options\": [\"both\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/both/_requirements.json",
    "content": "{\n\t\"eslint\": \"<=8\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/both/test01-errors.yaml",
    "content": "- message: Move function declaration to program root.\n  line: 3\n  column: 3\n  suggestions: null\n- message: Move variable declaration to program root.\n  line: 5\n  column: 11\n  suggestions: null\n- message: Move variable declaration to program root.\n  line: 6\n  column: 31\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Move variable declaration to function body root.\n  line: 10\n  column: 5\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 15\n  column: 3\n  suggestions: null\n- message: Move variable declaration to function body root.\n  line: 16\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/both/test01-input.svelte",
    "content": "<script>\n\tif (test) {\n\t\tfunction doSomething() {}\n\t}\n\tif (foo) var a;\n\tif (foo) /* some comments */ var a;\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) {\n\t\t\t\tvar a;\n\t\t\t}\n\t\t}\n\t}\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) var a;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/test01-errors.yaml",
    "content": "- message: Move function declaration to program root.\n  line: 3\n  column: 3\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Move function declaration to program root.\n  line: 15\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/invalid/v8/test01-input.svelte",
    "content": "<script>\n\tif (test) {\n\t\tfunction doSomething() {}\n\t}\n\tif (foo) var a;\n\tif (foo) /* some comments */ var a;\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) {\n\t\t\t\tvar a;\n\t\t\t}\n\t\t}\n\t}\n\tif (foo) {\n\t\tfunction f() {\n\t\t\tif (bar) var a;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inner-declarations/valid/test01-input.svelte",
    "content": "<script>\n\tfunction doSomething() {}\n\tfunction doSomething2() {\n\t\tfunction somethingElse() {}\n\t}\n\t(function () {\n\t\tfunction doSomething() {}\n\t})();\n\tif (test) {\n\t\tvar fn = function () {};\n\t}\n\tif (test) {\n\t\tvar fn = function expr() {};\n\t}\n\tfunction decl() {\n\t\tvar fn = function expr() {};\n\t}\n\tfunction decl2(arg) {\n\t\tvar fn;\n\t\tif (arg) {\n\t\t\tfn = function () {};\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inspect/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inspect/invalid/test01-errors.yaml",
    "content": "- message: Do not use $inspect directive\n  line: 2\n  column: 3\n  suggestions: null\n- message: Do not use $inspect directive\n  line: 5\n  column: 13\n  suggestions: null\n- message: Do not use $inspect directive\n  line: 8\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inspect/invalid/test01-input.svelte",
    "content": "<script>\n  $inspect(1);\n  $state(0);\n\n  const a = $inspect(1);\n\n  const _ = () => {\n    $inspect(1);\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inspect/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-inspect/valid/test01-input.svelte",
    "content": "<script>\n  const _ = $state(1);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-aliased01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-aliased01-input.svelte",
    "content": "<script>\n\timport { goto as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-base-not-as-prefix01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 5\n  column: 7\n  suggestions: null\n- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 6\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-base-not-as-prefix01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tgoto('/foo/' + base);\n\tgoto(`/foo/${base}`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-namespace-import01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 4\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as navigation from '$app/navigation';\n\n\tnavigation.goto('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-no-base01-errors.yaml",
    "content": "- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 6\n  column: 7\n  suggestions: null\n- message: Found a goto() call with a url that isn't prefixed with the base path.\n  line: 7\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/goto-no-base01-input.svelte",
    "content": "<script>\n\timport { goto } from '$app/navigation';\n\n\tconst value = \"/foo\";\n\n\tgoto('/foo');\n\tgoto(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/link-base-not-as-prefix01-errors.yaml",
    "content": "- message: Found a link with a url that isn't prefixed with the base path.\n  line: 5\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 6\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/link-base-not-as-prefix01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n</script>\n\n<a href={'/foo/' + base}>Click me!</a>\n<a href={`/foo/${base}`}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/link-no-base01-errors.yaml",
    "content": "- message: Found a link with a url that isn't prefixed with the base path.\n  line: 4\n  column: 10\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 5\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 6\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 7\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 8\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/link-no-base01-input.svelte",
    "content": "<script>\n\tconst value = \"/foo\";\n</script>\n<a href=\"/foo\">Click me!</a>\n<a href={'/foo'}>Click me!</a>\n<a href={'/' + 'foo'}>Click me!</a>\n<a href={value}>Click me!</a>\n<a href={'/user:42'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/link-with-fragment01-errors.yaml",
    "content": "- message: Found a link with a url that isn't prefixed with the base path.\n  line: 4\n  column: 10\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 5\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 6\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 7\n  column: 9\n  suggestions: null\n- message: Found a link with a url that isn't prefixed with the base path.\n  line: 8\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/link-with-fragment01-input.svelte",
    "content": "<script>\n\tconst value = \"/foo#section\";\n</script>\n<a href=\"/foo#section\">Click me!</a>\n<a href={'/foo#section'}>Click me!</a>\n<a href={'/' + 'foo#section'}>Click me!</a>\n<a href={value}>Click me!</a>\n<a href={'/foo#section:42'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-aliased01-errors.yaml",
    "content": "- message: Found a pushState() call with a url that isn't prefixed with the base path.\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-aliased01-input.svelte",
    "content": "<script>\n\timport { pushState as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-base-not-as-prefix01-errors.yaml",
    "content": "- message: Found a pushState() call with a url that isn't prefixed with the base path.\n  line: 5\n  column: 12\n  suggestions: null\n- message: Found a pushState() call with a url that isn't prefixed with the base path.\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-base-not-as-prefix01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tpushState('/foo/' + base);\n\tpushState(`/foo/${base}`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-namespace-import01-errors.yaml",
    "content": "- message: Found a pushState() call with a url that isn't prefixed with the base path.\n  line: 4\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as navigation from '$app/navigation';\n\n\tnavigation.pushState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-no-base01-errors.yaml",
    "content": "- message: Found a pushState() call with a url that isn't prefixed with the base path.\n  line: 6\n  column: 12\n  suggestions: null\n- message: Found a pushState() call with a url that isn't prefixed with the base path.\n  line: 7\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/pushState-no-base01-input.svelte",
    "content": "<script>\n\timport { pushState } from '$app/navigation';\n\n\tconst value = \"/foo\";\n\n\tpushState('/foo');\n\tpushState(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-aliased01-errors.yaml",
    "content": "- message: Found a replaceState() call with a url that isn't prefixed with the\n    base path.\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-aliased01-input.svelte",
    "content": "<script>\n\timport { replaceState as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-base-not-as-prefix01-errors.yaml",
    "content": "- message: Found a replaceState() call with a url that isn't prefixed with the\n    base path.\n  line: 5\n  column: 15\n  suggestions: null\n- message: Found a replaceState() call with a url that isn't prefixed with the\n    base path.\n  line: 6\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-base-not-as-prefix01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState('/foo/' + base);\n\treplaceState(`/foo/${base}`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-namespace-import01-errors.yaml",
    "content": "- message: Found a replaceState() call with a url that isn't prefixed with the\n    base path.\n  line: 4\n  column: 26\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as navigation from '$app/navigation';\n\n\tnavigation.replaceState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-no-base01-errors.yaml",
    "content": "- message: Found a replaceState() call with a url that isn't prefixed with the\n    base path.\n  line: 6\n  column: 15\n  suggestions: null\n- message: Found a replaceState() call with a url that isn't prefixed with the\n    base path.\n  line: 7\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/invalid/replaceState-no-base01-input.svelte",
    "content": "<script>\n\timport { replaceState } from '$app/navigation';\n\n\tconst value = \"/foo\";\n\n\treplaceState('/foo');\n\treplaceState(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/goto-base-aliased01-input.svelte",
    "content": "<script>\n\timport { base as alias } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tgoto(alias + '/foo/');\n\tgoto(`${alias}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/goto-base-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tgoto(paths.base + '/foo/');\n\tgoto(`${paths.base}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/goto-base-prefixed01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tconst value1 = base + '/foo/';\n\tconst value2 = `${base}/foo/`;\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tgoto(base + '/foo/');\n\tgoto(`${base}/foo/`);\n\tgoto(value1);\n\tgoto(value2);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignoreGoto/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreGoto\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignoreGoto/goto-ignored01-input.svelte",
    "content": "<script>\n\timport { goto } from '$app/navigation';\n\n\tgoto('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignoreLinks/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreLinks\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignoreLinks/link-ignored01-input.svelte",
    "content": "<a href=\"/foo\">Click me!</a>\n<a href={'/foo'}>Click me!</a>\n<a href={'/' + 'foo'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignorePushState/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignorePushState\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignorePushState/pushState-ignored01-input.svelte",
    "content": "<script>\n\timport { pushState } from '$app/navigation';\n\n\tpushState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignoreReplaceState/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreReplaceState\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/ignoreReplaceState/replaceState-ignored01-input.svelte",
    "content": "<script>\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/link-absolute-url01-input.svelte",
    "content": "<script>\n\tconst protocol = 'https';\n</script>\n\n<a href=\"http://svelte.dev\">Click me!</a>\n<a href=\"https://svelte.dev\">Click me!</a>\n<a href={'http://svelte.dev'}>Click me!</a>\n<a href={'https://svelte.dev'}>Click me!</a>\n<a href={'http://svelte' + '.dev'}>Click me!</a>\n<a href={'https://svelte' + '.dev'}>Click me!</a>\n<a href={'http' + '://svelte.dev'}>Click me!</a>\n<a href={'https' + '://svelte.dev'}>Click me!</a>\n<a href={`${protocol}://svelte.dev`}>Click me!</a>\n<a href=\"mailto:user@example.com\">Click me!</a>\n<a href=\"tel:+123456789\">Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/link-base-aliased01-input.svelte",
    "content": "<script>\n\timport { base as alias } from '$app/paths';\n</script>\n\n<a href={alias + '/foo/'}>Click me!</a>;\n<a href={`${alias}/foo/`}>Click me!</a>;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/link-base-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n</script>\n\n<a href={paths.base + '/foo/'}>Click me!</a>;\n<a href={`${paths.base}/foo/`}>Click me!</a>;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/link-base-prefixed01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\n\tconst value1 = base + '/foo/';\n\tconst value2 = `${base}/foo/`;\n</script>\n\n<a href={base + '/foo/'}>Click me!</a>\n<a href={`${base}/foo/`}>Click me!</a>\n<a href={value1}>Click me!</a>\n<a href={value2}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/link-fragment-url01-input.svelte",
    "content": "<script>\n\tconst section = 'sectionName';\n</script>\n\n<a href=\"#\">Click me!</a>\n<a href=\"#section\">Click me!</a>\n<a href={'#section'}>Click me!</a>\n<a href={'#' + 'section'}>Click me!</a>\n<a href={'#' + section}>Click me!</a>\n<a href={`#${section}`}>Click me!</a>\n<a href={'#user:42'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/pushState-base-aliased01-input.svelte",
    "content": "<script>\n\timport { base as alias } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tpushState(alias + '/foo/');\n\tpushState(`${alias}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/pushState-base-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tpushState(paths.base + '/foo/');\n\tpushState(`${paths.base}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/pushState-base-prefixed01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tconst value1 = base + '/foo/';\n\tconst value2 = `${base}/foo/`;\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\tpushState(base + '/foo/');\n\tpushState(`${base}/foo/`);\n\tpushState(value1);\n\tpushState(value2);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/pushState-empty-url01-input.svelte",
    "content": "<script>\n\timport { pushState } from '$app/navigation';\n\n\tpushState('');\n\tpushState(``);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/replaceState-base-aliased01-input.svelte",
    "content": "<script>\n\timport { base as alias } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\treplaceState(alias + '/foo/');\n\treplaceState(`${alias}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/replaceState-base-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\treplaceState(paths.base + '/foo/');\n\treplaceState(`${paths.base}/foo/`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/replaceState-base-prefixed01-input.svelte",
    "content": "<script>\n\timport { base } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\tconst value1 = base + '/foo/';\n\tconst value2 = `${base}/foo/`;\n\n\t// eslint-disable-next-line prefer-template -- Testing both variants\n\treplaceState(base + '/foo/');\n\treplaceState(`${base}/foo/`);\n\treplaceState(value1);\n\treplaceState(value2);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-base/valid/replaceState-empty-url01-input.svelte",
    "content": "<script>\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState('');\n\treplaceState(``);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-aliased01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-aliased01-input.svelte",
    "content": "<script>\n\timport { goto as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-namespace-import01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 4\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as navigation from '$app/navigation';\n\n\tnavigation.goto('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-partial-resolve01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 5\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 6\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-partial-resolve01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tgoto(resolve('/foo') + '/bar');\n\tgoto('/foo' + resolve('/bar'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-resolved-pathname-wrong-module01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 12\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-resolved-pathname-wrong-module01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { goto } from '$app/navigation';\n\n\ttype ResolvedPathname = string;\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tgoto(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-string-prop01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 10\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-string-prop01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { goto } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: string;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tgoto(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-ternary-resolve-absolute01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 7\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 8\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 9\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-ternary-resolve-absolute01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tconst condition = true;\n\n\tgoto(condition ? resolve('/foo') : 'https://example.com');\n\tgoto(condition ? 'https://example.com' : resolve('/foo'));\n\tgoto(condition ? 'https://example.com' : 'https://other.com');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-ternary-resolve-empty01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 7\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 8\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 9\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-ternary-resolve-empty01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tconst condition = true;\n\n\tgoto(condition ? resolve('/foo') : '');\n\tgoto(condition ? '' : resolve('/foo'));\n\tgoto(condition ? '' : '');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-ternary-resolve-plain01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 7\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 8\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 9\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 11\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 13\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-ternary-resolve-plain01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tconst condition = true;\n\n\tgoto(condition ? resolve('/foo') : '/bar');\n\tgoto(condition ? '/foo' : resolve('/bar'));\n\tgoto(condition ? '/foo' : '/bar');\n\tconst url = condition ? resolve('/foo') : '/bar';\n\tgoto(url);\n\tconst plain = '/bar';\n\tgoto(condition ? resolve('/foo') : plain);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-unresolved-pathname01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 12\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-unresolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Pathname } from '$app/types';\n\n\timport { goto } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: Pathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tgoto(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-without-resolve01-errors.yaml",
    "content": "- message: Unexpected goto() call without resolve().\n  line: 6\n  column: 7\n  suggestions: null\n- message: Unexpected goto() call without resolve().\n  line: 7\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/goto-without-resolve01-input.svelte",
    "content": "<script>\n\timport { goto } from '$app/navigation';\n\n\tconst value = \"/foo\";\n\n\tgoto('/foo');\n\tgoto(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-absolute-url-invalid-operator01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 1\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 2\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 3\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-absolute-url-invalid-operator01-input.svelte",
    "content": "<a href={'https://example.com' - '/foo'}>Click me!</a>\n<a href={'/foo' - 'https://example.com'}>Click me!</a>\n<a href={'https://' - 'example.com'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-fragment-url-invalid-operator01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 1\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 2\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-fragment-url-invalid-operator01-input.svelte",
    "content": "<a href={'#section' - '/foo'}>Click me!</a>\n<a href={'#section' * '/foo'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-nullish-like-literal01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 6\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 7\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 8\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 9\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 10\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 12\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 13\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 14\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 15\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-nullish-like-literal01-input.svelte",
    "content": "<script>\n\tconst one = \"undefined\";\n\tconst two = \"null\";\n</script>\n\n<a href=\"undefined\">Click me!</a>\n<a href=\"null\">Click me!</a>\n<a href={one}>Click me!</a>\n<a href={two}>Click me!</a>\n<a href={`undefined`}>Click me!</a>\n<a href={`null`}>Click me!</a>\n<a href={`${undefined}`}>Click me!</a>\n<a href={`${null}`}>Click me!</a>\n<a href={`${one}`}>Click me!</a>\n<a href={`${two}`}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-partial-asset01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 5\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 6\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-partial-asset01-input.svelte",
    "content": "<script>\n\timport { asset } from '$app/paths';\n</script>\n\n<a href={asset('/foo') + '/bar'}>Click me!</a>\n<a href={'/foo' + asset('/bar')}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-partial-resolve01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 8\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 9\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 10\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-partial-resolve01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\n\tconst value = resolve('/foo') + '/bar';\n\tconst href = resolve('/foo') + '/bar';\n</script>\n\n<a href={resolve('/foo') + '/bar'}>Click me!</a>\n<a href={'/foo' + resolve('/bar')}>Click me!</a>\n<a href={value}>Click me!</a>\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-resolved-pathname-wrong-module01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-resolved-pathname-wrong-module01-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype ResolvedPathname = string;\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n</script>\n\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-string-prop01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 9\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-string-prop01-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\thref: string;\n\t}\n\n\tconst { href }: Props = $props();\n</script>\n\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-ternary-asset-plain01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 7\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 8\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-ternary-asset-plain01-input.svelte",
    "content": "<script>\n\timport { asset } from '$app/paths';\n\n\tconst condition = true;\n</script>\n\n<a href={condition ? asset('/foo') : '/bar'}>Click me!</a>\n<a href={condition ? '/foo' : asset('/bar')}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-ternary-resolve-plain01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 9\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 10\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 12\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 13\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-ternary-resolve-plain01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\n\tconst condition = true;\n\tconst url = condition ? resolve('/foo') : '/bar';\n\tconst plain = '/bar';\n</script>\n\n<a href={condition ? resolve('/foo') : '/bar'}>Click me!</a>\n<a href={condition ? '/foo' : resolve('/bar')}>Click me!</a>\n<a href={condition ? '/foo' : '/bar'}>Click me!</a>\n<a href={url}>Click me!</a>\n<a href={condition ? resolve('/foo') : plain}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-unresolved-pathname01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-unresolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Pathname } from '$app/types';\n\n\tinterface Props {\n\t\thref: Pathname;\n\t}\n\n\tconst { href }: Props = $props();\n</script>\n\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-with-fragment01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 6\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 7\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 8\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 9\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 10\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-with-fragment01-input.svelte",
    "content": "<script>\n\tconst value = \"/foo#section\";\n\tconst href = \"/foo#section\";\n</script>\n\n<a href=\"/foo#section\">Click me!</a>\n<a href={'/foo#section'}>Click me!</a>\n<a href={'/' + 'foo#section'}>Click me!</a>\n<a href={value}>Click me!</a>\n<a {href}>Click me!</a>\n<a href={'/foo#section:42'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-without-resolve01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 6\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 7\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 8\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 9\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 10\n  column: 4\n  suggestions: null\n- message: Unexpected href link without resolve().\n  line: 11\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-without-resolve01-input.svelte",
    "content": "<script>\n\tconst value = \"/foo\";\n\tconst href = \"/foo\";\n</script>\n\n<a href=\"/foo\">Click me!</a>\n<a href={'/foo'}>Click me!</a>\n<a href={'/' + 'foo'}>Click me!</a>\n<a href={value}>Click me!</a>\n<a {href}>Click me!</a>\n<a href={'/user:42'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-aliased01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-aliased01-input.svelte",
    "content": "<script>\n\timport { pushState as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-namespace-import01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 4\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as navigation from '$app/navigation';\n\n\tnavigation.pushState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-partial-resolve01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 5\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-partial-resolve01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tpushState(resolve('/foo') + '/bar');\n\tpushState('/foo' + resolve('/bar'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-resolved-pathname-wrong-module01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 12\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-resolved-pathname-wrong-module01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { pushState } from '$app/navigation';\n\n\ttype ResolvedPathname = string;\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tpushState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-string-prop01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 10\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-string-prop01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { pushState } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: string;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tpushState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-ternary-resolve-absolute01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 7\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 8\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 9\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-ternary-resolve-absolute01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tconst condition = true;\n\n\tpushState(condition ? resolve('/foo') : 'https://example.com');\n\tpushState(condition ? '' : 'https://example.com');\n\tpushState(condition ? 'https://example.com' : 'https://other.com');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-ternary-resolve-plain01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 7\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 8\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 9\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 11\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 13\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-ternary-resolve-plain01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tconst condition = true;\n\n\tpushState(condition ? resolve('/foo') : '/bar');\n\tpushState(condition ? '/foo' : resolve('/bar'));\n\tpushState(condition ? '/foo' : '/bar');\n\tconst url = condition ? resolve('/foo') : '/bar';\n\tpushState(url);\n\tconst plain = '/bar';\n\tpushState(condition ? resolve('/foo') : plain);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-unresolved-pathname01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 12\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-unresolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Pathname } from '$app/types';\n\n\timport { pushState } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: Pathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tpushState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-without-resolve01-errors.yaml",
    "content": "- message: Unexpected pushState() call without resolve().\n  line: 6\n  column: 12\n  suggestions: null\n- message: Unexpected pushState() call without resolve().\n  line: 7\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/pushState-without-resolve01-input.svelte",
    "content": "<script>\n\timport { pushState } from '$app/navigation';\n\n\tconst value = \"/foo\";\n\n\tpushState('/foo');\n\tpushState(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/recursive-loop01-errors.yaml",
    "content": "- message: Unexpected href link without resolve().\n  line: 6\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/recursive-loop01-input.svelte",
    "content": "<script>\n\tconst a = value;\n\tconst value = a;\n</script>\n\n<a href={value}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-aliased01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 4\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-aliased01-input.svelte",
    "content": "<script>\n\timport { replaceState as alias } from '$app/navigation';\n\n\talias('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-namespace-import01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 4\n  column: 26\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as navigation from '$app/navigation';\n\n\tnavigation.replaceState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-partial-resolve01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 6\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-partial-resolve01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState(resolve('/foo') + '/bar');\n\treplaceState('/foo' + resolve('/bar'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-resolved-pathname-wrong-module01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 12\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-resolved-pathname-wrong-module01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { replaceState } from '$app/navigation';\n\n\ttype ResolvedPathname = string;\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\treplaceState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-string-prop01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 10\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-string-prop01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { replaceState } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: string;\n\t}\n\n\tconst { href }: Props = $props();\n\n\treplaceState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-ternary-resolve-absolute01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 7\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 8\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 9\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-ternary-resolve-absolute01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\tconst condition = true;\n\n\treplaceState(condition ? resolve('/foo') : 'https://example.com');\n\treplaceState(condition ? '' : 'https://example.com');\n\treplaceState(condition ? 'https://example.com' : 'https://other.com');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-ternary-resolve-plain01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 7\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 8\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 9\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 11\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 13\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-ternary-resolve-plain01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\tconst condition = true;\n\n\treplaceState(condition ? resolve('/foo') : '/bar');\n\treplaceState(condition ? '/foo' : resolve('/bar'));\n\treplaceState(condition ? '/foo' : '/bar');\n\tconst url = condition ? resolve('/foo') : '/bar';\n\treplaceState(url);\n\tconst plain = '/bar';\n\treplaceState(condition ? resolve('/foo') : plain);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-unresolved-pathname01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 12\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-unresolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Pathname } from '$app/types';\n\n\timport { replaceState } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: Pathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\treplaceState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-without-resolve01-errors.yaml",
    "content": "- message: Unexpected replaceState() call without resolve().\n  line: 6\n  column: 15\n  suggestions: null\n- message: Unexpected replaceState() call without resolve().\n  line: 7\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/replaceState-without-resolve01-input.svelte",
    "content": "<script>\n\timport { replaceState } from '$app/navigation';\n\n\tconst value = \"/foo\";\n\n\treplaceState('/foo');\n\treplaceState(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/goto-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tgoto(paths.resolve('/foo/'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/goto-resolve-aliased01-input.svelte",
    "content": "<script>\n\timport { resolve as alias } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tgoto(alias('/foo/'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/goto-resolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\timport { goto } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tgoto(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/goto-resolved-pathname02-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\timport { goto } from '$app/navigation';\n\n\tfunction navigate(href: ResolvedPathname) {\n\t\tgoto(href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/goto-resolved01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tconst value = resolve('/foo/');\n\n\tgoto(resolve('/foo/'));\n\tgoto(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/goto-ternary-both-resolve01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { goto } from '$app/navigation';\n\n\tconst condition = true;\n\tconst url = condition ? resolve('/foo') : resolve('/bar');\n\tconst resolved = resolve('/foo');\n\n\tgoto(condition ? resolve('/foo') : resolve('/bar'));\n\tgoto(url);\n\tgoto(condition ? resolved : resolve('/bar'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignoreGoto/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreGoto\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignoreGoto/goto-ignored01-input.svelte",
    "content": "<script>\n\timport { goto } from '$app/navigation';\n\n\tgoto('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignoreLinks/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreLinks\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignoreLinks/link-ignored01-input.svelte",
    "content": "<a href=\"/foo\">Click me!</a>\n<a href={'/foo'}>Click me!</a>\n<a href={'/' + 'foo'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignorePushState/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignorePushState\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignorePushState/pushState-ignored01-input.svelte",
    "content": "<script>\n\timport { pushState } from '$app/navigation';\n\n\tpushState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignoreReplaceState/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreReplaceState\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/ignoreReplaceState/replaceState-ignored01-input.svelte",
    "content": "<script>\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState('/foo');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-absolute-url01-input.svelte",
    "content": "<script>\n\tconst protocol = 'https';\n\n\tconst value = \"https://svelte.dev\";\n\tconst href = \"https://svelte.dev\";\n</script>\n\n<a href=\"http://svelte.dev\">Click me!</a>\n<a href=\"https://svelte.dev\">Click me!</a>\n<a href={'http://svelte.dev'}>Click me!</a>\n<a href={'https://svelte.dev'}>Click me!</a>\n<a href={'http://svelte' + '.dev'}>Click me!</a>\n<a href={'https://svelte' + '.dev'}>Click me!</a>\n<a href={'http' + '://svelte.dev'}>Click me!</a>\n<a href={'https' + '://svelte.dev'}>Click me!</a>\n<a href={`${protocol}://svelte.dev`}>Click me!</a>\n<a href=\"mailto:user@example.com\">Click me!</a>\n<a href=\"tel:+123456789\">Click me!</a>\n<a href={value}>Click me!</a>\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-asset-aliased01-input.svelte",
    "content": "<script>\n\timport { asset as alias } from '$app/paths';\n</script>\n\n<a href={alias('/foo/')}>Click me!</a>;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-asset01-input.svelte",
    "content": "<script>\n\timport { asset } from '$app/paths';\n\n\tconst value = asset('/foo/');\n</script>\n\n<a href={asset('/foo/')}>Click me!</a>\n<a href={value}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-fragment-url01-input.svelte",
    "content": "<script>\n\tconst section = 'sectionName';\n\n\tconst value = '#section';\n\tconst href = '#section';\n</script>\n\n<a href=\"#\">Click me!</a>\n<a href=\"#section\">Click me!</a>\n<a href={'#section'}>Click me!</a>\n<a href={'#' + 'section'}>Click me!</a>\n<a href={'#' + section}>Click me!</a>\n<a href={`#${section}`}>Click me!</a>\n<a href={'#user:42'}>Click me!</a>\n<a href={value}>Click me!</a>\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n</script>\n\n<a href={paths.resolve('/foo/')}>Click me!</a>;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-nullish01-input.svelte",
    "content": "<script>\n\tconst one = undefined;\n\tconst two = null;\n\tconst href = null;\n</script>\n\n<a href={undefined}>Click me!</a>\n<a href={null}>Click me!</a>\n<a href={one}>Click me!</a>\n<a href={two}>Click me!</a>\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-rel-external01-input.svelte",
    "content": "<script>\n\tconst value = 'whatever';\n\tconst href = 'whatever';\n\tconst external = 'external';\n\tconst rel = 'external';\n</script>\n\n<a href=\"whatever\" rel=\"external\">Click me!</a>\n<a href={'whatever'} rel=\"external\">Click me!</a>\n<a href={value} rel=\"external\">Click me!</a>\n<a {href} rel=\"external\">Click me!</a>\n<a href=\"whatever\" rel={'external'}>Click me!</a>\n<a href=\"whatever\" rel={external}>Click me!</a>\n<a href=\"whatever\" {rel}>Click me!</a>\n<a href=\"whatever\" rel=\"noopener external noreferrer\">Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-resolve-aliased01-input.svelte",
    "content": "<script>\n\timport { resolve as alias } from '$app/paths';\n</script>\n\n<a href={alias('/foo/')}>Click me!</a>;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-resolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n</script>\n\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-resolved-pathname02-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\tconst href: ResolvedPathname = '/test';\n</script>\n\n<a {href}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-resolved01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\n\tconst value = resolve('/foo/');\n\tconst href = resolve('/foo/');\n</script>\n\n<a href={resolve('/foo/')}>Click me!</a>\n<a href={value}>Click me!</a>\n<a {href}>Click me!</a>\n\n<!-- Testing for attribute without value. -->\n<input type=\"text\" disabled />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-ternary-absolute-fragment01-input.svelte",
    "content": "<script>\n\tconst condition = true;\n\tconst url = condition ? 'https://example.com' : '#section';\n\tconst absUrl = 'https://example.com';\n</script>\n\n<a href={condition ? 'https://example.com' : '#section'}>Click me!</a>\n<a href={condition ? '#section' : null}>Click me!</a>\n<a href={condition ? 'https://example.com' : null}>Click me!</a>\n<a href={url}>Click me!</a>\n<a href={condition ? absUrl : '#section'}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-ternary-resolve-absolute01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\n\tconst condition = true;\n\tconst url = condition ? resolve('/foo') : 'https://example.com';\n\tconst absUrl = 'https://example.com';\n</script>\n\n<a href={condition ? resolve('/foo') : 'https://example.com'}>Click me!</a>\n<a href={condition ? 'https://example.com' : resolve('/foo')}>Click me!</a>\n<a href={condition ? 'https://example.com' : 'https://other.com'}>Click me!</a>\n<a href={url}>Click me!</a>\n<a href={condition ? resolve('/foo') : absUrl}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-ternary-resolve-asset01-input.svelte",
    "content": "<script>\n\timport { resolve, asset } from '$app/paths';\n\n\tconst condition = true;\n\tconst url = condition ? resolve('/foo') : asset('/bar');\n\tconst assetUrl = asset('/bar');\n</script>\n\n<a href={condition ? resolve('/foo') : asset('/bar')}>Click me!</a>\n<a href={condition ? asset('/bar') : resolve('/foo')}>Click me!</a>\n<a href={condition ? asset('/foo') : asset('/bar')}>Click me!</a>\n<a href={url}>Click me!</a>\n<a href={condition ? resolve('/foo') : assetUrl}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-ternary-resolve-fragment01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\n\tconst condition = true;\n\tconst url = condition ? resolve('/foo') : '#section';\n\tconst fragment = '#section';\n</script>\n\n<a href={condition ? resolve('/foo') : '#section'}>Click me!</a>\n<a href={condition ? '#section' : resolve('/foo')}>Click me!</a>\n<a href={condition ? '#section' : '#other'}>Click me!</a>\n<a href={url}>Click me!</a>\n<a href={condition ? resolve('/foo') : fragment}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/link-ternary-resolve-nullish01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\n\tconst condition = true;\n\tconst url = condition ? resolve('/foo') : null;\n\tconst nullish = null;\n</script>\n\n<a href={condition ? resolve('/foo') : null}>Click me!</a>\n<a href={condition ? null : resolve('/foo')}>Click me!</a>\n<a href={condition ? null : undefined}>Click me!</a>\n<a href={url}>Click me!</a>\n<a href={condition ? resolve('/foo') : nullish}>Click me!</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-empty-url01-input.svelte",
    "content": "<script>\n\timport { pushState } from '$app/navigation';\n\n\tpushState('');\n\tpushState(``);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tpushState(paths.resolve('/foo/'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-resolve-aliased01-input.svelte",
    "content": "<script>\n\timport { resolve as alias } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tpushState(alias('/foo/'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-resolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\timport { pushState } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\tpushState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-resolved-pathname02-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\timport { pushState } from '$app/navigation';\n\n\tfunction navigate(href: ResolvedPathname) {\n\t\tpushState(href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-resolved01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tconst value = resolve('/foo/');\n\n\tpushState(resolve('/foo/'));\n\tpushState(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/pushState-ternary-resolve-empty01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { pushState } from '$app/navigation';\n\n\tconst condition = true;\n\n\tpushState(condition ? resolve('/foo') : '');\n\tpushState(condition ? '' : resolve('/foo'));\n\tpushState(condition ? '' : '');\n\tconst url = condition ? resolve('/foo') : '';\n\tpushState(url);\n\tconst resolved = resolve('/foo');\n\tpushState(condition ? resolved : '');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-empty-url01-input.svelte",
    "content": "<script>\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState('');\n\treplaceState(``);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-namespace-import01-input.svelte",
    "content": "<script>\n\timport * as paths from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState(paths.resolve('/foo/'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-resolve-aliased01-input.svelte",
    "content": "<script>\n\timport { resolve as alias } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\treplaceState(alias('/foo/'));\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-resolved-pathname01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\timport { replaceState } from '$app/navigation';\n\n\tinterface Props {\n\t\thref: ResolvedPathname;\n\t}\n\n\tconst { href }: Props = $props();\n\n\treplaceState(href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-resolved-pathname02-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ResolvedPathname } from '$app/types';\n\n\timport { replaceState } from '$app/navigation';\n\n\tfunction navigate(href: ResolvedPathname) {\n\t\treplaceState(href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-resolved01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\tconst value = resolve('/foo/');\n\n\treplaceState(resolve('/foo/'));\n\treplaceState(value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/valid/replaceState-ternary-resolve-empty01-input.svelte",
    "content": "<script>\n\timport { resolve } from '$app/paths';\n\timport { replaceState } from '$app/navigation';\n\n\tconst condition = true;\n\n\treplaceState(condition ? resolve('/foo') : '');\n\treplaceState(condition ? '' : resolve('/foo'));\n\treplaceState(condition ? '' : '');\n\tconst url = condition ? resolve('/foo') : '';\n\treplaceState(url);\n\tconst resolved = resolve('/foo');\n\treplaceState(condition ? resolved : '');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/array01-errors.yaml",
    "content": "- message: Unexpected array in event handler.\n  line: 5\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/array01-input.svelte",
    "content": "<script>\n\tconst a = 'hello!';\n</script>\n\n<button on:click={[a]} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/class01-errors.yaml",
    "content": "- message: Unexpected class in event handler.\n  line: 4\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/class01-input.svelte",
    "content": "<script>\n</script>\n\n<button on:click={class B {}} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/object01-errors.yaml",
    "content": "- message: Unexpected object in event handler.\n  line: 5\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/object01-input.svelte",
    "content": "<script>\n\tfunction fn() {}\n</script>\n\n<button on:click={{ fn }} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/string01-errors.yaml",
    "content": "- message: Unexpected string value in event handler.\n  line: 6\n  column: 19\n  suggestions: null\n- message: Unexpected string value in event handler.\n  line: 7\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/string01-input.svelte",
    "content": "<script>\n\tconst a = 'hello!';\n\tconst b = `${a} world`;\n</script>\n\n<button on:click={a} />\n<button on:click={b} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/array01-errors.yaml",
    "content": "- message: Unexpected array in event handler.\n  line: 5\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/array01-input.svelte",
    "content": "<script>\n\tconst a = 'hello!';\n</script>\n\n<button onclick={[a]} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/class01-errors.yaml",
    "content": "- message: Unexpected class in event handler.\n  line: 4\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/class01-input.svelte",
    "content": "<script>\n</script>\n\n<button onclick={class B {}} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/object01-errors.yaml",
    "content": "- message: Unexpected object in event handler.\n  line: 5\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/object01-input.svelte",
    "content": "<script>\n\tfunction fn() {}\n</script>\n\n<button onclick={{ fn }} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/requirements.json",
    "content": "{\n\t\"svelte\": \"^5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/string01-errors.yaml",
    "content": "- message: Unexpected string value in event handler.\n  line: 6\n  column: 18\n  suggestions: null\n- message: Unexpected string value in event handler.\n  line: 7\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/string01-input.svelte",
    "content": "<script>\n\tconst a = 'hello!';\n\tconst b = `${a} world`;\n</script>\n\n<button onclick={a} />\n<button onclick={b} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/value01-errors.yaml",
    "content": "- message: Unexpected number value in event handler.\n  line: 7\n  column: 18\n  suggestions: null\n- message: Unexpected bigint value in event handler.\n  line: 8\n  column: 18\n  suggestions: null\n- message: Unexpected regex value in event handler.\n  line: 9\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/svelte5/value01-input.svelte",
    "content": "<script>\n\tconst a = 42;\n\tconst b = 42n;\n\tconst c = /reg/;\n</script>\n\n<button onclick={a} />\n<button onclick={b} />\n<button onclick={c} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/value01-errors.yaml",
    "content": "- message: Unexpected number value in event handler.\n  line: 7\n  column: 19\n  suggestions: null\n- message: Unexpected bigint value in event handler.\n  line: 8\n  column: 19\n  suggestions: null\n- message: Unexpected regex value in event handler.\n  line: 9\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/invalid/value01-input.svelte",
    "content": "<script>\n\tconst a = 42;\n\tconst b = 42n;\n\tconst c = /reg/;\n</script>\n\n<button on:click={a} />\n<button on:click={b} />\n<button on:click={c} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/valid/bind01-input.svelte",
    "content": "<script>\n</script>\n\n<input bind:value={''} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/valid/function01-input.svelte",
    "content": "<script>\n\tlet a = 'hello!';\n\tfunction fn() {}\n</script>\n\n<button on:click={() => a} />\n<button on:click={fn} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/valid/null01-input.svelte",
    "content": "<script>\n\tlet a = null;\n</script>\n\n<button on:click={null} />\n<button on:click={a} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/valid/svelte5/function01-input.svelte",
    "content": "<script>\n\tlet a = 'hello!';\n\tfunction fn() {}\n</script>\n\n<button onclick={() => a} />\n<button onclick={fn} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/valid/svelte5/null01-input.svelte",
    "content": "<script>\n\tlet a = null;\n</script>\n\n<button onclick={null} />\n<button onclick={a} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-not-function-handler/valid/svelte5/requirements.json",
    "content": "{\n\t\"svelte\": \"^5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/array01-errors.yaml",
    "content": "- message: Unexpected array in text mustache interpolation.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Unexpected array in text mustache interpolation.\n  line: 6\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/array01-input.svelte",
    "content": "<script>\n\tlet a = 'hello!';\n</script>\n\n{[a]}\n<input class=\"{[a]} a\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/class01-errors.yaml",
    "content": "- message: Unexpected class in text mustache interpolation.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Unexpected class in text mustache interpolation.\n  line: 6\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/class01-input.svelte",
    "content": "<script>\n</script>\n\n{class A {}}\n\n<input class=\"{class B {}} a\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/function01-errors.yaml",
    "content": "- message: Unexpected function in text mustache interpolation.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Unexpected function in text mustache interpolation.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Unexpected function in text mustache interpolation.\n  line: 9\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/function01-input.svelte",
    "content": "<script>\n\tlet a = 'hello!';\n</script>\n\n{() => a}\n{function () {\n\treturn a;\n}}\n<input class=\"{() => a} a\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/object01-errors.yaml",
    "content": "- message: Unexpected object in text mustache interpolation.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Unexpected object in text mustache interpolation.\n  line: 6\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/invalid/object01-input.svelte",
    "content": "<script>\n\tlet a = 'hello!';\n</script>\n\n{{ a }}\n<input class=\"{{ a }} a\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/valid/object01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet a = 'hello!';\n</script>\n\n<MyComponent prop={{ a }} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-object-in-text-mustaches/valid/string01-input.svelte",
    "content": "<script>\n\tlet a = 'hello!';\n</script>\n\n{a}\n<input class=\"{a} a\" />\n<input class:foo={{ a }} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-raw-special-elements/invalid/test01-errors.yaml",
    "content": "- message: Special head element is deprecated in v5, use svelte:head instead.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Special body element is deprecated in v5, use svelte:body instead.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Special window element is deprecated in v5, use svelte:window instead.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Special document element is deprecated in v5, use svelte:document instead.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Special element element is deprecated in v5, use svelte:element instead.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Special options element is deprecated in v5, use svelte:options instead.\n  line: 6\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-raw-special-elements/invalid/test01-input.svelte",
    "content": "<head></head>\n<body></body>\n<window></window>\n<document></document>\n<element this={{}}></element>\n<options></options>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-raw-special-elements/invalid/test01-output.svelte",
    "content": "<svelte:head></svelte:head>\n<svelte:body></svelte:body>\n<svelte:window></svelte:window>\n<svelte:document></svelte:document>\n<svelte:element this={{}}></svelte:element>\n<svelte:options></svelte:options>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-raw-special-elements/valid/test01-input.svelte",
    "content": "<svelte:options />\n\n<svelte:body />\n<svelte:document />\n<svelte:element this={{}}></svelte:element>\n<svelte:head></svelte:head>\n\n<svelte:window />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-functions/invalid/test01-errors.yaml",
    "content": "- message: Do not create functions inside reactive statements unless absolutely\n    necessary.\n  line: 3\n  column: 5\n  suggestions:\n    - desc: Move the function out of the reactive statement\n      messageId: fixReactiveFns\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n            const arrow = () => {}\n            $: fn = function() {}\n            $:nospace = () => {}\n        </script>\n- message: Do not create functions inside reactive statements unless absolutely\n    necessary.\n  line: 4\n  column: 5\n  suggestions:\n    - desc: Move the function out of the reactive statement\n      messageId: fixReactiveFns\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n            $: arrow = () => {}\n            const fn = function() {}\n            $:nospace = () => {}\n        </script>\n- message: Do not create functions inside reactive statements unless absolutely\n    necessary.\n  line: 5\n  column: 5\n  suggestions:\n    - desc: Move the function out of the reactive statement\n      messageId: fixReactiveFns\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n            $: arrow = () => {}\n            $: fn = function() {}\n            const nospace = () => {}\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-functions/invalid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n    $: arrow = () => {}\n    $: fn = function() {}\n    $:nospace = () => {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-functions/valid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n    const arrow = () => {}\n    const fn = function() { }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-literals/invalid/test01-errors.yaml",
    "content": "- message: Do not assign literal values inside reactive statements unless\n    absolutely necessary.\n  line: 3\n  column: 5\n  suggestions:\n    - desc: Move the literal out of the reactive statement into an assignment\n      messageId: fixReactiveLiteral\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n            let foo = \"foo\"\n            $: bar = [];\n            $: baz = {};\n        </script>\n- message: Do not assign literal values inside reactive statements unless\n    absolutely necessary.\n  line: 4\n  column: 5\n  suggestions:\n    - desc: Move the literal out of the reactive statement into an assignment\n      messageId: fixReactiveLiteral\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n            $: foo = \"foo\";\n            let bar = []\n            $: baz = {};\n        </script>\n- message: Do not assign literal values inside reactive statements unless\n    absolutely necessary.\n  line: 5\n  column: 5\n  suggestions:\n    - desc: Move the literal out of the reactive statement into an assignment\n      messageId: fixReactiveLiteral\n      output: |\n        <!-- prettier-ignore -->\n        <script>\n            $: foo = \"foo\";\n            $: bar = [];\n            let baz = {}\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-literals/invalid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n    $: foo = \"foo\";\n    $: bar = [];\n    $: baz = {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-literals/valid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n    $: foo = `${\"bar\"}baz`\n    $: bar = [ \"bar\" ]\n    $: baz = { qux : true }\n\n    let qux;\n    \n    qux = 1;\n    qux = [];\n    qux = {};\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/array01-errors.yaml",
    "content": "- message: Assignment to reactive value 'array1'.\n  line: 15\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array2'.\n  line: 16\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array3'.\n  line: 17\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array4'.\n  line: 18\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array5'.\n  line: 19\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array6'.\n  line: 20\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array7'.\n  line: 21\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array8'.\n  line: 22\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'array9'.\n  line: 23\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/array01-input.svelte",
    "content": "<script>\n\tlet rerender = 0;\n\tlet value = 'abc123';\n\t$: array1 = [...value];\n\t$: array2 = [...value];\n\t$: array3 = [...value];\n\t$: array4 = [...value];\n\t$: array5 = [...value];\n\t$: array6 = [...value];\n\t$: array7 = [...value];\n\t$: array8 = [...value];\n\t$: array9 = [...value];\n\n\tfunction handleClick() {\n\t\tarray1.push(42);\n\t\tarray2.pop();\n\t\tarray3.shift();\n\t\tarray4.unshift(42);\n\t\tarray5.reverse();\n\t\tarray6.splice(1, 1);\n\t\tarray7.sort();\n\t\tarray8.copyWithin(0, 3, 4);\n\t\tarray9.fill(42);\n\t\trerender++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n\n<input bind:value />\n\n{JSON.stringify(array1) +\n\tJSON.stringify(array2) +\n\tJSON.stringify(array3) +\n\tJSON.stringify(array4) +\n\tJSON.stringify(array5) +\n\tJSON.stringify(array6) +\n\tJSON.stringify(array7) +\n\tJSON.stringify(array8) +\n\tJSON.stringify(array9) +\n\trerender}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/bind-dir01-errors.yaml",
    "content": "- message: Assignment to reactive value 'reactiveValue'.\n  line: 6\n  column: 22\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/bind-dir01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = value * 2;\n</script>\n\n<input type=\"number\" bind:value={reactiveValue} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/conditional01-errors.yaml",
    "content": "- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/conditional01-input.svelte",
    "content": "<script>\n\tlet object = { value: 0 };\n\t$: reactiveValue = { value: object.value * 2 };\n\n\tfunction handleClick() {\n\t\tlet a = {};\n\t\t(a ? reactiveValue : {}).value = 42;\n\t\t// OK\n\t\t(reactiveValue ? a : {}).value = 42;\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/delete01-errors.yaml",
    "content": "- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/delete01-input.svelte",
    "content": "<script>\n\tlet object = { value: 0 };\n\t$: reactiveValue = { value: object.value * 2 };\n\n\tfunction handleClick() {\n\t\tdelete object.value;\n\t\tdelete reactiveValue.value;\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/destructure01-errors.yaml",
    "content": "- message: Assignment to reactive value 'reactiveValue'.\n  line: 9\n  column: 4\n  suggestions: null\n- message: Assignment to reactive value 'reactiveObject'.\n  line: 10\n  column: 4\n  suggestions: null\n- message: Assignment to reactive value 'reactiveValue'.\n  line: 12\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'reactiveArray'.\n  line: 13\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/destructure01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = value * 2;\n\t$: reactiveObject = { value };\n\t$: reactiveArray = [value];\n\n\tfunction handleClick() {\n\t\tlet o = { foo: 42 };\n\t\t({ foo: reactiveValue } = o);\n\t\t({ ...reactiveObject } = o);\n\t\tlet a = [42];\n\t\t[reactiveValue] = a;\n\t\t[...reactiveArray] = a;\n\t}\n</script>\n\n{reactiveValue}\n{JSON.stringify(reactiveObject)}\n{JSON.stringify(reactiveArray)}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/for-in01-errors.yaml",
    "content": "- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 8\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/for-in01-input.svelte",
    "content": "<script>\n\tlet rerender = 0;\n\tlet value = 'a';\n\t$: reactiveValue = { key: value + value };\n\tlet object = { key: 42 };\n\n\tfunction handleClick() {\n\t\tfor (reactiveValue.key in object) {\n\t\t\tconsole.log(reactiveValue.key);\n\t\t}\n\t\trerender++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n\n<input bind:value />\n\n{reactiveValue.key + rerender}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/for-of01-errors.yaml",
    "content": "- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 8\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/for-of01-input.svelte",
    "content": "<script>\n\tlet rerender = 0;\n\tlet value = 'a';\n\t$: reactiveValue = { key: value + value };\n\tlet object = [42];\n\n\tfunction handleClick() {\n\t\tfor (reactiveValue.key of object) {\n\t\t\tconsole.log(reactiveValue.key);\n\t\t}\n\t\trerender++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n\n<input bind:value />\n\n{reactiveValue.key + rerender}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/member01-errors.yaml",
    "content": "- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 6\n  column: 3\n  suggestions: null\n- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/member01-input.svelte",
    "content": "<script>\n\tlet object = { value: 0 };\n\t$: reactiveValue = { value: object.value * 2, foo: { bar: object.value * 2 } };\n\n\tfunction handleClick() {\n\t\treactiveValue.value = 42;\n\t\t(reactiveValue?.foo).bar = 42;\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/props-false/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"props\": false\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/props-false/test01-errors.yaml",
    "content": "- message: Assignment to reactive value 'reactiveValue'.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'reactiveValue'.\n  line: 15\n  column: 22\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/props-false/test01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = value * 2;\n\n\tfunction handleClick() {\n\t\t/* ✗ BAD */\n\t\treactiveValue++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- ✗ BAD -->\n<input type=\"number\" bind:value={reactiveValue} />\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/props-true01-errors.yaml",
    "content": "- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 9\n  column: 3\n  suggestions: null\n- message: Assignment to property of reactive value 'reactiveValue'.\n  line: 16\n  column: 22\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/props-true01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = { value: value * 2 };\n\n\tfunction handleClick() {\n\t\t/* ✓ GOOD */\n\t\tvalue++;\n\t\t/* ✗ BAD */\n\t\treactiveValue.value++;\n\t}\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- ✗ BAD -->\n<input type=\"number\" bind:value={reactiveValue.value} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/test01-errors.yaml",
    "content": "- message: Assignment to reactive value 'reactiveValue'.\n  line: 7\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'reactiveValue'.\n  line: 8\n  column: 3\n  suggestions: null\n- message: Assignment to reactive value 'reactiveValue'.\n  line: 16\n  column: 22\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/invalid/test01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = value * 2;\n\n\tfunction handleClick() {\n\t\t/* ✗ BAD */\n\t\treactiveValue = value * 3;\n\t\treactiveValue++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- ✗ BAD -->\n<input type=\"number\" bind:value={reactiveValue} />\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/array01-input.svelte",
    "content": "<script>\n\tlet rerender = 0;\n\tlet value = 'abc123';\n\t$: array1 = [...value];\n\t$: array2 = [...value];\n\t$: array3 = [...value];\n\t$: array4 = [...value];\n\t$: array5 = [...value];\n\t$: array6 = [...value];\n\t$: array7 = [...value];\n\t$: array8 = [...value];\n\t$: array9 = [...value];\n\n\tfunction handleClick() {\n\t\t[...array1].push(42);\n\t\tarray2.slice().pop();\n\t\tarray3.concat().shift();\n\t\tarray4.filter(Boolean).unshift(42);\n\t\tarray5.map((a) => a).reverse();\n\t\tarray6.flat().splice(1, 1);\n\t\tarray7.flatMap((a) => a).sort();\n\t\tObject.keys(array8).copyWithin(0, 3, 4);\n\t\tObject.values(array9).fill(42);\n\t\trerender++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n\n<input bind:value />\n\n{JSON.stringify(array1) +\n\tJSON.stringify(array2) +\n\tJSON.stringify(array3) +\n\tJSON.stringify(array4) +\n\tJSON.stringify(array5) +\n\tJSON.stringify(array6) +\n\tJSON.stringify(array7) +\n\tJSON.stringify(array8) +\n\tJSON.stringify(array9) +\n\trerender}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/assign-right01-input.svelte",
    "content": "<script>\n\tlet object = 0;\n\t$: reactiveValue = value * 2;\n\tlet foo;\n\n\tfunction handleClick() {\n\t\tfoo = reactiveValue;\n\t\tconsole.log(foo);\n\t\tlet bar = reactiveValue;\n\t\tconsole.log(bar);\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/destructure01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = value * 2;\n\n\tfunction handleClick() {\n\t\tlet o = { 4: 42 };\n\t\tlet a;\n\t\t({ [reactiveValue]: a } = o);\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/for-in01-input.svelte",
    "content": "<script>\n\tlet rerender = 0;\n\tlet value = 'a';\n\t$: reactiveValue = { key: value + value };\n\tlet object = { key: 42 };\n\n\tfunction handleClick() {\n\t\tfor (object.key in reactiveValue) {\n\t\t\tconsole.log(reactiveValue.key);\n\t\t}\n\t\trerender++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n\n<input bind:value />\n\n{reactiveValue.key + rerender}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/for-of01-input.svelte",
    "content": "<script>\n\tlet rerender = 0;\n\tlet value = 'a';\n\t$: reactiveValue = [value + value];\n\tlet object = 2;\n\n\tfunction handleClick() {\n\t\tfor (object of reactiveValue) {\n\t\t\tconsole.log(object);\n\t\t}\n\t\trerender++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n\n<input bind:value />\n\n{reactiveValue[0] + rerender}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/member-key01-input.svelte",
    "content": "<script>\n\tlet object = { value: 0 };\n\t$: reactiveValue = { key: 'value', value: object.value * 2 };\n\n\tfunction handleClick() {\n\t\tobject[reactiveValue.key] = 42;\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/on-dir01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveFn = value % 2 ? () => console.log('odd') : () => console.log('even');\n</script>\n\n<button on:click={reactiveFn} />\n<input type=\"number\" bind:value />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/props-false/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"props\": false\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/props-false/props-false01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = { value: value * 2 };\n\n\tfunction handleClick() {\n\t\t/* ✓ GOOD */\n\t\tvalue++;\n\t\t/* ✗ BAD */\n\t\treactiveValue.value++;\n\t}\n</script>\n\n<!-- ✓ GOOD -->\n<input type=\"number\" bind:value />\n<!-- ✗ BAD -->\n<input type=\"number\" bind:value={reactiveValue.value} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/reactive-like01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\tlet reactiveLikeValue;\n\t$: reactiveLikeValue = value * 2;\n\n\tfunction handleClick() {\n\t\treactiveLikeValue++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n<input type=\"number\" bind:value />\n\n{reactiveLikeValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/reactive-like02-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\tlet reactiveLikeValue;\n\t$: {\n\t\treactiveLikeValue = value * 2;\n\t}\n\n\tfunction handleClick() {\n\t\treactiveLikeValue++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n<input type=\"number\" bind:value />\n\n{reactiveLikeValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/test01-input.svelte",
    "content": "<script>\n\tlet value = 0;\n\t$: reactiveValue = value * 2;\n\n\tfunction handleClick() {\n\t\t/* ✓ GOOD */\n\t\tvalue++;\n\t}\n</script>\n\n<button on:click={handleClick}>Click Me</button>\n<input type=\"number\" bind:value />\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-reactive-reassign/valid/typeof01-input.svelte",
    "content": "<script>\n\tlet object = { value: 0 };\n\t$: reactiveValue = { value: object.value * 2 };\n\n\tfunction handleClick() {\n\t\tconsole.log(typeof reactiveValue.value);\n\t}\n</script>\n\n{reactiveValue}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/invalid/array-config.json",
    "content": "{\n\t\"options\": [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/invalid/array-errors.yaml",
    "content": "- message: Unexpected use of forbidden HTML element h1.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unexpected use of forbidden HTML element h2.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unexpected use of forbidden HTML element h3.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Unexpected use of forbidden HTML element h4.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Unexpected use of forbidden HTML element h5.\n  line: 5\n  column: 1\n  suggestions: null\n- message: Unexpected use of forbidden HTML element h6.\n  line: 6\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/invalid/array-input.svelte",
    "content": "<h1>Main Title - H1</h1>\n<h2>Subtitle - H2</h2>\n<h3>Subsection Title - H3</h3>\n<h4>Sub-Subsection Title - H4</h4>\n<h5>Minor Title - H5</h5>\n<h6>Minor Subtitle - H6</h6>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/invalid/object-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"elements\": [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n\t\t\t\"message\": \"Prefer use of our custom <Heading /> component\"\n\t\t},\n\t\t{\n\t\t\t\"elements\": [\"marquee\"],\n\t\t\t\"message\": \"Do not use deprecated HTML tags\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/invalid/object-errors.yaml",
    "content": "- message: Prefer use of our custom <Heading /> component\n  line: 1\n  column: 1\n  suggestions: null\n- message: Prefer use of our custom <Heading /> component\n  line: 2\n  column: 1\n  suggestions: null\n- message: Prefer use of our custom <Heading /> component\n  line: 3\n  column: 1\n  suggestions: null\n- message: Prefer use of our custom <Heading /> component\n  line: 4\n  column: 1\n  suggestions: null\n- message: Prefer use of our custom <Heading /> component\n  line: 5\n  column: 1\n  suggestions: null\n- message: Prefer use of our custom <Heading /> component\n  line: 6\n  column: 1\n  suggestions: null\n- message: Do not use deprecated HTML tags\n  line: 8\n  column: 1\n  suggestions: null\n- message: Do not use deprecated HTML tags\n  line: 10\n  column: 1\n  suggestions: null\n- message: Do not use deprecated HTML tags\n  line: 12\n  column: 1\n  suggestions: null\n- message: Do not use deprecated HTML tags\n  line: 13\n  column: 2\n  suggestions: null\n- message: Do not use deprecated HTML tags\n  line: 17\n  column: 2\n  suggestions: null\n- message: Prefer use of our custom <Heading /> component\n  line: 21\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/invalid/object-input.svelte",
    "content": "<h1>Main Title - H1</h1>\n<h2>Subtitle - H2</h2>\n<h3>Subsection Title - H3</h3>\n<h4>Sub-Subsection Title - H4</h4>\n<h5>Minor Title - H5</h5>\n<h6>Minor Subtitle - H6</h6>\n\n<marquee>This text will scroll from right to left</marquee>\n\n<marquee direction=\"up\">This text will scroll from bottom to top</marquee>\n\n<marquee direction=\"down\" width=\"250\" height=\"200\" behavior=\"alternate\" style=\"border:solid\">\n\t<marquee behavior=\"alternate\"> This text will bounce </marquee>\n</marquee>\n\n<div>\n\t<marquee>This text will scroll from right to left</marquee>\n</div>\n\n<div>\n\t<h6>Minor Subtitle - H6</h6>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/valid/array-config.json",
    "content": "{\n\t\"options\": [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/valid/array-input.svelte",
    "content": "<div style=\"font-size: 2em; font-weight: bold;\">This is a title</div>\n<div style=\"font-size: 1.5em; font-weight: bold;\">This is a subtitle</div>\n<p>This is a paragraph. Some sample text goes here.</p>\n<ul>\n\t<li>This is</li>\n\t<li>a list item</li>\n</ul>\n<table>\n\t<tr>\n\t\t<td>Table Cell 1</td>\n\t\t<td>Table Cell 2</td>\n\t</tr>\n\t<tr>\n\t\t<td>Table Cell 3</td>\n\t\t<td>Table Cell 4</td>\n\t</tr>\n</table>\n<a href=\"https://example.com\">This is a hyperlink to example.com</a>\n<form>\n\t<label for=\"fname\">First name:</label><br />\n\t<input type=\"text\" id=\"fname\" name=\"fname\" /><br />\n\t<input type=\"submit\" value=\"Submit\" />\n</form>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/valid/object-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"elements\": [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n\t\t\t\"message\": \"Prefer use of our custom <Heading /> component\"\n\t\t},\n\t\t{\n\t\t\t\"elements\": [\"marquee\"],\n\t\t\t\"message\": \"Do not use deprecated HTML tags\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-restricted-html-elements/valid/object-input.svelte",
    "content": "<div style=\"font-size: 2em; font-weight: bold;\">This is a title</div>\n<div style=\"font-size: 1.5em; font-weight: bold;\">This is a subtitle</div>\n<p>This is a paragraph. Some sample text goes here.</p>\n<ul>\n\t<li>This is</li>\n\t<li>a list item</li>\n</ul>\n<table>\n\t<tr>\n\t\t<td>Table Cell 1</td>\n\t\t<td>Table Cell 2</td>\n\t</tr>\n\t<tr>\n\t\t<td>Table Cell 3</td>\n\t\t<td>Table Cell 4</td>\n\t</tr>\n</table>\n<a href=\"https://example.com\">This is a hyperlink to example.com</a>\n<form>\n\t<label for=\"fname\">First name:</label><br />\n\t<input type=\"text\" id=\"fname\" name=\"fname\" /><br />\n\t<input type=\"submit\" value=\"Submit\" />\n</form>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/invalid/ternary01-errors.yaml",
    "content": "- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 8\n  column: 13\n  suggestions: null\n- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 8\n  column: 36\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/invalid/ternary01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div\n\tstyle=\"\n    background-repeat: repeat;\n    {red ? `background: ${red}` : 'background: green'}\n  \"\n>\n\t...\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/invalid/test01-errors.yaml",
    "content": "- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 5\n  column: 45\n  suggestions: null\n- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 6\n  column: 45\n  suggestions: null\n- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 10\n  column: 5\n  suggestions: null\n- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 18\n  column: 5\n  suggestions: null\n- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 23\n  column: 46\n  suggestions: null\n- message: Unexpected shorthand 'background' after 'background-repeat'.\n  line: 24\n  column: 46\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/invalid/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div style:background-repeat=\"repeat\" style:background=\"green\">...</div>\n<div style:background-repeat=\"repeat\" style:background={red}>...</div>\n<div\n\tstyle=\"\n    background-repeat: repeat;\n    background: green;\n  \"\n>\n\t...\n</div>\n<div\n\tstyle=\"\n    background-repeat: repeat;\n    background: {red};\n  \"\n>\n\t...\n</div>\n<div style:background-repeat=\"repeat\" style=\"background: green\">...</div>\n<div style:background-repeat=\"repeat\" style=\"background: {red}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/valid/empty01-input.svelte",
    "content": "<script>\n</script>\n\n<div style=\"\">...</div>\n<div style>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/valid/ternary01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div\n\tstyle=\"\n    background-repeat: repeat;\n    {red ? `background-color: ${red}` : 'background-color: green'}\n  \"\n>\n\t...\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/valid/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div style:background={red}>...</div>\n<div style=\"background: green\">...</div>\n<div style:background-repeat=\"repeat\" style:background-color=\"green\">...</div>\n<div\n\tstyle=\"\n    background-repeat: repeat;\n    background-color: green;\n  \"\n>\n\t...\n</div>\n<div style:background-repeat=\"repeat\" style=\"background-color: green\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-shorthand-style-property-overrides/valid/test02-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n</script>\n\n<div style:background-repeat=\"repeat\" not-style=\"background: green\">...</div>\n<div style:background-repeat=\"repeat\" not-style=\"background: {red}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-spaces-around-equal-signs-in-attribute/invalid/test01-errors.yaml",
    "content": "- message: Unexpected spaces found around equal signs.\n  line: 3\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 4\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 5\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 6\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 8\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 10\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 11\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 12\n  column: 11\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 13\n  column: 15\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 13\n  column: 35\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 14\n  column: 17\n  suggestions: null\n- message: Unexpected spaces found around equal signs.\n  line: 16\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-spaces-around-equal-signs-in-attribute/invalid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <p class = \"h\"></p>\n  <p class =\"e\"></p>\n  <p class=   \"l\"></p>\n  <p class=\n       \"l\"></p>\n  <p class\n       = \"o\"></p>\n  <p class= \"=\"></p>\n  <p class= a></p>\n  <p class= a></p>\n  <p bind:test= {value} bind:test2  = {value} />\n  <p style:width =\"10px\" />\n  <!-- prettier-ignore -->\n  <p this = {expression} />\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-spaces-around-equal-signs-in-attribute/invalid/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<div>\n  <p class=\"h\"></p>\n  <p class=\"e\"></p>\n  <p class=\"l\"></p>\n  <p class=\"l\"></p>\n  <p class=\"o\"></p>\n  <p class=\"=\"></p>\n  <p class=a></p>\n  <p class=a></p>\n  <p bind:test={value} bind:test2={value} />\n  <p style:width=\"10px\" />\n  <!-- prettier-ignore -->\n  <p this={expression} />\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-spaces-around-equal-signs-in-attribute/valid/test-01-input.svelte",
    "content": "<p class=\"test\" style=\"\" bind:test={value} />\n<p class=\"test2\" style style:width=\"10px\" />\n<!-- prettier-ignore -->\n<p class=p this={expression} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test01-errors.yaml",
    "content": "- message: Do not pass async functions to svelte stores.\n  line: 3\n  column: 28\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 6\n  column: 28\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 9\n  column: 24\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test01-input.js",
    "content": "import { writable, readable, derived } from 'svelte/store';\n\nconst w2 = writable(false, async () => {\n\t/** do nothing */\n});\nconst r2 = readable(false, async () => {\n\t/** do nothing */\n});\nconst d2 = derived(a1, async ($a1) => {\n\t/** do nothing */\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test02-errors.yaml",
    "content": "- message: Do not pass async functions to svelte stores.\n  line: 3\n  column: 35\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 6\n  column: 35\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 9\n  column: 31\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test02-input.js",
    "content": "import * as stores from 'svelte/store';\n\nconst w2 = stores.writable(false, async () => {\n\t/** do nothing */\n});\nconst r2 = stores.readable(false, async () => {\n\t/** do nothing */\n});\nconst d2 = stores.derived(a1, async ($a1) => {\n\t/** do nothing */\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test03-errors.yaml",
    "content": "- message: Do not pass async functions to svelte stores.\n  line: 3\n  column: 21\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 6\n  column: 21\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 9\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test03-input.js",
    "content": "import { writable as A, readable as B, derived as C } from 'svelte/store';\n\nconst w2 = A(false, async () => {\n\t/** do nothing */\n});\nconst r2 = B(false, async () => {\n\t/** do nothing */\n});\nconst d2 = C(a1, async ($a1) => {\n\t/** do nothing */\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test04-errors.yaml",
    "content": "- message: Do not pass async functions to svelte stores.\n  line: 3\n  column: 28\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 6\n  column: 28\n  suggestions: null\n- message: Do not pass async functions to svelte stores.\n  line: 9\n  column: 24\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/invalid/test04-input.js",
    "content": "import { writable, readable, derived } from 'svelte/store';\n\nconst w2 = writable(false, async function () {\n\t/** do nothing */\n});\nconst r2 = readable(false, async function () {\n\t/** do nothing */\n});\nconst d2 = derived(a1, async function ($a1) {\n\t/** do nothing */\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-store-async/valid/test01-input.js",
    "content": "import { writable, readable, derived } from 'svelte/store';\n\nconst w1 = writable(false, () => {\n\t/** do nothing */\n});\nconst w2 = writable(false);\nconst r1 = readable(false, () => {\n\t/** do nothing */\n});\nconst r2 = readable(false);\nconst d1 = derived(a1, ($a1) => {\n\t/** do nothing */\n});\nconst d2 = derived(a1);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal01-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal01-input.svelte",
    "content": "<script>\n\timport { get_current_component } from 'svelte/internal';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal02-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal02-input.svelte",
    "content": "<script>\n\timport { inspect } from 'svelte/internal/client';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal03-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal03-input.svelte",
    "content": "<script>\n\timport * as svelteInternal from 'svelte/internal';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal04-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal04-input.svelte",
    "content": "<script>\n\texport * from 'svelte/internal';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal05-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal05-input.svelte",
    "content": "<script>\n\texport * from 'svelte/internal/client';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal06-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal06-input.svelte",
    "content": "<script>\n\texport { inspect } from 'svelte/internal/client';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal07-errors.yaml",
    "content": "- message: Using svelte/internal is prohibited. This will be removed in Svelte 6.\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/invalid/no-svelte-internal07-input.svelte",
    "content": "<script>\n\timport('svelte/internal');\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-svelte-internal/valid/no-svelte-internal01-input.svelte",
    "content": "<script>\n\timport { mount } from 'svelte';\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/invalid/test01-errors.yaml",
    "content": "- message: Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.\n  line: 5\n  column: 31\n  suggestions: null\n- message: Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.\n  line: 6\n  column: 31\n  suggestions: null\n- message: Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.\n  line: 7\n  column: 16\n  suggestions: null\n- message: Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.\n  line: 8\n  column: 16\n  suggestions: null\n- message: Using target=\"_blank\" without rel=\"noopener noreferrer\" is a security risk.\n  line: 9\n  column: 31\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/invalid/test01-input.svelte",
    "content": "<script>\n\tlet link = '';\n</script>\n\n<a href=\"https://svelte.dev/\" target=\"_blank\">link</a>\n<a href=\"https://svelte.dev/\" target=\"_blank\" rel=\"noopenernoreferrer\">link</a>\n<a href={link} target=\"_blank\" rel=\"3\">link</a>\n<a href={link} target=\"_blank\">link</a>\n<a href=\"https://svelte.dev/\" target=\"_blank\" rel=\"noopener\">link</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/valid/allow-referrer/_config.json",
    "content": "{\n\t\"options\": [{ \"allowReferrer\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/valid/allow-referrer/allow-referrer-test01-input.svelte",
    "content": "<a href=\"https://svelte.dev/\" target=\"_blank\" rel=\"noopener\">link</a>,\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/valid/enforce-dynamic-links/_config.json",
    "content": "{\n\t\"options\": [{ \"enforceDynamicLinks\": \"never\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/valid/enforce-dynamic-links/enforce-dynamic-links-test01-input.svelte",
    "content": "<script>\n\tlet link = '';\n</script>\n\n<a href={link} target=\"_blank\">link</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-target-blank/valid/test01-input.svelte",
    "content": "<script>\n\tlet link = '';\n</script>\n\n<a>link</a>\n<a attr>link</a>\n<a target>link</a>\n<a href=\"https://svelte.dev/\">link</a>\n<a href={link}>link</a>\n<a href={link} target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n<a href=\"https://svelte.dev/\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n<a href=\"/foo\" target=\"_blank\">link</a>\n<a href=\"/foo\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n<a href=\"foo/bar\" target=\"_blank\">link</a>\n<a href=\"foo/bar\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/env01-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 8\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 13\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/env01-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\timport * as env from '$app/environment';\n\n\tif (browser) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (env.browser) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/env02-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 8\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 13\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/env02-input.svelte",
    "content": "<script>\n\timport { BROWSER } from 'esm-env';\n\timport * as env from 'esm-env';\n\n\tif (BROWSER) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (env.BROWSER) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/env03-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 3\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/env03-input.svelte",
    "content": "<script>\n\tif (import.meta.env.SSR) {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards01-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 10\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 15\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 18\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 23\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 30\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 35\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 38\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 43\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 50\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 55\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards01-input.svelte",
    "content": "<script>\n\tif (typeof window !== 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (typeof document !== 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (typeof location !== 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (typeof location === 'undefined') {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location !== 'object') {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location === 'object') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (typeof location != 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (typeof location == 'undefined') {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location != 'object') {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location == 'object') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif ('undefined' !== typeof window) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards02-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 10\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 15\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 18\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards02-input.svelte",
    "content": "<script>\n\tif (globalThis.window) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.document) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (!globalThis.location) {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards03-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 10\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 15\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 18\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 25\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 28\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 35\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 38\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 42\n  column: 6\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 44\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 46\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 48\n  column: 6\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 50\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 52\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 57\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards03-input.svelte",
    "content": "<script>\n\tif (globalThis.window !== undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.document !== undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location !== undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location === undefined) {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (globalThis.location != undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location == undefined) {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (globalThis.location != null) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location == null) {\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (globalThis.location !== null) {\n\t\t// NG\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location === null) {\n\t\t// NG\n\t\tconsole.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (undefined !== globalThis.window) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards04-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 10\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 15\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards04-input.svelte",
    "content": "<script>\n\tif (globalThis.window instanceof Object) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.document instanceof Object) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n\tif (globalThis.location instanceof Object) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\tconsole.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards05-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 3\n  column: 31\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 4\n  column: 25\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards05-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\tconsole.log(browser ? null : location.href); // NG\n\tconsole.log(!browser ? location.href : null); // NG\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards06-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 9\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 13\n  column: 16\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards06-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\n\tfor (const x of []) {\n\t\tif (browser) {\n\t\t\tconsole.log(location.href);\n\t\t\tcontinue;\n\t\t}\n\t\tconsole.log(location.href); // NG\n\t}\n\tfor (const x of []) {\n\t\tif (!browser) {\n\t\t\tconsole.log(location.href); // NG\n\t\t\tcontinue;\n\t\t}\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards07-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 13\n  column: 15\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 17\n  column: 16\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 28\n  column: 16\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 33\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards07-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\n\tfor (const x of []) {\n\t\tif (browser) {\n\t\t\tconsole.log(location.href);\n\t\t\tif (x) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconsole.log(location.href); // NG\n\t}\n\tfor (const x of []) {\n\t\tif (!browser) {\n\t\t\tconsole.log(location.href); // NG\n\t\t\tif (x) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconsole.log(location.href);\n\t}\n\tfor (const x of []) {\n\t\tif (!browser) {\n\t\t\tconsole.log(location.href); // NG\n\t\t\tif (x) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tconsole.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards08-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 3\n  column: 21\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 3\n  column: 49\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 14\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 37\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 7\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/guards08-input.svelte",
    "content": "<script>\n\tconsole.log(typeof location !== 'undefined' && location.href);\n\tconsole.log(typeof location === 'undefined' && location.href); // NG\n\tconsole.log(globalThis.location && location.href);\n\tconsole.log(globalThis.location || location.href); // NG\n\tconsole.log(globalThis.location?.href);\n\tconsole.log(globalThis.location.href); // NG\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/in-template01-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 5\n  column: 2\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 12\n  column: 3\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 18\n  column: 3\n  suggestions: null\n- message: Unexpected top-level browser global variable \"location\".\n  line: 22\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/in-template01-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n</script>\n\n{location.href}\n\n{#if browser}\n\t{location.href} <!-- Client-side -->\n{/if}\n\n{#if !browser}\n\t{location.href} <!-- Server-side -->\n{/if}\n\n{#if browser}\n\t{location.href} <!-- Client-side -->\n{:else}\n\t{location.href} <!-- Server-side -->\n{/if}\n\n{#if !browser}\n\t{location.href} <!-- Server-side -->\n{:else}\n\t{location.href} <!-- Client-side -->\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/test01-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"window\".\n  line: 2\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/test01-input.svelte",
    "content": "<script>\n\tconst a = window.localStorage.getItem('myCat');\n\tconsole.log(a);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/test02-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"location\".\n  line: 2\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/test02-input.svelte",
    "content": "<script>\n\tconsole.log(location.href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/test03-errors.yaml",
    "content": "- message: Unexpected top-level browser global variable \"localStorage\".\n  line: 2\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/invalid/test03-input.svelte",
    "content": "<script>\n\tconst a = localStorage.getItem('myCat');\n\tconsole.log(a);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/complex-guards01-input.svelte",
    "content": "<script>\n\timport { browser, dev } from '$app/environment';\n</script>\n\n{#if browser && dev}\n\t<div>{localStorage.getItem('myCat')}</div>\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/complex-guards02-input.svelte",
    "content": "<script>\n\timport { browser, dev } from '$app/environment';\n</script>\n\n{#if !browser || !dev}\n\t<!-- (!(browser && dev))  -->\n\t<div>DEV</div>\n{:else}\n\t<!-- (browser && dev) -->\n\t<div>{localStorage.getItem('myCat')}</div>\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/effect01-input.svelte",
    "content": "<script>\n\t$effect(() => {\n\t\tconst a = window.localStorage.getItem('myCat');\n\t\tconsole.log(a);\n\t});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/env-guards01-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\timport { BROWSER } from 'esm-env';\n\n\tconsole.log(browser && location.href);\n\tconsole.log(BROWSER && location.href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/env01-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\n\tif (browser) {\n\t\tconst a = window.localStorage.getItem('myCat');\n\t\tconsole.log(a);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/env02-input.svelte",
    "content": "<script>\n\timport { BROWSER } from 'esm-env';\n\n\tif (BROWSER) {\n\t\tconst a = window.localStorage.getItem('myCat');\n\t\tconsole.log(a);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/env03-input.svelte",
    "content": "<script>\n\tif (import.meta.env.SSR) {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards01-input.svelte",
    "content": "<script>\n\tif (typeof window !== 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (typeof document !== 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (typeof location !== 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (typeof location === 'undefined') {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location !== 'object') {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location === 'object') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (typeof location != 'undefined') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (typeof location == 'undefined') {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location != 'object') {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (typeof location == 'object') {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards02-input.svelte",
    "content": "<script>\n\tif (globalThis.window) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.document) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.location) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (!globalThis.location) {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards03-input.svelte",
    "content": "<script>\n\tif (globalThis.window !== undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.document !== undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.location !== undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.location === undefined) {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (globalThis.location != undefined) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.location == undefined) {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\tif (globalThis.location != null) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.location == null) {\n\t\t// console.log(location.href); // NG\n\t} else {\n\t\tconsole.log(location.href);\n\t}\n\t// if (globalThis.location !== null) { // NG\n\t// \tconsole.log(location.href); // NG\n\t// } else {\n\t// \tconsole.log(location.href); // NG\n\t// }\n\t// if (globalThis.location === null) { // NG\n\t// \tconsole.log(location.href); // NG\n\t// } else {\n\t// \tconsole.log(location.href); // NG\n\t// }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards04-input.svelte",
    "content": "<script>\n\tif (globalThis.window instanceof Object) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.document instanceof Object) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n\tif (globalThis.location instanceof Object) {\n\t\tconsole.log(location.href);\n\t} else {\n\t\t// console.log(location.href); // NG\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards05-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\tconsole.log(browser ? location.href : null);\n\tconsole.log(!browser ? null : location.href);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards06-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\n\tfor (const x of []) {\n\t\tif (browser) {\n\t\t\tconsole.log(location.href);\n\t\t\tcontinue;\n\t\t}\n\t\t// console.log(location.href); // NG\n\t}\n\tfor (const x of []) {\n\t\tif (!browser) {\n\t\t\t// console.log(location.href); // NG\n\t\t\tcontinue;\n\t\t}\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards07-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n\n\tfor (const x of []) {\n\t\tif (browser) {\n\t\t\tconsole.log(location.href);\n\t\t\tif (x) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// console.log(location.href); // NG\n\t}\n\tfor (const x of []) {\n\t\tif (!browser) {\n\t\t\t// console.log(location.href); // NG\n\t\t\tif (x) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconsole.log(location.href);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/guards08-input.svelte",
    "content": "<script>\n\tconsole.log(typeof location !== 'undefined' && location.href);\n\t// console.log(typeof location === 'undefined' && location.href); // NG\n\tconsole.log(globalThis.location && location.href);\n\t// console.log(globalThis.location || location.href); // NG\n\tconsole.log(globalThis.location?.href);\n\t// console.log(globalThis.location.href); // NG\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/in-template01-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n</script>\n\n{#if browser}\n\t{location.href}\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/in-template02-input.svelte",
    "content": "{#snippet f()}\n\t{location.href} <!-- This is valid because usage cannot be tracked. -->\n{/snippet}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/in-template02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/in-template03-input.svelte",
    "content": "<script>\n\timport { browser } from '$app/environment';\n</script>\n\n{#if !browser}\n\tServer-side.\n{:else}\n\t{location.href}\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/on-mount01-input.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\tonMount(() => {\n\t\tconst a = window.localStorage.getItem('myCat');\n\t\tconsole.log(a);\n\t});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/state-generic-input.svelte",
    "content": "<script lang=\"ts\">\n\tconst element: HTMLElement | null = null; // fine.\n\tconst stateElement = $state<HTMLElement | null>(null);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-top-level-browser-globals/valid/ts01-input.svelte",
    "content": "<script lang=\"ts\">\n\tlet element: HTMLElement;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/ignoreComments/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreComments\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/ignoreComments/test01-errors.yaml",
    "content": "- message: Trailing spaces not allowed.\n  line: 5\n  column: 2\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 9\n  column: 6\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 23\n  column: 12\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 26\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 27\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 30\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 33\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 34\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/ignoreComments/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const str = `\n  \n`  \n  // line comment  \n  /**  \n   * block comment  \n   */  \n  /**\n   * block comment2  \n   */ const a = 42\n  // empty line\n  \n  // empty line\n</script>\n\n<!--  \n  HTML comment  \n  -->\n\n<!-- prettier-ignore -->\n<span> Text  \n</span>\n<!-- prettier-ignore -->\n<span>  \n  Text  \n</span>\n<!-- prettier-ignore -->\n<span>  \n  Text </span>\n<!-- prettier-ignore -->\n<span>  \n    <span>Text </span>  \n  </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/ignoreComments/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const str = `\n  \n`\n  // line comment  \n  /**  \n   * block comment  \n   */\n  /**\n   * block comment2  \n   */ const a = 42\n  // empty line\n\n  // empty line\n</script>\n\n<!--  \n  HTML comment  \n  -->\n\n<!-- prettier-ignore -->\n<span> Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text </span>\n<!-- prettier-ignore -->\n<span>\n    <span>Text </span>\n  </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/skipBlankLines/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"skipBlankLines\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/skipBlankLines/test01-errors.yaml",
    "content": "- message: Trailing spaces not allowed.\n  line: 5\n  column: 2\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 6\n  column: 18\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 7\n  column: 6\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 8\n  column: 19\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 9\n  column: 6\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 11\n  column: 20\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 18\n  column: 5\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 19\n  column: 15\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 23\n  column: 12\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 26\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 27\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 30\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 33\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 34\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/skipBlankLines/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const str = `\n  \n`  \n  // line comment  \n  /**  \n   * block comment  \n   */  \n  /**\n   * block comment2  \n   */ const a = 42\n  // empty line\n  \n  // empty line\n</script>\n\n<!--  \n  HTML comment  \n  -->\n\n<!-- prettier-ignore -->\n<span> Text  \n</span>\n<!-- prettier-ignore -->\n<span>  \n  Text  \n</span>\n<!-- prettier-ignore -->\n<span>  \n  Text </span>\n<!-- prettier-ignore -->\n<span>  \n    <span>Text </span>  \n  </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/skipBlankLines/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const str = `\n  \n`\n  // line comment\n  /**\n   * block comment\n   */\n  /**\n   * block comment2\n   */ const a = 42\n  // empty line\n  \n  // empty line\n</script>\n\n<!--\n  HTML comment\n  -->\n\n<!-- prettier-ignore -->\n<span> Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text </span>\n<!-- prettier-ignore -->\n<span>\n    <span>Text </span>\n  </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/test01-errors.yaml",
    "content": "- message: Trailing spaces not allowed.\n  line: 5\n  column: 2\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 6\n  column: 18\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 7\n  column: 6\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 8\n  column: 19\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 9\n  column: 6\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 11\n  column: 20\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 14\n  column: 1\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 18\n  column: 5\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 19\n  column: 15\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 23\n  column: 12\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 26\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 27\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 30\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 33\n  column: 7\n  suggestions: null\n- message: Trailing spaces not allowed.\n  line: 34\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/test01-input.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const str = `\n  \n`  \n  // line comment  \n  /**  \n   * block comment  \n   */  \n  /**\n   * block comment2  \n   */ const a = 42\n  // empty line\n  \n  // empty line\n</script>\n\n<!--  \n  HTML comment  \n  -->\n\n<!-- prettier-ignore -->\n<span> Text  \n</span>\n<!-- prettier-ignore -->\n<span>  \n  Text  \n</span>\n<!-- prettier-ignore -->\n<span>  \n  Text </span>\n<!-- prettier-ignore -->\n<span>  \n    <span>Text </span>  \n  </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/invalid/test01-output.svelte",
    "content": "<!-- prettier-ignore -->\n<script>\n  const str = `\n  \n`\n  // line comment\n  /**\n   * block comment\n   */\n  /**\n   * block comment2\n   */ const a = 42\n  // empty line\n\n  // empty line\n</script>\n\n<!--\n  HTML comment\n  -->\n\n<!-- prettier-ignore -->\n<span> Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text </span>\n<!-- prettier-ignore -->\n<span>\n    <span>Text </span>\n  </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-trailing-spaces/valid/test01-input.svelte",
    "content": "<script>\n\tconst str = `\n  \n`;\n\t// line comment\n\t/**\n\t * block comment\n\t */\n\t/**\n\t * block comment2\n\t */ const a = 42;\n\t// empty line\n\n\t// empty line\n</script>\n\n<!--\n  HTML comment\n  -->\n\n<!-- prettier-ignore -->\n<span> Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text\n</span>\n<!-- prettier-ignore -->\n<span>\n  Text </span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/invalid/ignoreProperties/_config.json",
    "content": "{\n\t\"options\": [{ \"ignoreProperties\": [\"foo\", \"/^bar/\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/invalid/ignoreProperties/test01-errors.yaml",
    "content": "- message: Unexpected unknown style directive property 'unknown-color'.\n  line: 8\n  column: 12\n  suggestions: null\n- message: Unexpected unknown style directive property 'unknown'.\n  line: 9\n  column: 12\n  suggestions: null\n- message: Unexpected unknown style directive property 'foo-bar'.\n  line: 15\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/invalid/ignoreProperties/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n\tlet unknown = red;\n\tlet foo = red;\n\tlet bar = red;\n</script>\n\n<div style:unknown-color={red}>...</div>\n<div style:unknown>...</div>\n<div style:foo={red}>...</div>\n<div style:foo>...</div>\n<div style:bar={red}>...</div>\n<div style:bar>...</div>\n<div style:bar-foo={red}>...</div>\n<div style:foo-bar={red}>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/invalid/test01-errors.yaml",
    "content": "- message: Unexpected unknown style directive property 'unknown-color'.\n  line: 6\n  column: 12\n  suggestions: null\n- message: Unexpected unknown style directive property 'unknown'.\n  line: 7\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/invalid/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n\tlet unknown = red;\n</script>\n\n<div style:unknown-color={red}>...</div>\n<div style:unknown>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/valid/test01-input.svelte",
    "content": "<script>\n\tlet red = 'red';\n\tlet color = red;\n</script>\n\n<div style:color={red}>...</div>\n<div style:color>...</div>\n<div style=\"unknown-color: red\">...</div>\n<div style:--color={red}>...</div>\n\n<style>\n\t:root {\n\t\t--color: blue;\n\t}\n\tdiv {\n\t\tcolor: var(--color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unknown-style-directive-property/valid/test02-input.svelte",
    "content": "<script>\n\tlet transform = 'scale(2)';\n</script>\n\n<div style:-moz-transform={transform}>...</div>\n<div style:-ms-transform={transform}>...</div>\n<div style:-o-transform={transform}>...</div>\n<div style:-webkit-transform={transform}>...</div>\n<div style:transform>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/additional-class-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"additionalReactiveClasses\": [\"CustomReactiveClass1\", \"CustomReactiveClass2\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/additional-class-errors.yaml",
    "content": "- message: CustomReactiveClass1 is already reactive, $state wrapping is unnecessary.\n  line: 5\n  column: 25\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport { CustomReactiveClass1, CustomReactiveClass2 } from 'foo';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst custom1 = new CustomReactiveClass1();\n        \tconst custom2 = $state(new CustomReactiveClass2());\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        </script>\n- message: CustomReactiveClass2 is already reactive, $state wrapping is unnecessary.\n  line: 6\n  column: 25\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport { CustomReactiveClass1, CustomReactiveClass2 } from 'foo';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst custom1 = $state(new CustomReactiveClass1());\n        \tconst custom2 = new CustomReactiveClass2();\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/additional-class-input.svelte",
    "content": "<script>\n\timport { CustomReactiveClass1, CustomReactiveClass2 } from 'foo';\n\n\t// These should be reported as unnecessary $state wrapping\n\tconst custom1 = $state(new CustomReactiveClass1());\n\tconst custom2 = $state(new CustomReactiveClass2());\n\n\t// Regular state usage is still valid\n\tconst regularState = $state(42);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/allow-reassign-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowReassign\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/allow-reassign-errors.yaml",
    "content": "- message: SvelteSet is already reactive, $state wrapping is unnecessary.\n  line: 6\n  column: 21\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport { SvelteSet, SvelteMap } from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \t// even with allowReassign: true because they are not reassigned\n        \tconst set = new SvelteSet();\n        \tlet map = $state(new SvelteMap());\n        </script>\n- message: SvelteMap is already reactive, $state wrapping is unnecessary.\n  line: 7\n  column: 19\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport { SvelteSet, SvelteMap } from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \t// even with allowReassign: true because they are not reassigned\n        \tconst set = $state(new SvelteSet());\n        \tlet map = new SvelteMap();\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/allow-reassign-input.svelte",
    "content": "<script>\n\timport { SvelteSet, SvelteMap } from 'svelte/reactivity';\n\n\t// These should be reported as unnecessary $state wrapping\n\t// even with allowReassign: true because they are not reassigned\n\tconst set = $state(new SvelteSet());\n\tlet map = $state(new SvelteMap());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/basic-errors.yaml",
    "content": "- message: SvelteSet is already reactive, $state wrapping is unnecessary.\n  line: 12\n  column: 21\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport {\n        \t\tSvelteSet,\n        \t\tSvelteMap,\n        \t\tSvelteURL,\n        \t\tSvelteURLSearchParams,\n        \t\tSvelteDate,\n        \t\tMediaQuery\n        \t} from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = new SvelteSet();\n        \tconst map = $state(new SvelteMap());\n        \tconst url = $state(new SvelteURL('https://example.com'));\n        \tconst params = $state(new SvelteURLSearchParams('key=value'));\n        \tconst date = $state(new SvelteDate());\n        \tconst mediaQuery = $state(new MediaQuery('(min-width: 800px)'));\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        \tconst stateObject = $state({ foo: 'bar' });\n        </script>\n- message: SvelteMap is already reactive, $state wrapping is unnecessary.\n  line: 13\n  column: 21\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport {\n        \t\tSvelteSet,\n        \t\tSvelteMap,\n        \t\tSvelteURL,\n        \t\tSvelteURLSearchParams,\n        \t\tSvelteDate,\n        \t\tMediaQuery\n        \t} from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = $state(new SvelteSet());\n        \tconst map = new SvelteMap();\n        \tconst url = $state(new SvelteURL('https://example.com'));\n        \tconst params = $state(new SvelteURLSearchParams('key=value'));\n        \tconst date = $state(new SvelteDate());\n        \tconst mediaQuery = $state(new MediaQuery('(min-width: 800px)'));\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        \tconst stateObject = $state({ foo: 'bar' });\n        </script>\n- message: SvelteURL is already reactive, $state wrapping is unnecessary.\n  line: 14\n  column: 21\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport {\n        \t\tSvelteSet,\n        \t\tSvelteMap,\n        \t\tSvelteURL,\n        \t\tSvelteURLSearchParams,\n        \t\tSvelteDate,\n        \t\tMediaQuery\n        \t} from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = $state(new SvelteSet());\n        \tconst map = $state(new SvelteMap());\n        \tconst url = new SvelteURL('https://example.com');\n        \tconst params = $state(new SvelteURLSearchParams('key=value'));\n        \tconst date = $state(new SvelteDate());\n        \tconst mediaQuery = $state(new MediaQuery('(min-width: 800px)'));\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        \tconst stateObject = $state({ foo: 'bar' });\n        </script>\n- message: SvelteURLSearchParams is already reactive, $state wrapping is unnecessary.\n  line: 15\n  column: 24\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport {\n        \t\tSvelteSet,\n        \t\tSvelteMap,\n        \t\tSvelteURL,\n        \t\tSvelteURLSearchParams,\n        \t\tSvelteDate,\n        \t\tMediaQuery\n        \t} from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = $state(new SvelteSet());\n        \tconst map = $state(new SvelteMap());\n        \tconst url = $state(new SvelteURL('https://example.com'));\n        \tconst params = new SvelteURLSearchParams('key=value');\n        \tconst date = $state(new SvelteDate());\n        \tconst mediaQuery = $state(new MediaQuery('(min-width: 800px)'));\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        \tconst stateObject = $state({ foo: 'bar' });\n        </script>\n- message: SvelteDate is already reactive, $state wrapping is unnecessary.\n  line: 16\n  column: 22\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport {\n        \t\tSvelteSet,\n        \t\tSvelteMap,\n        \t\tSvelteURL,\n        \t\tSvelteURLSearchParams,\n        \t\tSvelteDate,\n        \t\tMediaQuery\n        \t} from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = $state(new SvelteSet());\n        \tconst map = $state(new SvelteMap());\n        \tconst url = $state(new SvelteURL('https://example.com'));\n        \tconst params = $state(new SvelteURLSearchParams('key=value'));\n        \tconst date = new SvelteDate();\n        \tconst mediaQuery = $state(new MediaQuery('(min-width: 800px)'));\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        \tconst stateObject = $state({ foo: 'bar' });\n        </script>\n- message: MediaQuery is already reactive, $state wrapping is unnecessary.\n  line: 17\n  column: 28\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: |\n        <script>\n        \timport {\n        \t\tSvelteSet,\n        \t\tSvelteMap,\n        \t\tSvelteURL,\n        \t\tSvelteURLSearchParams,\n        \t\tSvelteDate,\n        \t\tMediaQuery\n        \t} from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = $state(new SvelteSet());\n        \tconst map = $state(new SvelteMap());\n        \tconst url = $state(new SvelteURL('https://example.com'));\n        \tconst params = $state(new SvelteURLSearchParams('key=value'));\n        \tconst date = $state(new SvelteDate());\n        \tconst mediaQuery = new MediaQuery('(min-width: 800px)');\n\n        \t// Regular state usage is still valid\n        \tconst regularState = $state(42);\n        \tconst stateObject = $state({ foo: 'bar' });\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/basic-input.svelte",
    "content": "<script>\n\timport {\n\t\tSvelteSet,\n\t\tSvelteMap,\n\t\tSvelteURL,\n\t\tSvelteURLSearchParams,\n\t\tSvelteDate,\n\t\tMediaQuery\n\t} from 'svelte/reactivity';\n\n\t// These should be reported as unnecessary $state wrapping\n\tconst set = $state(new SvelteSet());\n\tconst map = $state(new SvelteMap());\n\tconst url = $state(new SvelteURL('https://example.com'));\n\tconst params = $state(new SvelteURLSearchParams('key=value'));\n\tconst date = $state(new SvelteDate());\n\tconst mediaQuery = $state(new MediaQuery('(min-width: 800px)'));\n\n\t// Regular state usage is still valid\n\tconst regularState = $state(42);\n\tconst stateObject = $state({ foo: 'bar' });\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/import-alias-errors.yaml",
    "content": "- message: SvelteSet is already reactive, $state wrapping is unnecessary.\n  line: 5\n  column: 21\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: >\n        <script>\n        \timport { SvelteSet as CustomSet, SvelteMap as CustomMap } from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = new CustomSet();\n        \tconst map = $state(new CustomMap());\n        </script>\n- message: SvelteMap is already reactive, $state wrapping is unnecessary.\n  line: 6\n  column: 21\n  suggestions:\n    - desc: Remove unnecessary $state wrapping\n      messageId: suggestRemoveStateWrap\n      output: >\n        <script>\n        \timport { SvelteSet as CustomSet, SvelteMap as CustomMap } from 'svelte/reactivity';\n\n        \t// These should be reported as unnecessary $state wrapping\n        \tconst set = $state(new CustomSet());\n        \tconst map = new CustomMap();\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/invalid/import-alias-input.svelte",
    "content": "<script>\n\timport { SvelteSet as CustomSet, SvelteMap as CustomMap } from 'svelte/reactivity';\n\n\t// These should be reported as unnecessary $state wrapping\n\tconst set = $state(new CustomSet());\n\tconst map = $state(new CustomMap());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/additional-class-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"additionalReactiveClasses\": [\"CustomReactiveClass1\", \"CustomReactiveClass2\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/additional-class-input.svelte",
    "content": "<script>\n\timport { CustomReactiveClass1, CustomReactiveClass2 } from 'foo';\n\t// These should be allowed when not wrapped with $state\n\tconst custom1 = new CustomReactiveClass1();\n\tconst custom2 = new CustomReactiveClass2();\n\n\t// Regular state usage is still valid\n\tconst regularState = $state(42);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowReassign\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind1-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { SvelteSet } from 'svelte/reactivity';\n\timport Bug3 from './Bug3.svelte';\n\n\tlet svelteSet = $state(new SvelteSet<number>([]));\n</script>\n\n<Bug3 bind:svelteSet />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowReassign\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-bind2-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { SvelteSet } from 'svelte/reactivity';\n\timport Bug3 from './Bug3.svelte';\n\n\tlet svelteSet = $state(new SvelteSet<number>([]));\n</script>\n\n<Bug3 bind:svelteSet={() => svelteSet, (v) => (svelteSet = v)} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowReassign\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/allow-reassign-input.svelte",
    "content": "<script>\n\timport { SvelteSet, SvelteMap } from 'svelte/reactivity';\n\n\t// These should be allowed when allowReassign is true and variables are reassigned\n\tlet set = $state(new SvelteSet());\n\tset = new SvelteSet([1, 2, 3]);\n\n\tlet map = $state(new SvelteMap());\n\tmap = new SvelteMap([['key', 'value']]);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unnecessary-state-wrap/valid/basic-input.svelte",
    "content": "<script>\n\timport {\n\t\tSvelteSet,\n\t\tSvelteMap,\n\t\tSvelteURL,\n\t\tSvelteURLSearchParams,\n\t\tSvelteDate,\n\t\tMediaQuery\n\t} from 'svelte/reactivity';\n\n\t// Valid usage of reactive classes without $state wrapping\n\tconst set = new SvelteSet();\n\tconst map = new SvelteMap();\n\tconst url = new SvelteURL('https://example.com');\n\tconst params = new SvelteURLSearchParams('key=value');\n\tconst date = new SvelteDate();\n\tconst mediaQuery = new MediaQuery('(min-width: 800px)');\n\n\t// Regular state usage is still valid\n\tconst regularState = $state(42);\n\tconst stateObject = $state({ foo: 'bar' });\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/allowed-class-names/_config.json",
    "content": "{\n\t\"options\": [{ \"allowedClassNames\": [\"div-class\", \"/^p-\\\\d{1,2}$/\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/allowed-class-names/partially-allowed-class-name01-errors.yaml",
    "content": "- message: Unused class \"span-class\".\n  line: 3\n  column: 1\n  suggestions: null\n- message: Unused class \"p-100\".\n  line: 5\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/allowed-class-names/partially-allowed-class-name01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<span class=\"p-100\">Regex!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/class-directive01-errors.yaml",
    "content": "- message: Unused class \"first\".\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unused class \"second\".\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/class-directive01-input.svelte",
    "content": "<div class:first={true}>Hello</div>\n\n<span class:second={false}>World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/duplicated-class-name-errors.yaml",
    "content": "- message: Unused class \"div-class\".\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unused class \"div-class\".\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/duplicated-class-name-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"div-class\">World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/multiline-class-names01-errors.yaml",
    "content": "- message: Unused class \"div-class-two\".\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class-two\".\n  line: 4\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class-three\".\n  line: 4\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/multiline-class-names01-input.svelte",
    "content": "<!-- eslint-disable prettier/prettier -->\n<div class=\"div-class div-class-two\">Hello</div>\n\n<span\n\tclass=\"\n    span-class\n    span-class-two\n    span-class-three\n  \">World!</span\n>\n\n<style>\n\t.div-class {\n\t\tcolor: red;\n\t}\n\n\t.span-class {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/multiple-class-names01-errors.yaml",
    "content": "- message: Unused class \"div-class-two\".\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class-two\".\n  line: 3\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class-three\".\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/multiple-class-names01-input.svelte",
    "content": "<div class=\"div-class div-class-two\">Hello</div>\n\n<span class=\"span-class span-class-two span-class-three\">World!</span>\n\n<style>\n\t.div-class {\n\t\tcolor: red;\n\t}\n\n\t.span-class {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/same-name-id01-errors.yaml",
    "content": "- message: Unused class \"div-class\".\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class\".\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/same-name-id01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t#div-class {\n\t\tcolor: red;\n\t}\n\n\t#span-class {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/unused-class-name01-errors.yaml",
    "content": "- message: Unused class \"div-class\".\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class\".\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/unused-class-name01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/used-unrelated-class-name01-errors.yaml",
    "content": "- message: Unused class \"div-class\".\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unused class \"span-class\".\n  line: 3\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/used-unrelated-class-name01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.unrelated-class {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/adjacent-sibling-combinator01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.div-class + .span-class {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/allowed-class-names/_config.json",
    "content": "{\n\t\"options\": [{ \"allowedClassNames\": [\"div-class\", \"span-class\", \"/^p-\\\\d{1,2}$/\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/allowed-class-names/allowed-class-name01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<span class=\"p-2\">Regex!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/child-combinator01-input.svelte",
    "content": "<div class=\"container\">\n\t<div class=\"div-class\">Hello</div>\n</div>\n\n<style>\n\t.container > .div-class {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/descendant-combinator01-input.svelte",
    "content": "<div class=\"container\">\n\t<div class=\"div-class\">Hello</div>\n</div>\n\n<style>\n\t.container .div-class {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/general-sibling-combinator01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.div-class ~ .span-class {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/invalid-style01-input.svelte",
    "content": "<div class=\"container\">\n  <div class=\"div-class\">Hello</div>\n\n  <span class=\"span-class\">World!</span>\n</div>\n\n<style>\n  // This syntax is intentionally invalid CSS - this is to be used to test resiliency against invalid input\n  .container {\n    class .div-class/35\n      # Weird comment\n      color: red;\n\n    .span-class begin\n      font-weight: bold;\n    end\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/multiple-class-names01-input.svelte",
    "content": "<div class=\"div-class div-class-two\">Hello</div>\n\n<span class=\"span-class span-class-two\">World!</span>\n\n<style>\n\t.div-class {\n\t\tcolor: red;\n\t}\n\n\t.div-class-two {\n\t\tcolor: blue;\n\t}\n\n\t.span-class {\n\t\tfont-weight: bold;\n\t}\n\n\t.span-class-two {\n\t\tfont-weight: normal;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/no-class-name01-input.svelte",
    "content": "<div>Hello</div>\n\n<span>World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/pseudo-classes01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class-one\">World</span>\n\n<span class=\"span-class-two\">!</span>\n\n<style>\n\t:not(.div-class) {\n\t\tcolor: red;\n\t}\n\t:is(.span-class-one, .span-class-two) {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/pseudo-elements01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.div-class:visited {\n\t\tcolor: red;\n\t}\n\t.span-class::before {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/scss-class-name01-input.svelte",
    "content": "<div class=\"container\">\n\t<div class=\"div-class\">Hello</div>\n\n\t<span class=\"span-class\">World!</span>\n</div>\n\n<style lang=\"scss\">\n\t.container {\n\t\t.div-class {\n\t\t\t// This is an inline comment\n\t\t\tcolor: red;\n\t\t}\n\n\t\t.span-class {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/selector-list01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.div-class,\n\t.span-class {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/test-input.js",
    "content": "console.log('a');\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/unknown-lang01-input.svelte",
    "content": "<div class=\"container\">\n  <div class=\"div-class\">Hello</div>\n\n  <span class=\"span-class\">World!</span>\n</div>\n\n<style lang=\"invalid-lang\">\n  // This syntax is intentionally invalid CSS - this is to be used to test resiliency against unknown style languages.\n  .container {\n    class .div-class/35\n      # Weird comment\n      color: red;\n\n    .span-class begin\n      font-weight: bold;\n    end\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/valid/used-class-name01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.div-class {\n\t\tcolor: red;\n\t}\n\n\t.span-class {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/alias-errors.yaml",
    "content": "- message: \"'test' is an unused Props property.\"\n  line: 7\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/alias-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype Props = {\n\t\ttest: string;\n\t\t'aria-label'?: string;\n\t};\n\n\tconst { 'aria-label': foo }: Props = $props();\n</script>\n\n{foo}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/builtin-shadow-unused-errors.yaml",
    "content": "- message: \"'toString' is an unused Props property.\"\n  line: 5\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/builtin-shadow-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ttoString: () => string;\n\t}\n\tlet props: Props = $props();\n\tconsole.log(props);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/builtin-types-unused-errors.yaml",
    "content": "- message: \"'regexp' is an unused Props property.\"\n  line: 10\n  column: 8\n  suggestions: null\n- message: \"'promise' is an unused Props property.\"\n  line: 10\n  column: 8\n  suggestions: null\n- message: \"'map' is an unused Props property.\"\n  line: 10\n  column: 8\n  suggestions: null\n- message: \"'set' is an unused Props property.\"\n  line: 10\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/builtin-types-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype Props = {\n\t\tdate: Date;\n\t\tregexp: RegExp;\n\t\tpromise: Promise<string>;\n\t\tmap: Map<string, number>;\n\t\tset: Set<string>;\n\t};\n\n\tconst props: Props = $props();\n\tconsole.log(props.date.getTime());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/class-props-unused-errors.yaml",
    "content": "- message: \"'data' is an unused Props property.\"\n  line: 16\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/class-props-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tclass User {\n\t\tconstructor(\n\t\t\tpublic name: string,\n\t\t\tpublic age: number\n\t\t) {}\n\t}\n\n\ttype Props = {\n\t\tuser: User;\n\t\tdata: {\n\t\t\tvalue: string;\n\t\t};\n\t};\n\n\tconst props: Props = $props();\n\tconsole.log(props.user.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"checkImportedTypes\": true,\n\t\t\t\"ignoreTypePatterns\": [\"BaseProps\"],\n\t\t\t\"ignorePropertyPatterns\": [\"/^(_|baz)/\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-errors.yaml",
    "content": "- message: \"'base' is an unused Props property.\"\n  line: 10\n  column: 6\n  suggestions: null\n- message: \"'bar' in 'my_foo' is an unused property.\"\n  line: 10\n  column: 6\n  suggestions: null\n- message: \"'qux' is an unused Props property.\"\n  line: 10\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { BaseProps, FooDTO } from './shared-types';\n\tinterface Props {\n\t\tbase: BaseProps;\n\t\tmy_foo: FooDTO;\n\t\t_my_bar: string;\n\t\tbaz: string;\n\t\tqux: string;\n\t}\n\tlet { my_foo }: Props = $props();\n\tconsole.log(my_foo.foo);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/extends-unused-errors.yaml",
    "content": "- message: \"'role' is an unused Props property.\"\n  line: 13\n  column: 6\n  suggestions: null\n- message: \"'email' is an unused Props property.\"\n  line: 13\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/extends-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface BaseProps {\n\t\tid: string;\n\t\ttype: 'user' | 'admin';\n\t\trole: string;\n\t}\n\n\tinterface Props extends BaseProps {\n\t\tname: string;\n\t\temail: string;\n\t}\n\n\tlet props: Props = $props();\n\tconsole.log(props.id, props.type, props.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/generic-props-unused-errors.yaml",
    "content": "- message: \"'extra' is an unused Props property.\"\n  line: 6\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/generic-props-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { GenericProps } from './shared-types';\n\tinterface Props extends GenericProps<string> {\n\t\textra: boolean;\n\t}\n\tlet { data, loading }: Props = $props();\n\tconsole.log(data, loading);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-external-type-errors.yaml",
    "content": "- message: \"'child2' is an unused Props property.\"\n  line: 9\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-external-type-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { FooDTO } from './shared-types';\n\n\tinterface Props extends FooDTO {\n\t\tchild1: string;\n\t\tchild2: number;\n\t}\n\n\tlet { foo, child1 }: Props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-property-patterns-custom-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignorePropertyPatterns\": [\"^foo$\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-property-patterns-custom-errors.yaml",
    "content": "- message: \"'foo' is an unused Props property.\"\n  line: 8\n  column: 8\n  suggestions: null\n- message: \"'_foo' is an unused Props property.\"\n  line: 8\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-property-patterns-custom-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tfoo: string;\n\t\t_foo: string;\n\t\tbar: string;\n\t}\n\n\tconst { bar }: Props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreTypePatterns\": [\".*DTO$\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-errors.yaml",
    "content": "- message: \"'metadata' is an unused Props property.\"\n  line: 12\n  column: 8\n  suggestions: null\n- message: \"'description' is an unused Props property.\"\n  line: 12\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype BaseDTO = {\n\t\tid: string;\n\t\tmetadata: Record<string, unknown>;\n\t};\n\n\ttype Props = BaseDTO & {\n\t\tname: string;\n\t\tdescription: string;\n\t};\n\n\tconst props: Props = $props();\n\tconsole.log(props.id, props.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/imported-type-check-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"checkImportedTypes\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/imported-type-check-errors.yaml",
    "content": "- message: \"'name' is an unused Props property.\"\n  line: 6\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/imported-type-check-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { BaseProps } from './shared-types';\n\tinterface Props extends BaseProps {\n\t\tage: number;\n\t}\n\tlet { age }: Props = $props();\n\tconsole.log(age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/imported-type-unused-errors.yaml",
    "content": "- message: \"'role' is an unused Props property.\"\n  line: 6\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/imported-type-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ExtendedProps } from './shared-types';\n\tinterface Props extends ExtendedProps {\n\t\trole: string;\n\t}\n\tlet { name, age }: Props = $props();\n\tconsole.log(name, age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/index-signature-no-rest-errors.yaml",
    "content": "- message: \"'role' is an unused Props property.\"\n  line: 8\n  column: 6\n  suggestions: null\n- message: Index signature is unused. Consider using rest operator (...) to\n    capture remaining properties.\n  line: 8\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/index-signature-no-rest-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t\trole: string;\n\t\t[key: string]: string | number;\n\t}\n\tlet { name, age }: Props = $props();\n\tconsole.log(name, age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/intersection-unused-errors.yaml",
    "content": "- message: \"'version' is an unused Props property.\"\n  line: 17\n  column: 8\n  suggestions: null\n- message: \"'updatedAt' is an unused Props property.\"\n  line: 17\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/intersection-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype WithId = {\n\t\tid: string;\n\t\tversion: number;\n\t};\n\n\ttype WithTimestamp = {\n\t\tcreatedAt: Date;\n\t\tupdatedAt: Date;\n\t};\n\n\ttype Props = WithId &\n\t\tWithTimestamp & {\n\t\t\tname: string;\n\t\t};\n\n\tconst props: Props = $props();\n\tconsole.log(props.id, props.name, props.createdAt);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/multiple-extends-unused-errors.yaml",
    "content": "- message: \"'email' is an unused Props property.\"\n  line: 17\n  column: 6\n  suggestions: null\n- message: \"'permissions' is an unused Props property.\"\n  line: 17\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/multiple-extends-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface BaseProps {\n\t\tid: string;\n\t\ttype: 'user' | 'admin';\n\t}\n\n\tinterface UserProps extends BaseProps {\n\t\tname: string;\n\t\temail: string;\n\t}\n\n\tinterface Props extends UserProps {\n\t\trole: string;\n\t\tpermissions: string[];\n\t}\n\n\tlet props: Props = $props();\n\tconsole.log(props.id, props.type, props.name, props.role);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/nested-unused-errors.yaml",
    "content": "- message: \"'location' in 'user' is an unused property.\"\n  line: 8\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/nested-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\tlocation: string;\n\t\t};\n\t}\n\tlet props: Props = $props();\n\tconsole.log(props.user.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/optional-unused-errors.yaml",
    "content": "- message: \"'optionalCallback' is an unused Props property.\"\n  line: 9\n  column: 8\n  suggestions: null\n- message: \"'optionalData' is an unused Props property.\"\n  line: 9\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/optional-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\trequired: string;\n\t\toptional?: number;\n\t\toptionalCallback?: () => void;\n\t\toptionalData?: { value: string };\n\t}\n\n\tconst props: Props = $props();\n\tconsole.log(props.required);\n\tif (props.optional !== undefined) {\n\t\tconsole.log(props.optional);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/parent-interface-unused-errors.yaml",
    "content": "- message: \"'id' is an unused Props property.\"\n  line: 11\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/parent-interface-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface BaseProps {\n\t\tid: string;\n\t\ttype: 'user' | 'admin';\n\t}\n\n\tinterface Props extends BaseProps {\n\t\tname: string;\n\t}\n\n\tlet { name, type }: Props = $props();\n\tconsole.log(name, type);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/shared-types.ts",
    "content": "export interface BaseProps {\n\tname: string;\n}\n\nexport interface FooDTO {\n\tfoo: string;\n\tbar: number;\n\tbaz: BazDTO;\n}\n\ninterface BazDTO {\n\tqux: string;\n\tquux: number;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/simple-unused-errors.yaml",
    "content": "- message: \"'age' is an unused Props property.\"\n  line: 6\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/simple-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t}\n\tlet { name }: Props = $props();\n\tconsole.log(name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/unused-index-signature-errors.yaml",
    "content": "- message: Index signature is unused. Consider using rest operator (...) to\n    capture remaining properties.\n  line: 7\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/unused-index-signature-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ta: number;\n\t\t[key: string]: unknown;\n\t}\n\n\tlet { a }: Props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/alias-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype Props = {\n\t\ttest: string;\n\t\t'aria-label'?: string;\n\t};\n\n\tconst { test, 'aria-label': ariaLabel }: Props = $props();\n</script>\n\n<h1>{test}</h1>\n<div aria-label={ariaLabel}>svelte/no-unused-props does not always respect aliases</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/any-input.svelte",
    "content": "<script lang=\"ts\">\n\t// There is no type annotation, so it is treated as any.\n\tlet props = $props();\n\tconsole.log(props.anything);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/assignment-input.svelte",
    "content": "<script lang=\"ts\">\n\tconst props: { value: number } = $props();\n\tlet localValue = props.value;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/basic-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ta: string;\n\t\tb: number;\n\t}\n\tlet { a, b }: Props = $props();\n\tconsole.log(a, b);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/bindable-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tselected: { value: string };\n\t}\n\n\tlet { selected = $bindable() }: Props = $props();\n</script>\n\n<input type=\"text\" bind:value={selected.value} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/builtin-types-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype Props = {\n\t\tdate: Date;\n\t\tregexp: RegExp;\n\t\tpromise: Promise<string>;\n\t\tmap: Map<string, number>;\n\t\tset: Set<string>;\n\t};\n\n\tconst props: Props = $props();\n\tconsole.log(\n\t\tprops.date.getTime(),\n\t\tprops.regexp.test('test'),\n\t\tprops.promise.then(console.log),\n\t\tprops.map.get('key'),\n\t\tprops.set.has('value')\n\t);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/component-props-any-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from 'svelte';\n\n\tinterface Props extends ComponentProps<any> {\n\t\ta: string;\n\t}\n\n\tlet { a }: Props = $props();\n</script>\n\n<p>{a}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/computed-member-input.svelte",
    "content": "<script lang=\"ts\">\n\tconst props: { 'data-value': string } = $props();\n\tconst value = props['data-value'];\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/computed-property-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tdynamic: string;\n\t}\n\tconst props: Props = $props();\n\tconsole.log(props['dynamic']);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/conditional-type-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype IsString<T> = T extends string ? true : false;\n\ttype StringOrNumber<T> = T extends string ? string : number;\n\n\tinterface Props<T> {\n\t\tvalue: T;\n\t\tisString: IsString<T>;\n\t\tconverted: StringOrNumber<T>;\n\t}\n\n\tconst props: Props<string> = $props();\n\tconsole.log(props.value.length);\n\tif (props.isString) {\n\t\tconsole.log(props.converted.toUpperCase());\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"checkImportedTypes\": true,\n\t\t\t\"ignoreTypePatterns\": [\"BaseProps\"],\n\t\t\t\"ignorePropertyPatterns\": [\"/^(_|baz)/\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { BaseProps, FooDTO } from './shared-types';\n\tinterface Props {\n\t\tbase: BaseProps;\n\t\tmy_foo: FooDTO;\n\t\t_my_bar: string;\n\t\tbaz: string;\n\t}\n\tlet { base, my_foo }: Props = $props();\n\tconsole.log(base.age, my_foo.foo, my_foo.bar);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/default-value-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tnewTaskAttributes: { attribute: number; attribute2: string };\n\t}\n\n\tconst { newTaskAttributes = { attribute: 0, attribute2: '' } }: Props = $props();\n</script>\n\n<div class=\"col-span-full\">\n\t<div>\n\t\t{newTaskAttributes.attribute}\n\t\t{newTaskAttributes.attribute2}\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/extends-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface BaseProps {\n\t\tid: string;\n\t\ttype: 'user' | 'admin';\n\t}\n\n\tinterface Props extends BaseProps {\n\t\tname: string;\n\t\tpermissions: string[];\n\t}\n\n\tlet props: Props = $props();\n\tconsole.log(props.id, props.type, props.name, props.permissions);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/function-props-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tonClick: (event: MouseEvent) => void;\n\t\ttransform: <T>(value: T) => string;\n\t\tasync: () => Promise<void>;\n\t}\n\n\tconst props: Props = $props();\n\tprops.onClick(new MouseEvent('click'));\n\tconst result = props.transform(42);\n\tawait props.async();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-external-type-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { FooDTO } from './shared-types';\n\n\tinterface Props extends FooDTO {\n\t\tchild1: string;\n\t\tchild2: number;\n\t}\n\n\tlet { foo, child1, child2 }: Props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignorePropertyPatterns\": [\"/^[#$@_~]/\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\t_internal: string;\n\t\t$store: boolean;\n\t\t'@decorator': string;\n\t\t'#private': number;\n\t\t'~tilde': boolean;\n\t\tnormalUsed: string;\n\t}\n\n\tconst { normalUsed }: Props = $props();\n\tconsole.log(normalUsed);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tfoo: string;\n\t\tbar: string;\n\t}\n\n\tconst { foo, bar }: Props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreTypePatterns\": [\"/^Conditional/\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface ConditionalProps {\n\t\tname: string;\n\t}\n\tinterface Props {\n\t\tage: number;\n\t}\n\ttype AllProps = ConditionalProps extends { name: string } ? Props : never;\n\tlet { age }: AllProps = $props();\n\tconsole.log(age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"ignoreTypePatterns\": [\"/^Internal/\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface InternalConfig {\n\t\tsecretKey: string;\n\t\tdebugMode: boolean;\n\t}\n\tinterface Props {\n\t\tconfig: InternalConfig;\n\t\tvalue: number;\n\t}\n\tlet { config, value }: Props = $props();\n\tconsole.log(value, config.secretKey);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/imported-type-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"checkImportedTypes\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/imported-type-default-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { BaseProps } from './shared-types';\n\tinterface Props extends BaseProps {\n\t\tage: number;\n\t}\n\tlet { name, age }: Props = $props();\n\tconsole.log(name, age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/imported-type-explicit-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"checkImportedTypes\": false\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/imported-type-explicit-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { BaseProps } from './shared-types';\n\tinterface Props extends BaseProps {\n\t\tage: number;\n\t}\n\tlet { name, age }: Props = $props();\n\tconsole.log(name, age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/imported-type-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { BaseProps } from './shared-types';\n\tinterface Props extends BaseProps {\n\t\tage: number;\n\t}\n\tlet { name, age }: Props = $props();\n\tconsole.log(name, age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/index-signature-rest-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t\t[key: string]: string | number | boolean;\n\t}\n\tlet { name, age, ...rest }: Props = $props();\n\tconsole.log(name, age, rest.isAdmin, rest.role);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/intersection-type-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype WithId = {\n\t\tid: string;\n\t};\n\n\ttype WithTimestamp = {\n\t\tcreatedAt: Date;\n\t\tupdatedAt: Date;\n\t};\n\n\ttype Props = WithId &\n\t\tWithTimestamp & {\n\t\t\tname: string;\n\t\t};\n\n\tconst props: Props = $props();\n\tconsole.log(props.id, props.name, props.createdAt.getTime(), props.updatedAt.getTime());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/js-basic-input.svelte",
    "content": "<script>\n\tconst { a } = $props();\n\tconsole.log(a);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/js-jsdoc-input.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {string} name - User name\n\t * @property {number} age - User age\n\t */\n\tconst props = $props();\n\t// JSDoc is not checked, so no warning\n\tconsole.log(props.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/js-no-types-input.svelte",
    "content": "<script>\n\tconst props = $props();\n\tconsole.log(props.anything);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/member-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ta: string;\n\t\tb: number;\n\t}\n\tlet props: Props = $props();\n\tconsole.log(props.a, props.b);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/module-script-input.svelte",
    "content": "<script module lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t}\n</script>\n\n<script lang=\"ts\">\n\tlet { name, age }: Props = $props();\n\tconsole.log(name, age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/multiple-index-signatures-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t\t[key: string]: string | number | boolean;\n\t\t[index: number]: string | number;\n\t}\n\tlet { name, ...rest }: Props = $props();\n\tconsole.log(name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-props-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\tprofile: {\n\t\t\t\tage: number;\n\t\t\t\tbio: string;\n\t\t\t};\n\t\t};\n\t}\n\tlet props: Props = $props();\n\tconsole.log(props.user.name, props.user.profile.age, props.user.profile.bio);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-props2-input.svelte",
    "content": "<script lang=\"ts\">\n\timport GenericPopout from './GenericPopout.svelte';\n\n\tlet {\n\t\tposition\n\t}: {\n\t\tposition: {\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t};\n\t} = $props();\n</script>\n\n<GenericPopout {position}>Test</GenericPopout>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-props3-input.svelte",
    "content": "<script lang=\"ts\">\n\timport GenericPopout from './GenericPopout.svelte';\n\n\tlet {\n\t\twrapper\n\t}: {\n\t\twrapper: {\n\t\t\tposition: {\n\t\t\t\tx: number;\n\t\t\t\ty: number;\n\t\t\t};\n\t\t};\n\t} = $props();\n</script>\n\n<GenericPopout position={wrapper.position}>Test</GenericPopout>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-props4-input.svelte",
    "content": "<script lang=\"ts\">\n\timport GenericPopout from './GenericPopout.svelte';\n\n\tlet {\n\t\twrapper\n\t}: {\n\t\twrapper: {\n\t\t\tposition: {\n\t\t\t\tx: number;\n\t\t\t\ty: number;\n\t\t\t};\n\t\t};\n\t} = $props();\n</script>\n\n<GenericPopout x={wrapper.position.x}>Test</GenericPopout>\n<GenericPopout position={wrapper.position}>Test</GenericPopout>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-unused-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowUnusedNestedProperties\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\tlocation: string;\n\t\t};\n\t}\n\tlet props: Props = $props();\n\tconsole.log(props.user.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-unused2-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowUnusedNestedProperties\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/nested-unused2-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\tage: number; // Won't be reported as unused\n\t\t};\n\t}\n\tlet { user }: Props = $props();\n\tconsole.log(user.name);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/new-expression-input.svelte",
    "content": "<script lang=\"ts\">\n\tconst props: { config: { new (): any } } = $props();\n\tnew props.config();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/optional-props-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\trequired: string;\n\t\toptional?: number;\n\t\toptionalCallback?: () => void;\n\t}\n\n\tconst props: Props = $props();\n\tconsole.log(props.required);\n\tif (props.optional !== undefined) {\n\t\tconsole.log(props.optional);\n\t}\n\tprops.optionalCallback?.();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/record-type-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype Props = {\n\t\tmetadata: Record<string, unknown>;\n\t\tsettings: Record<string, boolean>;\n\t};\n\n\tconst props: Props = $props();\n\tconst value = props.metadata['key'];\n\tconst enabled = props.settings['feature'];\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/recursive-type-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype RecursiveType = {\n\t\tvalue: string;\n\t\tchildren?: RecursiveType[];\n\t};\n\n\tconst props: RecursiveType = $props();\n\tconsole.log(props.value, props.children?.[0]?.value);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/rename-unused-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t\trole: string;\n\t}\n\t// userRole is unused but it should be reported by @typescript-eslint/no-unused-vars rule.\n\tlet { name: userName, age: userAge, role: userRole }: Props = $props();\n\tconsole.log(userName, userAge);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/rest-and-index-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ta: string;\n\t\tb: number;\n\t\t[key: string]: unknown;\n\t}\n\tlet { a, ...otherProps }: Props = $props();\n\tconsole.log(a, otherProps);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/rest-with-index-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\t[key: string]: unknown;\n\t}\n\tlet { name, ...rest }: Props = $props();\n\tconsole.log(name, rest);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/shared-types.ts",
    "content": "export interface BaseProps {\n\tname: string;\n\tage: number;\n}\n\nexport interface FooDTO {\n\tfoo: string;\n\tbar: number;\n\tbaz: BazDTO;\n}\n\ninterface BazDTO {\n\tqux: string;\n\tquux: number;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-nested1-input.svelte",
    "content": "<!--Test1.svelte-->\n<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: string;\n\t\tb: {\n\t\t\tc: string;\n\t\t\td: number;\n\t\t};\n\t}\n\n\tlet props: Props = $props();\n</script>\n\n<Test a={props.a} {...props.b} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-nested2-input.svelte",
    "content": "<!--Test1.svelte-->\n<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: string;\n\t\tb: {\n\t\t\tc: string;\n\t\t\td: number;\n\t\t};\n\t}\n\n\tlet { a, b }: Props = $props();\n</script>\n\n<Test {a} {...b} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-nested3-input.svelte",
    "content": "<!--Test1.svelte-->\n<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: {\n\t\t\tc: string;\n\t\t\td: number;\n\t\t};\n\t}\n\n\tlet props: Props = $props();\n</script>\n\n<Test {...props.a} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-nested4-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowUnusedNestedProperties\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-nested4-input.svelte",
    "content": "<!--Test1.svelte-->\n<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: {\n\t\t\tc: string;\n\t\t\td: number;\n\t\t};\n\t}\n\n\tlet props: Props = $props();\n</script>\n\n<Test {...props.a} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-nested5-input.svelte",
    "content": "<!--Test1.svelte-->\n<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: string;\n\t\tb: {\n\t\t\tc: string;\n\t\t\td: number;\n\t\t};\n\t}\n\n\tlet props: Props = $props();\n\n\tconsole.log(...props);\n</script>\n\n<Test />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-root1-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: string;\n\t}\n\n\tlet props: Props = $props();\n</script>\n\n<Test {...props} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-root2-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"allowUnusedNestedProperties\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-root2-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: string;\n\t}\n\n\tlet props: Props = $props();\n</script>\n\n<Test {...props} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/spread-root3-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Test from '$lib/Test.svelte';\n\n\tinterface Props {\n\t\ta: string;\n\t}\n\n\tlet props: Props = $props();\n\n\tconsole.log(...props);\n</script>\n\n<Test />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/template-usage-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ttitle: string;\n\t\tdescription: string;\n\t\titems: string[];\n\t}\n\tlet props: Props = $props();\n</script>\n\n<h1>{props.title}</h1>\n<p>{props.description}</p>\n<ul>\n\t{#each props.items as item}\n\t\t<li>{item}</li>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ts-basic-input.svelte",
    "content": "<script lang=\"ts\">\n\t// fix: https://github.com/sveltejs/eslint-plugin-svelte/issues/1028#issuecomment-2728101827\n\ttype Prop = {\n\t\tvalue: string;\n\t\tvalue2: string;\n\t};\n\n\tinterface Props {\n\t\tmyObjectProp: Prop;\n\t}\n\n\tconst { myObjectProp }: Props = $props();\n</script>\n\n<p>{myObjectProp.value} {myObjectProp.value2}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/typed-props-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tname: string;\n\t\tage: number;\n\t}\n\tlet props: Props = $props();\n\tconsole.log(props.name, props.age);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/union-type-input.svelte",
    "content": "<script lang=\"ts\">\n\ttype Props = {\n\t\tstatus: 'success' | 'error' | 'loading';\n\t\tdata: string | number;\n\t};\n\n\tconst props: Props = $props();\n\tif (props.status === 'success') {\n\t\tconsole.log(props.data);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/used-index-signature-input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\ta: number;\n\t\t[key: string]: unknown;\n\t}\n\n\tlet { a, ...rest }: Props = $props();\n\tconsole.log(rest);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/html-comment-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 1\n  column: 20\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 1\n  column: 35\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 35\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/html-comment-input.svelte",
    "content": "<!-- svelte-ignore a11y_autofocus a11y_missing_attribute -->\n<img src=\"foo\" alt=\"Foo\" />\n\n<!-- svelte-ignore a11y_autofocus a11y_missing_attribute -->\n<img src=\"foo\" alt=\"Foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/html-comment-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/html-comment-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 1\n  column: 20\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 1\n  column: 35\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 35\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/html-comment-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"foo\" alt=\"Foo\" />\n\n<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"foo\" alt=\"Foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore01-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 56\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore01-input.svelte",
    "content": "<div>\n\t{#if true}\n\t\tA\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore01-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 56\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore01-svelte4-input.svelte",
    "content": "<div>\n\t{#if true}\n\t\tA\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore02-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 56\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore02-input.svelte",
    "content": "<div>\n\t{#each [] as e}\n\t\tA\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore02-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 56\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore02-svelte4-input.svelte",
    "content": "<div>\n\t{#each [] as e}\n\t\tA\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore03-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 3\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 3\n  column: 56\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 7\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 7\n  column: 56\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 15\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 15\n  column: 56\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore03-input.svelte",
    "content": "<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore03-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore03-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 3\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 3\n  column: 56\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 7\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 7\n  column: 56\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 15\n  column: 22\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 15\n  column: 56\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore03-svelte4-input.svelte",
    "content": "<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/missing-code-errors.yaml",
    "content": "- message: svelte-ignore comment must include the code\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/missing-code-input.svelte",
    "content": "<!-- svelte-ignore -->\n<img src=\"foo\" alt=\"Foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment01-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 4\n  column: 19\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 7\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment01-input.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n\t// svelte-ignore static-state-reference\n\tconsole.log(count);\n\texport function fn() {\n\t\t// svelte-ignore static-state-reference\n\t\tconsole.log(doubled);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment01-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 3\n  column: 19\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment01-svelte4-input.svelte",
    "content": "<script>\n\tlet foo;\n\t// svelte-ignore unused-export-let\n\texport let used;\n\t// svelte-ignore module-script-reactive-declaration\n\t$: reactive = foo;\n</script>\n\n{used}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment02-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 12\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment02-svelte4-input.svelte",
    "content": "<script context=\"module\">\n\tlet foo;\n</script>\n\n<script>\n\t// svelte-ignore unused-export-let\n\texport let unused;\n\tlet bar;\n\n\t// svelte-ignore module-script-reactive-declaration\n\t$: {\n\t\t// svelte-ignore module-script-reactive-declaration\n\t\tbar = foo;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment02-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang01-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang01-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang02-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang02-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-invalid-global -->\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .foo {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang03-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang03-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"scss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t.bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang04-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang04-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"sass\">\n  .foo\n    height: 20px\n    width: 20px\n    .bar\n      height: 10px\n      width: 10px\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang05-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang05-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"less\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t.bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang06-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 5\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/style-lang06-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"stylus\">\n  .foo\n    height: 20px\n    width: 20px\n    .bar\n      height: 10px\n      width: 10px\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/transform-test-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 9\n  column: 20\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 9\n  column: 35\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 16\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/transform-test-input.svelte",
    "content": "<script>\n</script>\n\n<!-- ✓ GOOD -->\n<!-- svelte-ignore a11y_autofocus a11y_missing_attribute -->\n<img src=\"https://example.com/img.png\" autofocus />\n\n<!-- ✗ BAD -->\n<!-- svelte-ignore a11y_autofocus a11y_missing_attribute -->\n<img src=\"https://example.com/img.png\" alt=\"Foo\" />\n\n<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css_unused_selector -->\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/transform-test-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/transform-test-svelte4-errors.yaml",
    "content": "- message: svelte-ignore comment is used, but not warned\n  line: 9\n  column: 20\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 9\n  column: 35\n  suggestions: null\n- message: svelte-ignore comment is used, but not warned\n  line: 16\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/transform-test-svelte4-input.svelte",
    "content": "<script>\n</script>\n\n<!-- ✓ GOOD -->\n<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"https://example.com/img.png\" autofocus />\n\n<!-- ✗ BAD -->\n<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"https://example.com/img.png\" alt=\"Foo\" />\n\n<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-input.svelte",
    "content": "<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<span tabindex=\"0\">\n\t<span class=\"element\"></span>\n</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<span tabindex=\"0\">\n\t<span class=\"element\"></span>\n</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/has-error-svelte4-input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<slot name=\"default\" />\n\n<!-- svelte-ignore a11y-autofocus -->\n<img src=\"foo\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/html-comment-input.svelte",
    "content": "<!-- svelte-ignore a11y_autofocus a11y_missing_attribute -->\n<img src=\"foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/html-comment-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/html-comment-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/ignore-js-input.js",
    "content": "// <!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n// <img src=\"foo\" alt=\"Foo\" />\n/* svelte-ignore a11y-autofocus a11y-missing-attribute */\n// <img src=\"foo\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/kebab-ignore-input.svelte",
    "content": "<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<span tabindex=\"0\">\n\t<span class=\"element\"></span>\n</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/reactive-component-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { onMount } from 'svelte'\n\n\tlet MyComponent: typeof import('./MyComponent.svelte').default | undefined\n\tonMount(() => {\n\t\timport('./MyComponent.svelte').then((component) => {\n\t\t\tMyComponent = component.default\n\t\t})\n\t})\n</script>\n\n{#if MyComponent}\n\t<!-- svelte-ignore reactive-component -->\n\t<MyComponent />\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/reactive-component-requirements.json",
    "content": "{\n\t\"svelte\": \"^4\"\n}"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/script-comment-input.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n\t// svelte-ignore state_referenced_locally\n\tconsole.log(count);\n\t// svelte-ignore state_referenced_locally\n\tconsole.log(doubled);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/script-comment-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/script-comment-svelte4-input.svelte",
    "content": "<script context=\"module\">\n\tlet foo;\n</script>\n\n<script>\n\t// svelte-ignore unused-export-let\n\texport let unused;\n\t// svelte-ignore module-script-reactive-declaration\n\t$: reactive = foo;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/script-comment-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang01-input.svelte",
    "content": "<div class=\"foo\"></div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style>\n\t.bar {\n\t\theight: 10px;\n\t\twidth: 10px;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang01-requirements.json",
    "content": "{\n\t\"FIXME\": \"It seems that unused selectors are not checked yet in Svelte v5.\",\n\t\"svelte\": \"^4 || ^3\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang02-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .foo {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang02-requirements.json",
    "content": "{\n\t\"FIXME\": \"It seems that unused selectors are not checked yet in Svelte v5.\",\n\t\"svelte\": \"^4 || ^3\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang03-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"scss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t.foo {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang03-requirements.json",
    "content": "{\n\t\"FIXME\": \"It seems that unused selectors are not checked yet in Svelte v5.\",\n\t\"svelte\": \"^4 || ^3\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang04-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"sass\">\n  .foo\n    height: 20px\n    width: 20px\n    .foo\n      height: 10px\n      width: 10px\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang04-requirements.json",
    "content": "{\n\t\"FIXME\": \"It seems that unused selectors are not checked yet in Svelte v5.\",\n\t\"svelte\": \"^4 || ^3\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang05-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"less\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t.foo {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang05-requirements.json",
    "content": "{\n\t\"FIXME\": \"It seems that unused selectors are not checked yet in Svelte v5.\",\n\t\"svelte\": \"^4 || ^3\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang06-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"stylus\">\n  .foo\n    height: 20px\n    width: 20px\n    .foo\n      height: 10px\n      width: 10px\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang06-requirements.json",
    "content": "{\n\t\"FIXME\": \"It seems that unused selectors are not checked yet in Svelte v5.\",\n\t\"svelte\": \"^4 || ^3\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/style-lang07-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\" />\n</div>\n\n<!-- svelte-ignore css-unused-selector -->\n<style lang=\"unknown\">\n  .foo\n    height: 20px\n    width: 20px\n    .foo\n      height: 10px\n      width: 10px\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore-comma-separated-input.svelte",
    "content": "<!-- svelte-ignore a11y_label_has_associated_control, a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore-comma-separated-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore-note-input.svelte",
    "content": "<!-- svelte-ignore a11y_label_has_associated_control (some reason), a11y_no_noninteractive_tabindex (because of reasons) -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore-note-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore01-input.svelte",
    "content": "<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore01-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore02-input.svelte",
    "content": "TEXT\n<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore02-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\nTEXT\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore03-input.svelte",
    "content": "<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n<!-- comment -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n<!-- svelte-ignore a11y_label_has_associated_control -->\n<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore03-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore03-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n<!-- comment -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n<!-- svelte-ignore a11y-label-has-associated-control -->\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore04-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#if true}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#if true}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore04-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore04-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#if true}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#if true}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore05-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#key 42}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/key}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore05-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore05-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#key 42}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/key}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore06-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#each [] as e}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#each [] as e}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore06-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore06-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#each [] as e}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#each [] as e}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore07-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42) then n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42) catch n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore07-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore07-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42) then n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42) catch n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/ts-lang01-input.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n\t// svelte-ignore state_referenced_locally\n\tconsole.log(count as any);\n\t// svelte-ignore state_referenced_locally\n\tconsole.log(doubled!);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/ts-lang01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/ts-lang01-svelte4-input.svelte",
    "content": "<script lang=\"ts\">\n\t// svelte-ignore unused-export-let\n\texport let something;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/invalid/children-snippet01-errors.yaml",
    "content": "- message: Found an unnecessary children snippet.\n  line: 2\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/invalid/children-snippet01-input.svelte",
    "content": "<Foo>\n  {#snippet children()}\n    Hello\n  {/snippet}\n</Foo>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/valid/implicit-snippet01-input.svelte",
    "content": "<Foo>\n  Hello\n</Foo>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/valid/named-snippet01-input.svelte",
    "content": "<Foo>\n  {#snippet bar()}\n    Hello\n  {/snippet}\n</Foo>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/valid/snippet-with-params01-input.svelte",
    "content": "<Foo>\n  {#snippet children(val)}\n    Hello {val}\n  {/snippet}\n</Foo>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-children-snippet/valid/standalone-snippet01-input.svelte",
    "content": "{#snippet children()}\n  Hello\n{/snippet}\n\n{@render children()}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/comments01-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 13\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 39\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/comments01-input.svelte",
    "content": "<div\n\tdata-text=\"{/* comment */ 'comment'} {// comment\n\t'comment'} \"\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/comments01-output.svelte",
    "content": "<div\n\tdata-text=\"{/* comment */ 'comment'} {// comment\n\t'comment'} \"\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/escape-test01-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 4\n  column: 17\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 4\n  column: 24\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 7\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 8\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/escape-test01-input.svelte",
    "content": "{'\\n'}\n{'\\r'}\n\n<div data-text=\"{'\\r'} {'\\n'}\" />\n\n{'\\\\\\\\'}\n{'\\\\r'}\n{'\\\\'}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/escape-test01-output.svelte",
    "content": "{'\\n'}\n{'\\r'}\n\n<div data-text=\"{'\\r'} {'\\n'}\" />\n\n\\\\\n\\r\n\\\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/invalid-test01-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 3\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 4\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 17\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 28\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 39\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 51\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/invalid-test01-input.svelte",
    "content": "{'space '}\n{' space'}\n{' space '}\n{'  '}\n\n<div data-text=\"{'space '} {' space'} {' space '} {'  '}\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/invalid-test01-output.svelte",
    "content": "{'space '}\n{' space'}\n{' space '}\n{'  '}\n\n<div data-text=\"{'space '} {' space'} {' space '} {'  '}\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test01-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 1\n  column: 16\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 16\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 3\n  column: 18\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 5\n  column: 17\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 16\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test01-input.svelte",
    "content": "<div data-text={'a'} />\n<div data-text={'a b'} />\n<div data-text=\"a{'b c'}d\" />\n<!--prettier-ignore-->\n<div data-text=a{\"b c\"}d />\n<div data-text={'\"<br>\"'} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test01-output.svelte",
    "content": "<div data-text=\"a\" />\n<div data-text=\"a b\" />\n<div data-text=\"ab cd\" />\n<!--prettier-ignore-->\n<div data-text=\"ab cd\" />\n<div data-text=\"&quot;<br>&quot;\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 17\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 4\n  column: 17\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 6\n  column: 17\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 8\n  column: 17\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-input.svelte",
    "content": "<!--prettier-ignore-->\n<div data-text=\"{'\\'\"'}\" />\n<!--prettier-ignore-->\n<div data-text=\"{\"'\\\"\"}\" />\n<!--prettier-ignore-->\n<div data-text='{'\\'\"'}' />\n<!--prettier-ignore-->\n<div data-text='{\"'\\\"\"}' />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-output.svelte",
    "content": "<!--prettier-ignore-->\n<div data-text=\"'&quot;\" />\n<!--prettier-ignore-->\n<div data-text=\"'&quot;\" />\n<!--prettier-ignore-->\n<div data-text='&apos;\"' />\n<!--prettier-ignore-->\n<div data-text='&apos;\"' />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/spaces-test01-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unexpected mustache interpolation with a string literal value.\n  line: 4\n  column: 17\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/spaces-test01-input.svelte",
    "content": "{'foo'}\n{`foo`}\n\n<div data-text=\"{'foo'} '\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/spaces-test01-output.svelte",
    "content": "foo\nfoo\n\n<div data-text=\"foo '\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/tag-test01-errors.yaml",
    "content": "- message: Unexpected mustache interpolation with a string literal value.\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/tag-test01-input.svelte",
    "content": "{'<br>'}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/tag-test01-output.svelte",
    "content": "&lt;br&gt;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/ignore-includes-comment/_config.json",
    "content": "{\n\t\"options\": [{ \"ignoreIncludesComment\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/ignore-includes-comment/comments01-input.svelte",
    "content": "<div\n\tdata-text=\"{/* comment */ 'comment'} {// comment\n\t'comment'} \"\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/ignore-string-escape/_config.json",
    "content": "{\n\t\"options\": [{ \"ignoreStringEscape\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/ignore-string-escape/escape-test01-input.svelte",
    "content": "{'\\n'}\n{'\\r'}\n\n<div data-text=\"{'\\r'} {'\\n'}\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test01-input.svelte",
    "content": "<script>\n\tlet foo = 'foo';\n</script>\n\nfoo 'foo'\n{foo}\n{'foo' || 'bar'}\n{1}\n{null}\n{`foo${foo}`}\n{'{foo'}\n\n<div data-text=\"foo 'foo' {foo} {'foo' || 'bar'} {1} {null}\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte",
    "content": "<HyperMD\n\tvalue={`# Doc\n\nText goes here`}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/empty/test01-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 6\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 7\n  column: 18\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 8\n  column: 17\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 10\n  column: 20\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 11\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/empty/test01-input.svelte",
    "content": "<script>\n\tlet selected = 'foo';\n\tlet children = 1;\n</script>\n\n<button class={selected ? 'selected' : ''}>foo</button>\n<button class=\"a {selected ? 'selected' : ''} b\">foo</button>\n<button class=\"a{selected ? ' selected ' : ' '}b\">foo</button>\n\n<div class=\"d-flex {children > 1 ? 'gap-3' : ''}\">foo</div>\n<div class=\"d-flex {children === 1 ? '' : 'gap-3'}\">foo</div>\n\n<!-- test01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/empty/test01-output.svelte",
    "content": "<script>\n\tlet selected = 'foo';\n\tlet children = 1;\n</script>\n\n<button class:selected={selected}>foo</button>\n<button class=\"a b\" class:selected={selected}>foo</button>\n<button class=\"a b\" class:selected={selected}>foo</button>\n\n<div class=\"d-flex\" class:gap-3={children > 1}>foo</div>\n<div class=\"d-flex\" class:gap-3={children !== 1}>foo</div>\n\n<!-- test01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/simple-test01-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 7\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 9\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/simple-test01-input.svelte",
    "content": "<script>\n\tlet current = 'foo';\n</script>\n\n<button class={current === 'foo' ? 'selected' : ''} on:click={() => (current = 'foo')}>foo</button>\n\n<button class={current === 'bar' ? 'selected' : ''} on:click={() => (current = 'bar')}>bar</button>\n\n<button class={current === 'baz' ? 'selected' : ''} on:click={() => (current = 'baz')}>baz</button>\n\n<style>\n\tbutton {\n\t\tdisplay: block;\n\t}\n\n\t.selected {\n\t\tbackground-color: #ff3e00;\n\t\tcolor: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/simple-test01-output.svelte",
    "content": "<script>\n\tlet current = 'foo';\n</script>\n\n<button class:selected={current === 'foo'} on:click={() => (current = 'foo')}>foo</button>\n\n<button class:selected={current === 'bar'} on:click={() => (current = 'bar')}>bar</button>\n\n<button class:selected={current === 'baz'} on:click={() => (current = 'baz')}>baz</button>\n\n<style>\n\tbutton {\n\t\tdisplay: block;\n\t}\n\n\t.selected {\n\t\tbackground-color: #ff3e00;\n\t\tcolor: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/svelte-element01-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 6\n  column: 41\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/svelte-element01-input.svelte",
    "content": "<script>\n\tlet expression = 'div';\n\tlet current = 'foo';\n</script>\n\n<svelte:element this={expression} class={current === 'foo' ? 'selected' : ''} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/svelte-element01-output.svelte",
    "content": "<script>\n\tlet expression = 'div';\n\tlet current = 'foo';\n</script>\n\n<svelte:element this={expression} class:selected={current === 'foo'} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test01-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 5\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 6\n  column: 18\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 7\n  column: 17\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test01-input.svelte",
    "content": "<script>\n\tlet selected = 'foo';\n</script>\n\n<button class={selected ? 'selected' : ''}>foo</button>\n<button class=\"a {selected ? 'selected' : ''} b\">foo</button>\n<button class=\"a{selected ? ' selected ' : ' '}b\">foo</button>\n\n<!-- test01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test01-output.svelte",
    "content": "<script>\n\tlet selected = 'foo';\n</script>\n\n<button class:selected={selected}>foo</button>\n<button class=\"a b\" class:selected={selected}>foo</button>\n<button class=\"a b\" class:selected={selected}>foo</button>\n\n<!-- test01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test02-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 8\n  column: 44\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test02-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class=\"{a ? ' a ' : b ? ' b ' : ''}{c ? 'c' : 'no-c'}{d === true ? ' d' : ''}\">foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test02-output.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class=\"{a ? ' a ' : b ? ' b ' : ''} {d === true ? ' d' : ''}\" class:c={c} class:no-c={!c}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test03-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 7\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test03-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = ' ';\n</script>\n\n<button class={a ? ` a ` : ''}>foo</button>\n<button class={a ? ` a ${b}` : ''}>foo</button>\n<button class={a ? ` a ` : c}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/test03-output.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = ' ';\n</script>\n\n<button class:a={a}>foo</button>\n<button class={a ? ` a ${b}` : ''}>foo</button>\n<button class={a ? ` a ` : c}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/transform-test01-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 8\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 9\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 10\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 11\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/transform-test01-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class={a ? 'a' : 'not-a'}>foo</button>\n<button class={!b ? 'no-b' : 'b'}>foo</button>\n<button class={c === d ? 'c-eq-d' : ''}>foo</button>\n<button class={c !== d ? 'c-not-eq-d' : 'c-eq-d'}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/transform-test01-output.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class:a={a} class:not-a={!a}>foo</button>\n<button class:no-b={!b} class:b={b}>foo</button>\n<button class:c-eq-d={c === d}>foo</button>\n<button class:c-not-eq-d={c !== d} class:c-eq-d={c === d}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/transform-test02-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 8\n  column: 15\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 9\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/transform-test02-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class={a || b ? 'a-or-b' : 'not-a-and-not-b'}>foo</button>\n<button class={!(c && d) ? 'c-and-d' : 'not-c-and-d'}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/transform-test02-output.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class:a-or-b={a || b} class:not-a-and-not-b={!(a || b)}>foo</button>\n<button class:c-and-d={!(c && d)} class:not-c-and-d={c && d}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/trim-test01-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 6\n  column: 16\n  suggestions: null\n- message: Unexpected class using the ternary operator.\n  line: 6\n  column: 41\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/trim-test01-input.svelte",
    "content": "<script>\n\tlet current = 'foo';\n\tlet active = true;\n</script>\n\n<button class=\"{active ? 'active' : ''} {current === 'foo' ? 'selected' : ''}\">foo</button>\n\n<!-- trim-test01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/trim-test01-output.svelte",
    "content": "<script>\n\tlet current = 'foo';\n\tlet active = true;\n</script>\n\n<button class=\"{current === 'foo' ? 'selected' : ''}\" class:active={active}>foo</button>\n\n<!-- trim-test01-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/trim-test01.2-errors.yaml",
    "content": "- message: Unexpected class using the ternary operator.\n  line: 6\n  column: 15\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/trim-test01.2-input.svelte",
    "content": "<script>\n\tlet current = 'foo';\n\tlet active = true;\n</script>\n\n<button class={current === 'foo' ? 'selected' : ''} class:active>foo</button>\n\n<!-- trim-test01.2-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/invalid/trim-test01.2-output.svelte",
    "content": "<script>\n\tlet current = 'foo';\n\tlet active = true;\n</script>\n\n<button class:selected={current === 'foo'} class:active>foo</button>\n\n<!-- trim-test01.2-input.svelte -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/empty/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"empty\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/empty/ignore-test05-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet a7 = 7;\n\tlet danger = false;\n</script>\n\n<button class={a ? 'a' : 'b'}>foo</button>\n<button class={!a ? 'b' : 'a'}>foo</button>\n<button class={a7 === 7 ? 'a' : 'b'}>foo</button>\n<button class=\"btn {danger ? 'btn-danger' : 'btn-primary'}\">foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/ignore-component01-input.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tlet current = 'foo';\n</script>\n\n<Component class={current === 'foo' ? 'selected' : ''} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/ignore-svelte-self01-input.svelte",
    "content": "<script>\n\tlet foo = Math.random();\n\tlet current = 'foo';\n</script>\n\n<div>\n\t{#if foo > 0.5}\n\t\t<svelte:self class={current === 'foo' ? 'selected' : ''} />\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/ignore-test01-input.svelte",
    "content": "<script>\n\tlet selected = 'foo';\n</script>\n\n<button class=\"{selected ? 'selected' : ''}-b\">foo</button>\n<button class=\"a-{selected ? 'selected' : ''}\">foo</button>\n<button class=\"a{selected ? ' selected ' : ''}b\">foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/ignore-test02-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n</script>\n\n<button class={a ? 'a' : !b ? 'no-b' : 'b'}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/ignore-test03-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class={a && b && c ? 'a b c' : ' '}>foo</button>\n<button class={d ? '??' : ' '}>foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/ignore-test04-input.svelte",
    "content": "<script>\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tlet d = true;\n</script>\n\n<button class=\"{a ? ' a' : b ? ' b' : ' '}{c ? 'c' : 'no-c'}{d === true ? ' d' : ''}\">foo</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-class-directive/valid/simple-test01-input.svelte",
    "content": "<script>\n\tlet current = 'foo';\n</script>\n\n<button class:selected={current === 'foo'} on:click={() => (current = 'foo')}>foo</button>\n\n<button class:selected={current === 'bar'} on:click={() => (current = 'bar')}>bar</button>\n\n<button class:selected={current === 'baz'} on:click={() => (current = 'baz')}>baz</button>\n\n<style>\n\tbutton {\n\t\tdisplay: block;\n\t}\n\n\t.selected {\n\t\tbackground-color: #ff3e00;\n\t\tcolor: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option1/_config.json",
    "content": "{\n\t\"options\": [{ \"excludedRunes\": [] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option1/test01-errors.yaml",
    "content": "- message: \"'prop1' is never reassigned. Use 'const' instead.\"\n  line: 2\n  column: 8\n  suggestions: null\n- message: \"'prop2' is never reassigned. Use 'const' instead.\"\n  line: 2\n  column: 15\n  suggestions: null\n- message: \"'zero' is never reassigned. Use 'const' instead.\"\n  line: 3\n  column: 6\n  suggestions: null\n- message: \"'derived' is never reassigned. Use 'const' instead.\"\n  line: 4\n  column: 6\n  suggestions: null\n- message: \"'derivedBy' is never reassigned. Use 'const' instead.\"\n  line: 5\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option1/test01-input.svelte",
    "content": "<script>\n\tlet { prop1, prop2 } = $props();\n\tlet zero = $state(0);\n\tlet derived = $derived(zero * 2);\n\tlet derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option1/test01-output.svelte",
    "content": "<script>\n\tconst { prop1, prop2 } = $props();\n\tconst zero = $state(0);\n\tconst derived = $derived(zero * 2);\n\tconst derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option2/_config.json",
    "content": "{\n\t\"options\": [{ \"excludedRunes\": [\"$state\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option2/test01-errors.yaml",
    "content": "- message: \"'prop1' is never reassigned. Use 'const' instead.\"\n  line: 2\n  column: 8\n  suggestions: null\n- message: \"'prop2' is never reassigned. Use 'const' instead.\"\n  line: 2\n  column: 15\n  suggestions: null\n- message: \"'derived' is never reassigned. Use 'const' instead.\"\n  line: 4\n  column: 6\n  suggestions: null\n- message: \"'derivedBy' is never reassigned. Use 'const' instead.\"\n  line: 5\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option2/test01-input.svelte",
    "content": "<script>\n\tlet { prop1, prop2 } = $props();\n\tlet zero = $state(0);\n\tlet derived = $derived(zero * 2);\n\tlet derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/option2/test01-output.svelte",
    "content": "<script>\n\tconst { prop1, prop2 } = $props();\n\tlet zero = $state(0);\n\tconst derived = $derived(zero * 2);\n\tconst derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/test01-errors.yaml",
    "content": "- message: \"'zero' is never reassigned. Use 'const' instead.\"\n  line: 3\n  column: 6\n  suggestions: null\n- message: \"'state' is never reassigned. Use 'const' instead.\"\n  line: 4\n  column: 6\n  suggestions: null\n- message: \"'raw' is never reassigned. Use 'const' instead.\"\n  line: 5\n  column: 6\n  suggestions: null\n- message: \"'doubled' is never reassigned. Use 'const' instead.\"\n  line: 6\n  column: 6\n  suggestions: null\n- message: \"'calculated' is never reassigned. Use 'const' instead.\"\n  line: 8\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/test01-input.svelte",
    "content": "<script>\n\tlet { prop1, prop2 } = $props();\n\tlet zero = 0;\n\tlet state = $state(0);\n\tlet raw = $state.raw(0);\n\tlet doubled = state * 2;\n\tlet derived = $derived(state * 2);\n\tlet calculated = calc();\n\tlet derivedBy = $derived.by(calc());\n\tlet noInit;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/invalid/test01-output.svelte",
    "content": "<script>\n\tlet { prop1, prop2 } = $props();\n\tconst zero = 0;\n\tconst state = $state(0);\n\tconst raw = $state.raw(0);\n\tconst doubled = state * 2;\n\tlet derived = $derived(state * 2);\n\tconst calculated = calc();\n\tlet derivedBy = $derived.by(calc());\n\tlet noInit;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/1238/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"destructuring\": \"all\",\n\t\t\t\"additionalProperties\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/1238/input.svelte",
    "content": "123\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/option1/_config.json",
    "content": "{\n\t\"options\": [{ \"excludedRunes\": [] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/option1/test01-input.svelte",
    "content": "<script>\n\tconst { prop1, prop2 } = $props();\n\tconst zero = $state(0);\n\tconst derived = $derived(zero * 2);\n\tconst derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/option2/_config.json",
    "content": "{\n\t\"options\": [{ \"excludedRunes\": [\"$props\", \"$derived\", \"$state\"] }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/option2/test01-input.svelte",
    "content": "<script>\n\tlet { prop1, prop2 } = $props();\n\tlet zero = $state(0);\n\tlet derived = $derived(zero * 2);\n\tlet derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-const/valid/test01-input.svelte",
    "content": "<script>\n\tlet { prop1, prop2 } = $props();\n\tconst zero = $state(0);\n\tlet derived = $derived(zero * 2);\n\tlet derivedBy = $derived.by(calc());\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/fixer-test01-errors.yaml",
    "content": "- message: Destructure $foo from $store for better change tracking & fewer redraws\n  line: 5\n  column: 8\n  suggestions:\n    - desc: \"Using destructuring like $: ({ $foo } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ $foo: foo } = $store);\n        </script>\n\n        $foo: {foo}\n        bar: {$store.bar}\n        baz: {$store.baz}\n        var: {$store.var}\n        null: {$store.null}\n        undefined: {$store.undefined}\n- message: Destructure bar from $store for better change tracking & fewer redraws\n  line: 6\n  column: 7\n  suggestions:\n    - desc: \"Using destructuring like $: ({ bar } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ bar } = $store);\n        </script>\n\n        $foo: {$store.$foo}\n        bar: {bar}\n        baz: {$store.baz}\n        var: {$store.var}\n        null: {$store.null}\n        undefined: {$store.undefined}\n- message: Destructure baz from $store for better change tracking & fewer redraws\n  line: 7\n  column: 7\n  suggestions:\n    - desc: \"Using destructuring like $: ({ baz } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ baz } = $store);\n        </script>\n\n        $foo: {$store.$foo}\n        bar: {$store.bar}\n        baz: {baz}\n        var: {$store.var}\n        null: {$store.null}\n        undefined: {$store.undefined}\n- message: Destructure var from $store for better change tracking & fewer redraws\n  line: 8\n  column: 7\n  suggestions:\n    - desc: \"Using destructuring like $: ({ var } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ var: var1 } = $store);\n        </script>\n\n        $foo: {$store.$foo}\n        bar: {$store.bar}\n        baz: {$store.baz}\n        var: {var1}\n        null: {$store.null}\n        undefined: {$store.undefined}\n- message: Destructure null from $store for better change tracking & fewer redraws\n  line: 9\n  column: 8\n  suggestions:\n    - desc: \"Using destructuring like $: ({ null } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ null: null1 } = $store);\n        </script>\n\n        $foo: {$store.$foo}\n        bar: {$store.bar}\n        baz: {$store.baz}\n        var: {$store.var}\n        null: {null1}\n        undefined: {$store.undefined}\n- message: Destructure undefined from $store for better change tracking & fewer redraws\n  line: 10\n  column: 13\n  suggestions:\n    - desc: \"Using destructuring like $: ({ undefined } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ undefined: undefined1 } = $store);\n        </script>\n\n        $foo: {$store.$foo}\n        bar: {$store.bar}\n        baz: {$store.baz}\n        var: {$store.var}\n        null: {$store.null}\n        undefined: {undefined1}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/fixer-test01-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n</script>\n\n$foo: {$store.$foo}\nbar: {$store.bar}\nbaz: {$store.baz}\nvar: {$store.var}\nnull: {$store.null}\nundefined: {$store.undefined}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/member01-errors.yaml",
    "content": "- message: Destructure foo from $store for better change tracking & fewer redraws\n  line: 5\n  column: 11\n  suggestions:\n    - desc: \"Using destructuring like $: ({ foo } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ foo } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n- message: Destructure foo from $store for better change tracking & fewer redraws\n  line: 6\n  column: 11\n  suggestions:\n    - desc: \"Using destructuring like $: ({ foo } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        $: ({ foo } = $store);\n        </script>\n\n        foo.bar: {$store.foo.bar}\n        foo.baz: {foo.baz}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/member01-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n</script>\n\nfoo.bar: {$store.foo.bar}\nfoo.baz: {$store.foo.baz}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/member02-errors.yaml",
    "content": "- message: Destructure foo from $store for better change tracking & fewer redraws\n  line: 8\n  column: 11\n  suggestions:\n    - desc: Using the predefined reactive variable foo\n      messageId: fixUseVariable\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t$: ({ foo, bar: b } = $store);\n        \t$: bbb = $store.baz;\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {$store.bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {$store.baz.bar}\n    - desc: \"Using destructuring like $: ({ foo } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t$: ({ foo, bar: b } = $store);\n        \t$: bbb = $store.baz;\n        $: ({ foo: foo1 } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {foo1.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {$store.bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {$store.baz.bar}\n- message: Destructure bar from $store for better change tracking & fewer redraws\n  line: 11\n  column: 11\n  suggestions:\n    - desc: Using the predefined reactive variable b\n      messageId: fixUseVariable\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t$: ({ foo, bar: b } = $store);\n        \t$: bbb = $store.baz;\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {b.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {$store.baz.bar}\n    - desc: \"Using destructuring like $: ({ bar } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t$: ({ foo, bar: b } = $store);\n        \t$: bbb = $store.baz;\n        $: ({ bar } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {$store.baz.bar}\n- message: Destructure baz from $store for better change tracking & fewer redraws\n  line: 14\n  column: 11\n  suggestions:\n    - desc: Using the predefined reactive variable bbb\n      messageId: fixUseVariable\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t$: ({ foo, bar: b } = $store);\n        \t$: bbb = $store.baz;\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {$store.bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {bbb.bar}\n    - desc: \"Using destructuring like $: ({ baz } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t$: ({ foo, bar: b } = $store);\n        \t$: bbb = $store.baz;\n        $: ({ baz } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {$store.bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {baz.bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/member02-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n\t$: ({ foo, bar: b } = $store);\n\t$: bbb = $store.baz;\n</script>\n\nfoo.bar: {foo.bar}\nfoo.baz: {$store.foo.baz}\n\nbar.foo: {b.foo}\nbar.baz: {$store.bar.baz}\n\nbaz.foo: {bbb.foo}\nbaz.bar: {$store.baz.bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/member03-errors.yaml",
    "content": "- message: Destructure foo from $store for better change tracking & fewer redraws\n  line: 9\n  column: 11\n  suggestions:\n    - desc: \"Using destructuring like $: ({ foo } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t// incorrect\n        \t$: ({ foo, bar: b } = store);\n        \t$: bbb = store.baz;\n        $: ({ foo: foo1 } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {foo1.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {$store.bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {$store.baz.bar}\n- message: Destructure bar from $store for better change tracking & fewer redraws\n  line: 12\n  column: 11\n  suggestions:\n    - desc: \"Using destructuring like $: ({ bar } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t// incorrect\n        \t$: ({ foo, bar: b } = store);\n        \t$: bbb = store.baz;\n        $: ({ bar } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {$store.baz.bar}\n- message: Destructure baz from $store for better change tracking & fewer redraws\n  line: 15\n  column: 11\n  suggestions:\n    - desc: \"Using destructuring like $: ({ baz } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \t// incorrect\n        \t$: ({ foo, bar: b } = store);\n        \t$: bbb = store.baz;\n        $: ({ baz } = $store);\n        </script>\n\n        foo.bar: {foo.bar}\n        foo.baz: {$store.foo.baz}\n\n        bar.foo: {b.foo}\n        bar.baz: {$store.bar.baz}\n\n        baz.foo: {bbb.foo}\n        baz.bar: {baz.bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/member03-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n\t// incorrect\n\t$: ({ foo, bar: b } = store);\n\t$: bbb = store.baz;\n</script>\n\nfoo.bar: {foo.bar}\nfoo.baz: {$store.foo.baz}\n\nbar.foo: {b.foo}\nbar.baz: {$store.bar.baz}\n\nbaz.foo: {bbb.foo}\nbaz.bar: {$store.baz.bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/module-errors.yaml",
    "content": "- message: Destructure bar from $foo for better change tracking & fewer redraws\n  line: 4\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/module-input.svelte",
    "content": "<script context=\"module\">\n</script>\n\n{$foo.bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/runes-with-store01-errors.yaml",
    "content": "- message: Destructure foo from $store for better change tracking & fewer redraws\n  line: 10\n  column: 18\n  suggestions:\n    - desc: 'Using destructuring like $: ({ foo } = $store); will run faster'\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n        \tlet count = $state(0);\n        \tlet doubled = $derived.by(() => count * 2);\n        $: ({ foo } = $store);\n        </script>\n\n        <!-- $state and $derived.by should be ignored (runes), but $store.foo should be reported -->\n        <p>Count: {count}</p>\n        <p>Doubled: {doubled}</p>\n        <p>Store value: {foo}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/runes-with-store01-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n\tlet count = $state(0);\n\tlet doubled = $derived.by(() => count * 2);\n</script>\n\n<!-- $state and $derived.by should be ignored (runes), but $store.foo should be reported -->\n<p>Count: {count}</p>\n<p>Doubled: {doubled}</p>\n<p>Store value: {$store.foo}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/runes-with-store01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/test01-errors.yaml",
    "content": "- message: Destructure bar from $foo for better change tracking & fewer redraws\n  line: 4\n  column: 2\n  suggestions:\n    - desc: \"Using destructuring like $: ({ bar } = $foo); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        $: ({ bar } = $foo);\n        </script>\n\n        {bar}\n\n        {$foo[baz]}\n\n        <!-- eslint-disable-next-line dot-notation -- tests -->\n        {$foo['qux']}\n- message: Destructure baz from $foo for better change tracking & fewer redraws\n  line: 6\n  column: 2\n  suggestions: null\n- message: Destructure 'qux' from $foo for better change tracking & fewer redraws\n  line: 9\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/test01-input.svelte",
    "content": "<script>\n</script>\n\n{$foo.bar}\n\n{$foo[baz]}\n\n<!-- eslint-disable-next-line dot-notation -- tests -->\n{$foo['qux']}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/test02-errors.yaml",
    "content": "- message: Destructure bar from $foo for better change tracking & fewer redraws\n  line: 1\n  column: 2\n  suggestions: null\n- message: Destructure bar from $foo for better change tracking & fewer redraws\n  line: 3\n  column: 2\n  suggestions: null\n- message: Destructure 'bar' from $foo for better change tracking & fewer redraws\n  line: 6\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/test02-input.svelte",
    "content": "{$foo.bar}\n\n{$foo[bar]}\n\n<!-- eslint-disable-next-line dot-notation -- tests -->\n{$foo['bar']}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/test03-errors.yaml",
    "content": "- message: Destructure baz from $store for better change tracking & fewer redraws\n  line: 18\n  column: 8\n  suggestions:\n    - desc: \"Using destructuring like $: ({ baz } = $store); will run faster\"\n      messageId: fixUseDestructuring\n      output: |\n        <script>\n        \timport store from './store.js';\n\n        \tlet foo, bar;\n        \t$: {\n        \t\tfoo = $store.foo;\n        \t\tbar = $store.bar;\n        \t}\n        $: ({ baz } = $store);\n        </script>\n\n        <div>\n        \tfoo: {`${foo} ${Date.now()}`}\n        </div>\n        <div>\n        \tbar: {`${bar} ${Date.now()}`}\n        </div>\n        <div>\n        \tbaz: {baz}\n        </div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/invalid/test03-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n\n\tlet foo, bar;\n\t$: {\n\t\tfoo = $store.foo;\n\t\tbar = $store.bar;\n\t}\n</script>\n\n<div>\n\tfoo: {`${foo} ${Date.now()}`}\n</div>\n<div>\n\tbar: {`${bar} ${Date.now()}`}\n</div>\n<div>\n\tbaz: {$store.baz}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/valid/builtin-vars01-input.svelte",
    "content": "<div>\n\t<slot name=\"title\" />\n\t{#if $$slots.description}\n\t\t<hr />\n\t\t<slot name=\"description\" />\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/valid/builtin-vars02-input.svelte",
    "content": "<Widget prop={$$props.prop} />\n<input type={$$restProps.type} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/valid/runes01-input.svelte.js",
    "content": "export class Test {\n\ta = $state(0);\n\tb = $derived.by(() => this.a * 2);\n\n\toutput() {\n\t\tconsole.log(this.a, this.b);\n\t}\n}"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/valid/runes01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/valid/script-test01-input.svelte",
    "content": "<script>\n\timport store from './store.js';\n\n\t$: foo = $store.foo;\n\t$: ({ bar } = $store);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-destructured-store-props/valid/test01-input.svelte",
    "content": "{foo$.bar}\n{f$oo.bar}\n\n{#each list as baz}\n\t{$foo[`bar${baz}`]}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/complex-test01-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 1\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/complex-test01-input.svelte",
    "content": "<div style=\"color: {r}e{d}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/complex-test01-output.svelte",
    "content": "<div style:color=\"{r}e{d}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/svelte-element01-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 5\n  column: 42\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/svelte-element01-input.svelte",
    "content": "<script>\n  let expression = \"div\"\n</script>\n\n<svelte:element this={expression} style=\"display:block\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/svelte-element01-output.svelte",
    "content": "<script>\n  let expression = \"div\"\n</script>\n\n<svelte:element this={expression} style:display=\"block\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary01-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 3\n  column: 5\n  suggestions: null\n- message: Can use style directives instead.\n  line: 4\n  column: 6\n  suggestions: null\n- message: Can use style directives instead.\n  line: 5\n  column: 6\n  suggestions: null\n- message: Can use style directives instead.\n  line: 9\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary01-input.svelte",
    "content": "<div\n  style=\"\n    position: {position};\n    {position === 'absolute' ? 'top: 20px;' : ''}\n    {pointerEvents === false ? 'pointer-events:none;' : ''}\n  \"\n/>\n\n<div style={position === \"absolute\" ? \"top: 20px;\" : \"\"} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary01-output.svelte",
    "content": "<div\n  style:position=\"{position}\" style=\"\n    {position === 'absolute' ? 'top: 20px;' : ''}\n  \" style:pointer-events={pointerEvents === false ? 'none' : null}\n/>\n\n<div style:top={position === \"absolute\" ? \"20px\" : null} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary02-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 3\n  column: 5\n  suggestions: null\n- message: Can use style directives instead.\n  line: 4\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary02-input.svelte",
    "content": "<div\n  style=\"\n    position: {position};\n    {pointerEvents === false ? 'pointer-events:none;' : ''}\n  \"\n  style:top={position === \"absolute\" ? \"20px\" : null}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary02-output.svelte",
    "content": "<div\n  style:position=\"{position}\" style=\"\n    {pointerEvents === false ? 'pointer-events:none;' : ''}\n  \"\n  style:top={position === \"absolute\" ? \"20px\" : null}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary03-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 3\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary03-input.svelte",
    "content": "<div\n  style=\"\n    {pointerEvents ? '' : 'pointer-events:none'}\n  \"\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary03-output.svelte",
    "content": "<div\n  style:pointer-events={pointerEvents ? null : 'none'}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary04-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 1\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary04-input.svelte",
    "content": "<div style=\"color: {red ? 'red' : ''};\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/ternary04-output.svelte",
    "content": "<div style:color=\"{red ? 'red' : ''}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test01-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 10\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test01-input.svelte",
    "content": "\n<script>\n  let red = \"red\"\n</script>\n\n<!-- ✓ GOOD -->\n<div style:color={red}>...</div>\n\n<!-- ✗ BAD -->\n<div style=\"color: {red};\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test01-output.svelte",
    "content": "\n<script>\n  let red = \"red\"\n</script>\n\n<!-- ✓ GOOD -->\n<div style:color={red}>...</div>\n\n<!-- ✗ BAD -->\n<div style:color=\"{red}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test02-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 1\n  column: 13\n  suggestions: null\n- message: Can use style directives instead.\n  line: 1\n  column: 27\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test02-input.svelte",
    "content": "<div style=\"color: {red}; width: 12px\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test02-output.svelte",
    "content": "<div style:color=\"{red}\" style=\"width: 12px\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test03-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 1\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test03-input.svelte",
    "content": "<div style=\"color: red;\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test03-output.svelte",
    "content": "<div style:color=\"red\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test04-errors.yaml",
    "content": "- message: Can use style directives instead.\n  line: 1\n  column: 13\n  suggestions: null\n- message: Can use style directives instead.\n  line: 1\n  column: 28\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test04-input.svelte",
    "content": "<div style='display:block; position:relative;'>\n    foo\n</div>"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/invalid/test04-output.svelte",
    "content": "<div style:display=\"block\" style='position:relative;'>\n    foo\n</div>"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/valid/empty01-input.svelte",
    "content": "<script>\n</script>\n\n<div style=\"\">...</div>\n<div style>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/valid/ignore-component01-input.svelte",
    "content": "<script>\n  import Component from \"./Component.svelte\"\n</script>\n\n<Component style=\"color: red;\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/valid/ignore-svelte-self01-input.svelte",
    "content": "<script>\n  let foo = Math.random()\n</script>\n\n<div>\n  {#if foo > 0.5}\n    <svelte:self style=\"display:block\" />\n  {/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/valid/invalid-style01-input.svelte",
    "content": "<script>\n  let style = \"color: red\"\n</script>\n\n<div {style}>...</div>\n<!-- prettier-ignore -->\n<div style=\"{style}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-style-directive/valid/test01-input.svelte",
    "content": "\n<script>\n  let red = \"red\"\n</script>\n\n<div style:color={red}>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setDate01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setDate(24);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setFullYear(1968);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setFullYear(1968, 10);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setFullYear03-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setFullYear(1968, 10, 3);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setHours(23);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setHours(23, 59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours03-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setHours(23, 59, 59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setHours04-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setHours(23, 59, 59, 999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMilliseconds01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setMilliseconds(999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setMinutes(59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setMinutes(59, 59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMinutes03-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setMinutes(59, 59, 999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setMonth(11);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setMonth02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setMonth(11, 23);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setSeconds(59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setSeconds02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setSeconds(59, 999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setTime01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setTime(123456);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCDate01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCDate(23);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCFullYear(1968);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCFullYear(1968, 10);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCFullYear03-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCFullYear(1968, 10, 3);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCHours(23);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCHours(23, 59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours03-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCHours(23, 59, 59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCHours04-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCHours(23, 59, 59, 999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMilliseconds01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCMilliseconds(420);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCMinutes(59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCMinutes(59, 59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMinutes03-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCMinutes(59, 59, 999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCMonth(10);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCMonth02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCMonth(10, 3);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCSeconds(59);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setUTCSeconds02-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setUTCSeconds(59, 999);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/date/setYear01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n  variable.setYear(1968);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 1\n  column: 19\n  suggestions: null\n- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.\n  line: 2\n  column: 19\n  suggestions: null\n- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.\n  line: 3\n  column: 19\n  suggestions: null\n- message: Found a mutable instance of the built-in URLSearchParams class. Use\n    SvelteURLSearchParams instead.\n  line: 4\n  column: 19\n  suggestions: null\n- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 5\n  column: 19\n  suggestions: null\n- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 6\n  column: 19\n  suggestions: null\n- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 10\n  column: 26\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports01-input.svelte.js",
    "content": "const variable1 = new Date(8.64e15);\nconst variable2 = new Map([[1, \"one\"], [2, \"two\"]]);\nconst variable3 = new Set([1, 2, 1, 3, 3]);\nconst variable4 = new URLSearchParams(\"foo=1&bar=2\");\nconst variable5 = new URL(\"https://svelte.dev/\");\nconst variable6 = new Date(8.64e15);\n\nexport {variable1, variable2, variable3, variable4, variable5, variable6 as var};\n\nexport const variable7 = new Date(8.64e15);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 1\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports02-input.svelte.js",
    "content": "const variable1 = new Date(8.64e15);\n\nexport default variable1;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 1\n  column: 16\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports03-input.svelte.js",
    "content": "export default new Date(8.64e15);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Date class. Use SvelteDate instead.\n  line: 1\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/exports04-input.svelte.js",
    "content": "const variable1 = new Date(8.64e15);\n\nexport { variable1 as default };\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/clear01-input.svelte",
    "content": "<script>\n  const variable = new Map([[1, \"one\"], [2, \"two\"]]);\n\n  variable.clear();\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/delete01-input.svelte",
    "content": "<script>\n  const variable = new Map([[1, \"one\"], [2, \"two\"]]);\n\n  variable.delete(1);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Map class. Use SvelteMap instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/map/set01-input.svelte",
    "content": "<script>\n  const variable = new Map([[1, \"one\"], [2, \"two\"]]);\n\n  variable.set(1, \"two\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/add01-input.svelte",
    "content": "<script>\n  const variable = new Set([1, 2, 1, 3, 3]);\n\n  variable.add(42);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/clear01-input.svelte",
    "content": "<script>\n  const variable = new Set([1, 2, 1, 3, 3]);\n\n  variable.clear();\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in Set class. Use SvelteSet instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/set/delete01-input.svelte",
    "content": "<script>\n  const variable = new Set([1, 2, 1, 3, 3]);\n\n  variable.delete(42);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hash01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.hash = \"anchor\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/host01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.host = \"example.test\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/hostname01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.hostname = \"example.test\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/href01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.href = \"https://svelte.dev/\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/password01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.password = \"passwd\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/pathname01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.pathname = \"tutorial\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/port01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.port = \"80\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/protocol01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.protocol = \"https\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/search01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.search = \"foo=bar\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URL class. Use SvelteURL instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url/username01-input.svelte",
    "content": "<script>\n  const variable = new URL(\"https://svelte.dev/\");\n\n  variable.username = \"usr\";\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URLSearchParams class. Use\n    SvelteURLSearchParams instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/append01-input.svelte",
    "content": "<script>\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n\n  variable.append(\"baz\", \"3\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URLSearchParams class. Use\n    SvelteURLSearchParams instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete01-input.svelte",
    "content": "<script>\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n\n  variable.delete(\"foo\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URLSearchParams class. Use\n    SvelteURLSearchParams instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/delete02-input.svelte",
    "content": "<script>\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n\n  variable.delete(\"bar\", \"42\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URLSearchParams class. Use\n    SvelteURLSearchParams instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/set01-input.svelte",
    "content": "<script>\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n\n  variable.set(\"foo\", \"-1\")\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-errors.yaml",
    "content": "- message: Found a mutable instance of the built-in URLSearchParams class. Use\n    SvelteURLSearchParams instead.\n  line: 2\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/invalid/url-search-params/sort01-input.svelte",
    "content": "<script>\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n\n  variable.sort();\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-date01-input.svelte",
    "content": "<script>\n  import { SvelteDate as Date } from \"svelte/reactivity\";\n\n  const variable = new Date(8.64e15);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-map01-input.svelte",
    "content": "<script>\n  import { SvelteMap as Map } from \"svelte/reactivity\";\n\n  const variable = new Map([[1, \"one\"], [2, \"two\"]]);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-set01-input.svelte",
    "content": "<script>\n  import { SvelteSet as Set } from \"svelte/reactivity\";\n\n  const variable = new Set([1, 2, 1, 3, 3]);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url-search-params01-input.svelte",
    "content": "<script>\n  import { SvelteURLSearchParams as URLSearchParams } from \"svelte/reactivity\";\n\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/aliased-url01-input.svelte",
    "content": "<script>\n  import { SvelteURL as URL } from \"svelte/reactivity\";\n\n  const variable = new URL(\"https://svelte.dev/\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/date01-input.svelte",
    "content": "<script>\n  const variable = new Date(8.64e15);\n\n\tconsole.log(Date.now());\n\tconsole.log(Date.parse(\"1970-01-01T00:00:00Z\"));\n\tconsole.log(Date.UTC(96, 1, 2, 3, 4, 5));\n\tconsole.log(variable.getDate());\n\tconsole.log(variable.getDay());\n\tconsole.log(variable.getFullYear());\n\tconsole.log(variable.getHours());\n\tconsole.log(variable.getMilliseconds());\n\tconsole.log(variable.getMinutes());\n\tconsole.log(variable.getMonth());\n\tconsole.log(variable.getSeconds());\n\tconsole.log(variable.getTime());\n\tconsole.log(variable.getTimezoneOffset());\n\tconsole.log(variable.getUTCDate());\n\tconsole.log(variable.getUTCDay());\n\tconsole.log(variable.getUTCFullYear());\n\tconsole.log(variable.getUTCHours());\n\tconsole.log(variable.getUTCMilliseconds());\n\tconsole.log(variable.getUTCMinutes());\n\tconsole.log(variable.getUTCMonth());\n\tconsole.log(variable.getUTCSeconds());\n\tconsole.log(variable.getYear());\n\tconsole.log(variable.toDateString());\n\tconsole.log(variable.toISOString());\n\tconsole.log(variable.toJSON());\n\tconsole.log(variable.toLocaleDateString());\n\tconsole.log(variable.toLocaleString());\n\tconsole.log(variable.toLocaleTimeString());\n\tconsole.log(variable.toString());\n\tconsole.log(variable.toTemporalInstant());\n\tconsole.log(variable.toTimeString());\n\tconsole.log(variable.toUTCString());\n\tconsole.log(variable.valueOf());\n\tconsole.log(variable[Symbol.toPrimitive](\"string\"));\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/map01-input.svelte",
    "content": "<script>\n\tconst variable = new Map([[1, \"one\"], [2, \"two\"]]);\n\n\tconsole.log(Map.groupBy(variable, (element) => \"group\"));\n\tconsole.log(Map[Symbol.species]);\n\tconsole.log(variable.entries());\n\tvariable.forEach((value) => {\n\t\tconsole.log(value);\n\t});\n\tconsole.log(variable.get(1));\n\tconsole.log(variable.has(1));\n\tconsole.log(variable.keys());\n\tconsole.log(variable.values());\n\tconsole.log(variable[Symbol.iterator]());\n\tconsole.log(variable.size);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/set01-input.svelte",
    "content": "<script>\n\tconst variable = new Set([1, 2, 1, 3, 3]);\n\tconst other = new Set([1, 2]);\n\n\tconsole.log(Set[Symbol.species]);\n\tconsole.log(variable.difference(other));\n\tconsole.log(variable.entries());\n\tvariable.forEach((value) => {\n\t\tconsole.log(value);\n\t});\n\tconsole.log(variable.has(1));\n\tconsole.log(variable.intersection(other));\n\tconsole.log(variable.isDisjointFrom(other));\n\tconsole.log(variable.isSubsetOf(other));\n\tconsole.log(variable.isSupersetOf(other));\n\tconsole.log(variable.keys());\n\tconsole.log(variable.symmetricDifference(other));\n\tconsole.log(variable.union(other));\n\tconsole.log(variable.values());\n\tconsole.log(variable[Symbol.iterator]());\n\tconsole.log(variable.size);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-date01-input.svelte",
    "content": "<script>\n  import { SvelteDate } from \"svelte/reactivity\";\n\n  const variable = new SvelteDate(8.64e15);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-map01-input.svelte",
    "content": "<script>\n  import { SvelteMap } from \"svelte/reactivity\";\n\n  const variable = new SvelteMap([[1, \"one\"], [2, \"two\"]]);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-set01-input.svelte",
    "content": "<script>\n  import { SvelteSet } from \"svelte/reactivity\";\n\n  const variable = new SvelteSet([1, 2, 1, 3, 3]);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url-search-params01-input.svelte",
    "content": "<script>\n  import { SvelteURLSearchParams } from \"svelte/reactivity\";\n\n  const variable = new SvelteURLSearchParams(\"foo=1&bar=2\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/svelte-url01-input.svelte",
    "content": "<script>\n  import { SvelteURL } from \"svelte/reactivity\";\n\n  const variable = new SvelteURL(\"https://svelte.dev/\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-date01-input.svelte",
    "content": "<script>\n  import { Date } from \"package\";\n\n  const variable = new Date(8.64e15);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-map01-input.svelte",
    "content": "<script>\n  import { Map } from \"package\";\n\n  const variable = new Map([[1, \"one\"], [2, \"two\"]]);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-set01-input.svelte",
    "content": "<script>\n  import { Set } from \"package\";\n\n  const variable = new Set([1, 2, 1, 3, 3]);\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url-search-params01-input.svelte",
    "content": "<script>\n  import { URLSearchParams } from \"package\";\n\n  const variable = new URLSearchParams(\"foo=1&bar=2\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/unrelated-url01-input.svelte",
    "content": "<script>\n  import { URL } from \"package\";\n\n  const variable = new URL(\"https://svelte.dev/\");\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url-search-params01-input.svelte",
    "content": "<script>\n\tconst variable = new URLSearchParams(\"foo=1&bar=2\");\n\n\tconsole.log(variable.size);\n\tconsole.log(variable.entries());\n\tvariable.forEach((value, key) => {\n\t\tconsole.log(key);\n\t\tconsole.log(value);\n\t})\n\tconsole.log(variable.get(\"foo\"));\n\tconsole.log(variable.getAll(\"foo\"));\n\tconsole.log(variable.has(\"foo\"));\n\tconsole.log(variable.has(\"foo\", \"1\"));\n\tconsole.log(variable.keys());\n\tconsole.log(variable.toString());\n\tconsole.log(variable.values());\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-svelte-reactivity/valid/url01-input.svelte",
    "content": "<script>\n\tconst variable = new URL(\"https://svelte.dev/\");\n\n\tconsole.log(variable.hash);\n\tconsole.log(variable.host);\n\tconsole.log(variable.hostname);\n\tconsole.log(variable.href);\n\tconsole.log(variable.origin);\n\tconsole.log(variable.password);\n\tconsole.log(variable.pathname);\n\tconsole.log(variable.port);\n\tconsole.log(variable.protocol);\n\tconsole.log(variable.search);\n\tconsole.log(variable.searchParams);\n\tconsole.log(variable.username);\n\tlet unused = 30;\n\tunused = variable.port;\n\tconsole.log(URL.canParse(\"https://svelte.dev/\"));\n\tobjectURL = URL.createObjectURL(new MediaSource());\n\tconsole.log(URL.parse(\"https://svelte.dev/\"));\n\tURL.revokeObjectURL(objectURL);\n\tconsole.log(variable.toJSON());\n\tconsole.log(variable.toString());\n</script>\n\n{variable}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/basic1-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName);\n        \t;\n        </script>\n\n        <input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/basic1-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect(() => {\n\t\tnewAlbumName = albumName;\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/basic2-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName + albumName);\n        \t;\n        </script>\n\n        <input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/basic2-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect(() => {\n\t\tnewAlbumName = albumName + albumName;\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/effect-pre1-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName);\n        \t;\n        </script>\n\n        <input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/effect-pre1-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect.pre(() => {\n\t\tnewAlbumName = albumName;\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/effect-pre2-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName + albumName);\n        \t;\n        </script>\n\n        <input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/effect-pre2-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect.pre(() => {\n\t\tnewAlbumName = albumName + albumName;\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/multiple-reassign1-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName);\n        \t;\n\n        \tsetInterval(() => {\n        \t\tnewAlbumName = albumName + albumName;\n        \t}, 1000);\n        </script>\n\n        <input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/multiple-reassign1-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect(() => {\n\t\tnewAlbumName = albumName;\n\t});\n\n\tsetInterval(() => {\n\t\tnewAlbumName = albumName + albumName;\n\t}, 1000);\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/multiple-reassign2-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName);\n        \t;\n        </script>\n\n        <FooComponent\n        \tdoSomething={(value) => {\n        \t\tnewAlbumName = value;\n        \t}}\n        />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/multiple-reassign2-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect(() => {\n\t\tnewAlbumName = albumName;\n\t});\n</script>\n\n<FooComponent\n\tdoSomething={(value) => {\n\t\tnewAlbumName = value;\n\t}}\n/>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/multiple-reassign3-errors.yaml",
    "content": "- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName);\n        \t;\n\n        \t$effect(() => {\n        \t\tnewAlbumName = albumName;\n        \t});\n        </script>\n\n        <input bind:value={newAlbumName} />\n- message: Prefer using writable $derived instead of $state and $effect\n  line: 4\n  column: 6\n  suggestions:\n    - desc: Rewrite $state and $effect to $derived\n      messageId: suggestRewrite\n      output: |\n        <script>\n        \tconst { albumName } = $props();\n\n        \tlet newAlbumName = $derived(albumName);\n        \t$effect(() => {\n        \t\tnewAlbumName = albumName;\n        \t});\n\n        \t;\n        </script>\n\n        <input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/invalid/multiple-reassign3-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect(() => {\n\t\tnewAlbumName = albumName;\n\t});\n\n\t$effect(() => {\n\t\tnewAlbumName = albumName;\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/valid/condition1-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\t$effect(() => {\n\t\tif (albumName === '') {\n\t\t\treturn;\n\t\t}\n\t\tnewAlbumName = albumName;\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/prefer-writable-derived/valid/condition2-input.svelte",
    "content": "<script>\n\tconst { albumName } = $props();\n\n\tlet newAlbumName = $state(albumName);\n\n\t// In practice, this can be converted to $derived, but it’s difficult to detect in all cases.\n\t// So the rule doesn’t report it for now.\n\t$effect(() => {\n\t\tif (albumName === '') {\n\t\t\tnewAlbumName = albumName + albumName;\n\t\t} else {\n\t\t\tnewAlbumName = albumName;\n\t\t}\n\t});\n</script>\n\n<input bind:value={newAlbumName} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-each-key/invalid/each-block-without-key01-errors.yaml",
    "content": "- message: Each block should have a key\n  line: 19\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-each-key/invalid/each-block-without-key01-input.svelte",
    "content": "<script>\n\timport Thing from './Thing.svelte';\n\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n\n\tfunction handleClick() {\n\t\tthings = things.slice(1);\n\t}\n</script>\n\n<button on:click={handleClick}> Remove first thing </button>\n\n{#each things as thing}\n\t<Thing name={thing.name} />\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-each-key/valid/keyed-each-block01-input.svelte",
    "content": "<script>\n\timport Thing from './Thing.svelte';\n\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n\n\tfunction handleClick() {\n\t\tthings = things.slice(1);\n\t}\n</script>\n\n<button on:click={handleClick}> Remove first thing </button>\n\n{#each things as thing (thing.id)}\n\t<Thing name={thing.name} />\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-each-key/valid/svelte5/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-each-key/valid/svelte5/each-blocks-without-an-item-input.svelte",
    "content": "<div class=\"chess-board\">\n\t{#each { length: 8 }, rank}\n\t\t{#each { length: 8 }}\n\t\t\t{rank}\n\t\t{/each}\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/import-alias01-errors.yaml",
    "content": "- message: Type parameters missing for the `createEventDispatcher` function call.\n  line: 4\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/import-alias01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { createEventDispatcher as ced } from 'svelte';\n\n\tconst dispatch = ced();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/no-types01-errors.yaml",
    "content": "- message: Type parameters missing for the `createEventDispatcher` function call.\n  line: 4\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/no-types01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/has-types01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch1 = createEventDispatcher<{ one: never; two: number }>();\n\tconst dispatch2 = createEventDispatcher<Record<string, never>>();\n\tconst dispatch3 = createEventDispatcher<any>();\n\tconst dispatch4 = createEventDispatcher<unknown>();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/no-typescript01-input.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/non-svelte-dispatcher01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { createEventDispatcher } from './unknown';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/checkAsyncFunctions/_config.json",
    "content": "{\n\t\"options\": [{ \"checkAsyncFunctions\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/checkAsyncFunctions/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/checkAsyncFunctions/async-arrow01-errors.yaml",
    "content": "- message: Component event name must start with \"on\".\n  line: 3\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/checkAsyncFunctions/async-arrow01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom: () => Promise<void>;\n  }\n\n  let { custom }: Props = $props();\n\n  void custom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/checkAsyncFunctions/async01-errors.yaml",
    "content": "- message: Component event name must start with \"on\".\n  line: 3\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/checkAsyncFunctions/async01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom(): Promise<void>;\n  }\n\n  let { custom }: Props = $props();\n\n  void custom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/no-prefix-arrow01-errors.yaml",
    "content": "- message: Component event name must start with \"on\".\n  line: 3\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/no-prefix-arrow01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom: () => void;\n  }\n\n  let { custom }: Props = $props();\n\n  custom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/no-prefix-inline-type01-errors.yaml",
    "content": "- message: Component event name must start with \"on\".\n  line: 2\n  column: 21\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/no-prefix-inline-type01-input.svelte",
    "content": "<script lang=\"ts\">\n  let { custom }: { custom(): void } = $props();\n\n  custom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/no-prefix01-errors.yaml",
    "content": "- message: Component event name must start with \"on\".\n  line: 3\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/invalid/no-prefix01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom(): void;\n  }\n\n  let { custom }: Props = $props();\n\n  custom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/valid/_requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/valid/any01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom: any;\n  }\n\n  let { custom }: Props = $props();\n\n  console.log(custom);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/valid/async01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom(): Promise<void>;\n  }\n\n  let { custom }: Props = $props();\n\n  void custom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/valid/non-function01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    custom: number;\n  }\n\n  let { custom }: Props = $props();\n\n  console.log(custom);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-prefix/valid/with-prefix01-input.svelte",
    "content": "<script lang=\"ts\">\n  interface Props {\n    oncustom(): void;\n  }\n\n  let { oncustom }: Props = $props();\n\n  oncustom();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/invalid/comment01-errors.yaml",
    "content": "- message: It cannot be optimized because contains comments.\n  line: 5\n  column: 30\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/invalid/comment01-input.svelte",
    "content": "<script>\n\tlet color = 'blue';\n</script>\n\n<div style=\"font-size: 12px; /* comment */ color: {color};\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/invalid/key01-errors.yaml",
    "content": "- message: It cannot be optimized because property of style declaration contain\n    interpolation.\n  line: 6\n  column: 30\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/invalid/key01-input.svelte",
    "content": "<script>\n\tlet color = 'blue';\n\tlet key = 'color';\n</script>\n\n<div style=\"font-size: 12px; {key}: {color};\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/invalid/test01-errors.yaml",
    "content": "- message: It cannot be optimized because too complex.\n  line: 12\n  column: 12\n  suggestions: null\n- message: It cannot be optimized because too complex.\n  line: 15\n  column: 46\n  suggestions: null\n- message: It cannot be optimized because contains comments.\n  line: 18\n  column: 30\n  suggestions: null\n- message: It cannot be optimized because property of style declaration contain\n    interpolation.\n  line: 19\n  column: 30\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/invalid/test01-input.svelte",
    "content": "<script>\n\tlet color = 'blue';\n\tlet x = 12,\n\t\ty = 12;\n\t$: transformStyle = `transform: translate(${x}px, ${y}px)`;\n\tlet pointerEvents = false;\n\tlet key = 'color';\n</script>\n\n<!-- ✓ GOOD -->\n<div style=\"font-size: 12px; color: {color}; transform: translate({x}px, {y}px);\" />\n<div style={pointerEvents === false ? 'pointer-events:none;' : ''} />\n\n<!-- ✗ BAD -->\n<div style=\"font-size: 12px; color: {color}; {transformStyle}\" />\n<div style:pointer-events={pointerEvents ? null : 'none'} />\n\n<div style=\"font-size: 12px; /* comment */ color: {color};\" />\n<div style=\"font-size: 12px; {key}: red;\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/valid/empty01-input.svelte",
    "content": "<script>\n</script>\n\n<div style=\"\">...</div>\n<div style>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-optimized-style-attribute/valid/test01-input.svelte",
    "content": "<script>\n\tlet color = 'blue';\n\tlet x = 12,\n\t\ty = 12;\n\t$: transformStyle = `transform: translate(${x}px, ${y}px)`;\n</script>\n\n<!-- ✓ GOOD -->\n<div style=\"font-size: 12px; color: {color}; transform: translate({x}px, {y}px);\" />\n\n<!-- ✗ BAD -->\n<div not-style=\"font-size: 12px; color: {color}; {transformStyle}\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-errors.yaml",
    "content": "- message: Store callbacks must use `set` param.\n  line: 4\n  column: 18\n  suggestions:\n    - desc: Add a `set` parameter.\n      messageId: addParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, (set) => true);\n        \treadable(false, (foo) => true);\n\n        \twritable(false, () => true);\n        \twritable(false, (foo) => true);\n\n        \treadable(false, (foo) => {\n        \t\tfoo;\n        \t\tinsideACallback(() => {\n        \t\t\tfoo;\n        \t\t});\n        \t\tconflictingName(() => {\n        \t\t\tconst foo = 303;\n        \t\t\tfoo;\n        \t\t});\n        \t});\n\n        \treadable(false, () => {\n        \t\tconst set = 303;\n        \t});\n\n        \tinsideACallback(() => {\n        \t\tconst set = 303;\n        \t\treadable(false, () => {\n        \t\t\tset;\n        \t\t});\n        \t});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 5\n  column: 18\n  suggestions:\n    - desc: Rename parameter from foo to `set`.\n      messageId: updateParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, () => true);\n        \treadable(false, (set) => true);\n\n        \twritable(false, () => true);\n        \twritable(false, (foo) => true);\n\n        \treadable(false, (foo) => {\n        \t\tfoo;\n        \t\tinsideACallback(() => {\n        \t\t\tfoo;\n        \t\t});\n        \t\tconflictingName(() => {\n        \t\t\tconst foo = 303;\n        \t\t\tfoo;\n        \t\t});\n        \t});\n\n        \treadable(false, () => {\n        \t\tconst set = 303;\n        \t});\n\n        \tinsideACallback(() => {\n        \t\tconst set = 303;\n        \t\treadable(false, () => {\n        \t\t\tset;\n        \t\t});\n        \t});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 7\n  column: 18\n  suggestions:\n    - desc: Add a `set` parameter.\n      messageId: addParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, () => true);\n        \treadable(false, (foo) => true);\n\n        \twritable(false, (set) => true);\n        \twritable(false, (foo) => true);\n\n        \treadable(false, (foo) => {\n        \t\tfoo;\n        \t\tinsideACallback(() => {\n        \t\t\tfoo;\n        \t\t});\n        \t\tconflictingName(() => {\n        \t\t\tconst foo = 303;\n        \t\t\tfoo;\n        \t\t});\n        \t});\n\n        \treadable(false, () => {\n        \t\tconst set = 303;\n        \t});\n\n        \tinsideACallback(() => {\n        \t\tconst set = 303;\n        \t\treadable(false, () => {\n        \t\t\tset;\n        \t\t});\n        \t});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 8\n  column: 18\n  suggestions:\n    - desc: Rename parameter from foo to `set`.\n      messageId: updateParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, () => true);\n        \treadable(false, (foo) => true);\n\n        \twritable(false, () => true);\n        \twritable(false, (set) => true);\n\n        \treadable(false, (foo) => {\n        \t\tfoo;\n        \t\tinsideACallback(() => {\n        \t\t\tfoo;\n        \t\t});\n        \t\tconflictingName(() => {\n        \t\t\tconst foo = 303;\n        \t\t\tfoo;\n        \t\t});\n        \t});\n\n        \treadable(false, () => {\n        \t\tconst set = 303;\n        \t});\n\n        \tinsideACallback(() => {\n        \t\tconst set = 303;\n        \t\treadable(false, () => {\n        \t\t\tset;\n        \t\t});\n        \t});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 10\n  column: 18\n  suggestions:\n    - desc: Rename parameter from foo to `set`.\n      messageId: updateParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, () => true);\n        \treadable(false, (foo) => true);\n\n        \twritable(false, () => true);\n        \twritable(false, (foo) => true);\n\n        \treadable(false, (set) => {\n        \t\tset;\n        \t\tinsideACallback(() => {\n        \t\t\tset;\n        \t\t});\n        \t\tconflictingName(() => {\n        \t\t\tconst foo = 303;\n        \t\t\tfoo;\n        \t\t});\n        \t});\n\n        \treadable(false, () => {\n        \t\tconst set = 303;\n        \t});\n\n        \tinsideACallback(() => {\n        \t\tconst set = 303;\n        \t\treadable(false, () => {\n        \t\t\tset;\n        \t\t});\n        \t});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 21\n  column: 18\n  suggestions: null\n- message: Store callbacks must use `set` param.\n  line: 27\n  column: 19\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test01-input.svelte",
    "content": "<script>\n\timport { readable, writable } from 'svelte/store';\n\n\treadable(false, () => true);\n\treadable(false, (foo) => true);\n\n\twritable(false, () => true);\n\twritable(false, (foo) => true);\n\n\treadable(false, (foo) => {\n\t\tfoo;\n\t\tinsideACallback(() => {\n\t\t\tfoo;\n\t\t});\n\t\tconflictingName(() => {\n\t\t\tconst foo = 303;\n\t\t\tfoo;\n\t\t});\n\t});\n\n\treadable(false, () => {\n\t\tconst set = 303;\n\t});\n\n\tinsideACallback(() => {\n\t\tconst set = 303;\n\t\treadable(false, () => {\n\t\t\tset;\n\t\t});\n\t});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-errors.yaml",
    "content": "- message: Store callbacks must use `set` param.\n  line: 4\n  column: 18\n  suggestions:\n    - desc: Add a `set` parameter.\n      messageId: addParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, function (set) {});\n        \treadable(false, (foo) => function () {});\n\n        \twritable(false, () => function () {});\n        \twritable(false, (foo) => function () {});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 5\n  column: 18\n  suggestions:\n    - desc: Rename parameter from foo to `set`.\n      messageId: updateParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, function () {});\n        \treadable(false, (set) => function () {});\n\n        \twritable(false, () => function () {});\n        \twritable(false, (foo) => function () {});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 7\n  column: 18\n  suggestions:\n    - desc: Add a `set` parameter.\n      messageId: addParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, function () {});\n        \treadable(false, (foo) => function () {});\n\n        \twritable(false, (set) => function () {});\n        \twritable(false, (foo) => function () {});\n        </script>\n- message: Store callbacks must use `set` param.\n  line: 8\n  column: 18\n  suggestions:\n    - desc: Rename parameter from foo to `set`.\n      messageId: updateParam\n      output: |\n        <script>\n        \timport { readable, writable } from 'svelte/store';\n\n        \treadable(false, function () {});\n        \treadable(false, (foo) => function () {});\n\n        \twritable(false, () => function () {});\n        \twritable(false, (set) => function () {});\n        </script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/invalid/test02-input.svelte",
    "content": "<script>\n\timport { readable, writable } from 'svelte/store';\n\n\treadable(false, function () {});\n\treadable(false, (foo) => function () {});\n\n\twritable(false, () => function () {});\n\twritable(false, (foo) => function () {});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/valid/test01-input.svelte",
    "content": "<script>\n\timport { readable, writable, derived } from 'svelte/store';\n\n\treadable(null, (set) => {\n\t\tset(new Date());\n\t\tconst interval = setInterval(() => set(new Date()), 1000);\n\t\treturn () => clearInterval(interval);\n\t});\n\n\treadable(false, (set) => true);\n\twritable(null, (set) => {\n\t\tset(0);\n\t\treturn () => {};\n\t});\n\n\tderived(a, ($a) => $a * 2);\n\tderived(\n\t\ta,\n\t\t($a, set) => {\n\t\t\tsetTimeout(() => set($a), 1000);\n\t\t},\n\t\t'one moment...'\n\t);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-callbacks-use-set-param/valid/test02-input.svelte",
    "content": "<script>\n\timport { readable, writable, derived } from 'svelte/store';\n\n\treadable(null, function (set) {\n\t\tset(new Date());\n\t\tconst interval = setInterval(() => set(new Date()), 1000);\n\t\treturn () => clearInterval(interval);\n\t});\n\n\treadable(false, function (set) {\n\t\t/* do nothing */\n\t});\n\n\twritable(0, function (set) {\n\t\treturn () => {};\n\t});\n\twritable(null, function (set) {\n\t\tset(0);\n\t\treturn () => {};\n\t});\n\n\tderived(a, function ($a) {\n\t\t/* do nothing */\n\t});\n\tderived(\n\t\ta,\n\t\tfunction ($a, set) {\n\t\t\tsetTimeout(() => set($a), 1000);\n\t\t},\n\t\t'one moment...'\n\t);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/attrs-store01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 19\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 12\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 7\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 10\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 17\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/attrs-store01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet value = writable('hello');\n</script>\n\n<div prop=\"Hello {store}\" />\n<div prop={store} />\n<div {store} />\n<div {...store} />\n<div bind:this={store} />\n<input bind:value />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/attrs-store01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet value = writable('hello');\n</script>\n\n<div prop=\"Hello {$store}\" />\n<div prop={$store} />\n<div {store} />\n<div {...$store} />\n<div bind:this={$store} />\n<input bind:value />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/await01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 30\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/await01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\tasync function foo() {\n\t\treturn [await store, await constStore];\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/await01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\tasync function foo() {\n\t\treturn [await store, await $constStore];\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 16\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 16\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 13\n  column: 15\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 15\n  column: 15\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 17\n  column: 15\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 19\n  column: 15\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 20\n  column: 21\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 25\n  column: 2\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 26\n  column: 9\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 30\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 31\n  column: 19\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 36\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 37\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 38\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 39\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 43\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(42);\n\tconst constStore = writable('hello');\n\n\t// UpdateExpression\n\tconsole.log(store++);\n\tconsole.log(store--);\n\tconsole.log(++store);\n\tconsole.log(--store);\n\n\t// UnaryExpression\n\tconsole.log(-store);\n\t// eslint-disable-next-line no-implicit-coercion -- test\n\tconsole.log(+store);\n\tconsole.log(!store);\n\tconsole.log(~store);\n\tconsole.log(typeof store);\n\tconsole.log(!constStore);\n\tconsole.log(typeof constStore);\n\n\tlet foo = 1;\n\t// AssignmentExpression\n\tstore = writable(42);\n\tstore += 42;\n\tfoo += store;\n\tfoo = store;\n\n\t// BinaryExpression\n\tconsole.log(store + 42);\n\tconsole.log(42 + store);\n\tconsole.log(store == null);\n\tconsole.log(store != null);\n\tconsole.log(store === null);\n\tconsole.log(store !== null);\n\tconsole.log(constStore == null);\n\tconsole.log(constStore != null);\n\tconsole.log(constStore === null);\n\tconsole.log(constStore !== null);\n\n\t// LogicalExpression\n\tconsole.log(store && foo);\n\tconsole.log(constStore || foo);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(42);\n\tconst constStore = writable('hello');\n\n\t// UpdateExpression\n\tconsole.log($store++);\n\tconsole.log($store--);\n\tconsole.log(++$store);\n\tconsole.log(--$store);\n\n\t// UnaryExpression\n\tconsole.log(-$store);\n\t// eslint-disable-next-line no-implicit-coercion -- test\n\tconsole.log(+$store);\n\tconsole.log(!store);\n\tconsole.log(~$store);\n\tconsole.log(typeof store);\n\tconsole.log(!$constStore);\n\tconsole.log(typeof $constStore);\n\n\tlet foo = 1;\n\t// AssignmentExpression\n\tstore = writable(42);\n\t$store += 42;\n\tfoo += $store;\n\tfoo = store;\n\n\t// BinaryExpression\n\tconsole.log($store + 42);\n\tconsole.log(42 + $store);\n\tconsole.log(store == null);\n\tconsole.log(store != null);\n\tconsole.log(store === null);\n\tconsole.log(store !== null);\n\tconsole.log($constStore == null);\n\tconsole.log($constStore != null);\n\tconsole.log($constStore === null);\n\tconsole.log($constStore !== null);\n\n\t// LogicalExpression\n\tconsole.log(store && foo);\n\tconsole.log($constStore || foo);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/calc01-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/call01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 5\n  column: 11\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 6\n  column: 11\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/call01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(() => 'hello');\n\tconst constStore = writable(() => 'hello');\n\t$: foo = store();\n\t$: bar = constStore();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/call01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(() => 'hello');\n\tconst constStore = writable(() => 'hello');\n\t$: foo = $store();\n\t$: bar = $constStore();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 5\n  column: 26\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 6\n  column: 16\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 6\n  column: 32\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\t$: message = store ? `${store} world` : null;\n\t$: message2 = constStore ? `${constStore} world` : null;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/condition01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\t$: message = store ? `${$store} world` : null;\n\t$: message2 = $constStore ? `${$constStore} world` : null;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 19\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 19\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 13\n  column: 12\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 14\n  column: 10\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 15\n  column: 17\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 16\n  column: 9\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 17\n  column: 10\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 19\n  column: 15\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 21\n  column: 18\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 22\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tlet color = writable('red');\n\tlet value = writable('hello');\n\tlet handleClick = writable(() => {});\n\tconst list = [];\n</script>\n\n<button on:click={handleClick} />\n<div style:color={store} />\n<div style:color />\n<div use:store />\n<div transition:store />\n<div in:store />\n<div out:store />\n{#each list as e (e)}\n\t<div animate:store />\n{/each}\n<div class:name={constStore} />\n<div class:constStore />\n\n<!-- ignore -->\n<div class:name={store} />\n<div class:store />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/directives-store01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tlet color = writable('red');\n\tlet value = writable('hello');\n\tlet handleClick = writable(() => {});\n\tconst list = [];\n</script>\n\n<button on:click={$handleClick} />\n<div style:color={$store} />\n<div style:color />\n<div use:$store />\n<div transition:$store />\n<div in:$store />\n<div out:$store />\n{#each list as e (e)}\n\t<div animate:$store />\n{/each}\n<div class:name={$constStore} />\n<div class:constStore />\n\n<!-- ignore -->\n<div class:name={store} />\n<div class:store />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 5\n  column: 18\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tfor (const k in store) {\n\t\tconsole.log(k);\n\t}\n\tfor (const k in constStore) {\n\t\tconsole.log(k);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/for-in01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tfor (const k in $store) {\n\t\tconsole.log(k);\n\t}\n\tfor (const k in $constStore) {\n\t\tconsole.log(k);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 5\n  column: 18\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tfor (const c of store) {\n\t\tconsole.log(c);\n\t}\n\tfor (const c of constStore) {\n\t\tconsole.log(c);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/for-of01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tfor (const c of $store) {\n\t\tconsole.log(c);\n\t}\n\tfor (const c of $constStore) {\n\t\tconsole.log(c);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 6\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n</script>\n\n<!-- ignore -->\n{#if store}\n\t<div class:foo={store} />\n{/if}\n{#if constStore}\n\t<div class:foo={constStore} />\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/if-block01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n</script>\n\n<!-- ignore -->\n{#if store}\n\t<div class:foo={store} />\n{/if}\n{#if $constStore}\n\t<div class:foo={$constStore} />\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tif (store) {\n\t\tconsole.log(store);\n\t}\n\tif (constStore) {\n\t\tconsole.log(constStore);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/if-statement01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tif (store) {\n\t\tconsole.log(store);\n\t}\n\tif ($constStore) {\n\t\tconsole.log(constStore);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/import01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 24\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 45\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/import01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\tasync function foo() {\n\t\treturn [await import(store), await import(constStore)];\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/import01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\tasync function foo() {\n\t\treturn [await import($store), await import($constStore)];\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 4\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 4\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 4\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 13\n  column: 4\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 15\n  column: 4\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 19\n  column: 4\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\t$: obj = {\n\t\t[store]: store,\n\t\t[constStore]: constStore\n\t};\n\tclass Foo {\n\t\t[store] = store;\n\n\t\t[constStore] = constStore;\n\n\t\t[store]() {\n\t\t\treturn store;\n\t\t}\n\n\t\t[constStore]() {\n\t\t\treturn constStore;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/properties01-output.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\t$: obj = {\n\t\t[$store]: store,\n\t\t[$constStore]: constStore\n\t};\n\tclass Foo {\n\t\t[$store] = store;\n\n\t\t[$constStore] = constStore;\n\n\t\t[$store]() {\n\t\t\treturn store;\n\t\t}\n\n\t\t[$constStore]() {\n\t\t\treturn constStore;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 27\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 25\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 30\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n</script>\n\n<MyComponent prop=\"Hello {store}\" />\n<MyComponent bind:this={store} />\n<MyComponent --my-style-var={store} />\n<MyComponent {...store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/props-store01-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n</script>\n\n<MyComponent prop=\"Hello {$store}\" />\n<MyComponent bind:this={$store} />\n<MyComponent --my-style-var={$store} />\n<MyComponent {...$store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 6\n  column: 17\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 17\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable([42]);\n\tconst constStore = writable(['hello']);\n\n\tconsole.log(...store);\n\tconsole.log(...constStore);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/spread01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable([42]);\n\tconst constStore = writable(['hello']);\n\n\tconsole.log(...$store);\n\tconsole.log(...$constStore);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 25\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 49\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 25\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 47\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 25\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 52\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 25\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 40\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet component = writable(MyComponent);\n</script>\n\n<svelte:component this={component} prop=\"Hello {store}\" />\n<svelte:component this={component} bind:this={store} />\n<svelte:component this={component} --my-style-var={store} />\n<svelte:component this={component} {...store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-component01-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet component = writable(MyComponent);\n</script>\n\n<svelte:component this={$component} prop=\"Hello {$store}\" />\n<svelte:component this={$component} bind:this={$store} />\n<svelte:component this={$component} --my-style-var={$store} />\n<svelte:component this={$component} {...$store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 23\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 41\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 23\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 34\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 23\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 29\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 23\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 32\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 13\n  column: 23\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 13\n  column: 39\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 14\n  column: 23\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 14\n  column: 35\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet value = writable('hello');\n\tlet div = writable('div');\n\tlet input = writable('input');\n</script>\n\n<svelte:element this={div} prop=\"Hello {store}\" />\n<svelte:element this={div} prop={store} />\n<svelte:element this={div} {store} />\n<svelte:element this={div} {...store} />\n<svelte:element this={div} bind:this={store} />\n<svelte:element this={input} bind:value />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/svelte-element01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet value = writable('hello');\n\tlet div = writable('div');\n\tlet input = writable('input');\n</script>\n\n<svelte:element this={$div} prop=\"Hello {$store}\" />\n<svelte:element this={$div} prop={$store} />\n<svelte:element this={$div} {store} />\n<svelte:element this={$div} {...$store} />\n<svelte:element this={$div} bind:this={$store} />\n<svelte:element this={$input} bind:value />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 5\n  column: 10\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tswitch (store) {\n\t\tcase 'hello':\n\t\t\tconsole.log('hello');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('other');\n\t}\n\tswitch (constStore) {\n\t\tcase 'hello':\n\t\t\tconsole.log('hello');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('other');\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/switch01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tswitch ($store) {\n\t\tcase 'hello':\n\t\t\tconsole.log('hello');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('other');\n\t}\n\tswitch ($constStore) {\n\t\tcase 'hello':\n\t\t\tconsole.log('hello');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('other');\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 6\n  column: 14\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable((...args) => args.join(','));\n\tconst constStore = writable((...args) => args.join(','));\n\n\tconsole.log(store`abc`);\n\tconsole.log(constStore`abc`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/tagged01-output.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable((...args) => args.join(','));\n\tconst constStore = writable((...args) => args.join(','));\n\n\tconsole.log($store`abc`);\n\tconsole.log($constStore`abc`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/test01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 17\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 18\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 19\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/test01-input.svelte",
    "content": "<script>\n\timport { writable, readable, derived, get } from 'svelte/store';\n\tconst storeValue1 = writable('hello');\n\tconst storeValue2 = readable('hello');\n\tconst storeValue3 = derived(storeValue1, () => {});\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$storeValue1}</p>\n<p>{get(storeValue1)}</p>\n<p>{$storeValue2}</p>\n<p>{get(storeValue2)}</p>\n<p>{$storeValue3}</p>\n<p>{get(storeValue3)}</p>\n\n<!-- ✗ BAD -->\n<p>{storeValue1}</p>\n<p>{storeValue2}</p>\n<p>{storeValue3}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/test01-output.svelte",
    "content": "<script>\n\timport { writable, readable, derived, get } from 'svelte/store';\n\tconst storeValue1 = writable('hello');\n\tconst storeValue2 = readable('hello');\n\tconst storeValue3 = derived(storeValue1, () => {});\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$storeValue1}</p>\n<p>{get(storeValue1)}</p>\n<p>{$storeValue2}</p>\n<p>{get(storeValue2)}</p>\n<p>{$storeValue3}</p>\n<p>{get(storeValue3)}</p>\n\n<!-- ✗ BAD -->\n<p>{$storeValue1}</p>\n<p>{$storeValue2}</p>\n<p>{$storeValue3}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 19\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 18\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable, Writable } from 'svelte/store';\n\tlet store: Writable<number> | null = null;\n\tconst constStore = writable('hello');\n</script>\n\n<div style:color={store} />\n<div class:name={constStore} />\n<div class:constStore />\n\n<!-- ignore -->\n<div class:name={store} />\n<div class:store />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-class-directives01-output.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable, Writable } from 'svelte/store';\n\tlet store: Writable<number> | null = null;\n\tconst constStore = writable('hello');\n</script>\n\n<div style:color={$store} />\n<div class:name={$constStore} />\n<div class:constStore />\n\n<!-- ignore -->\n<div class:name={store} />\n<div class:store />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 5\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { _ } from 'svelte-i18n';\n</script>\n\n<h1>{_('page.home.title')}</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-i18n-output.svelte",
    "content": "<script lang=\"ts\">\n\timport { _ } from 'svelte-i18n';\n</script>\n\n<h1>{$_('page.home.title')}</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 18\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 6\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 12\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable, Writable } from 'svelte/store';\n\tlet store: Writable<number> | null = null;\n\tconst constStore = writable('hello');\n</script>\n\n<!-- ignore -->\n{#if store}\n\t<div class:foo={store} />\n{/if}\n{#if constStore}\n\t<div class:foo={constStore} />\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-if-block01-output.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable, Writable } from 'svelte/store';\n\tlet store: Writable<number> | null = null;\n\tconst constStore = writable('hello');\n</script>\n\n<!-- ignore -->\n{#if store}\n\t<div class:foo={$store} />\n{/if}\n{#if $constStore}\n\t<div class:foo={$constStore} />\n{/if}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 6\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 7\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 8\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 9\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 10\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 11\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport * as stores from '../../ts/store';\n\timport { get } from 'svelte/store';\n</script>\n\n<p>{stores.wStore}</p>\n<p>{stores.rStore}</p>\n<p>{stores.dStore}</p>\n<p>{stores.unionStore}</p>\n<p>{stores.storeLike}</p>\n<p>{stores.stores.w}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-stores01-output.svelte",
    "content": "<script lang=\"ts\">\n\timport * as stores from '../../ts/store';\n\timport { get } from 'svelte/store';\n</script>\n\n<p>{stores.wStore}</p>\n<p>{stores.rStore}</p>\n<p>{stores.dStore}</p>\n<p>{stores.unionStore}</p>\n<p>{stores.storeLike}</p>\n<p>{stores.stores.w}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-errors.yaml",
    "content": "- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 20\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 21\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 22\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 23\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 24\n  column: 5\n  suggestions: null\n- message: Use the $ prefix or the get function to access reactive values instead\n    of accessing the raw store.\n  line: 25\n  column: 5\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { wStore, rStore, dStore, unionStore, storeLike, stores } from '../../ts/store';\n\timport { get } from 'svelte/store';\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$wStore}</p>\n<p>{get(wStore)}</p>\n<p>{$rStore}</p>\n<p>{get(rStore)}</p>\n<p>{$dStore}</p>\n<p>{get(dStore)}</p>\n<p>{$unionStore}</p>\n<p>{get(unionStore)}</p>\n<p>{$storeLike}</p>\n<p>{get(storeLike)}</p>\n<p>{get(stores.w)}</p>\n\n<!-- ✗ BAD -->\n<p>{wStore}</p>\n<p>{rStore}</p>\n<p>{dStore}</p>\n<p>{unionStore}</p>\n<p>{storeLike}</p>\n<p>{stores.w}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/invalid/ts/ts-test01-output.svelte",
    "content": "<script lang=\"ts\">\n\timport { wStore, rStore, dStore, unionStore, storeLike, stores } from '../../ts/store';\n\timport { get } from 'svelte/store';\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$wStore}</p>\n<p>{get(wStore)}</p>\n<p>{$rStore}</p>\n<p>{get(rStore)}</p>\n<p>{$dStore}</p>\n<p>{get(dStore)}</p>\n<p>{$unionStore}</p>\n<p>{get(unionStore)}</p>\n<p>{$storeLike}</p>\n<p>{get(storeLike)}</p>\n<p>{get(stores.w)}</p>\n\n<!-- ✗ BAD -->\n<p>{$wStore}</p>\n<p>{$rStore}</p>\n<p>{$dStore}</p>\n<p>{$unionStore}</p>\n<p>{$storeLike}</p>\n<p>{stores.w}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/ts/non-store.ts",
    "content": "export const numValue = 42;\nexport const strValue = 'string';\nexport let anyValue: any;\nexport let nullableValue: null | { foo: number };\nexport const hasSubscribe1 = { subscribe: 42 };\nexport const hasSubscribe2 = {\n\tsubscribe: (): void => {\n\t\t// noop\n\t}\n};\nexport const hasSubscribe3 = {\n\tsubscribe: (_fn: () => void): void => {\n\t\t// noop\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/ts/store.ts",
    "content": "import type { Subscriber, Unsubscriber, Writable } from 'svelte/store';\nimport { writable, readable, derived } from 'svelte/store';\nexport const wStore = writable(0);\nexport const rStore = readable(0);\nexport const dStore = derived(wStore, () => {\n\t//\n});\nexport let unionStore: null | Writable<number>;\ninterface StoreLike extends Writable<number> {\n\tsubscribe(\n\t\trun: Subscriber<number>,\n\t\tinvalidate?: (value?: number) => void,\n\t\tadditional?: string\n\t): Unsubscriber;\n}\nexport let storeLike: StoreLike;\nexport const stores = {\n\tw: wStore,\n\tr: rStore,\n\td: dStore\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/attrs-store01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet value = writable('hello');\n</script>\n\n<div prop=\"Hello {$store}\" />\n<div prop={$store} />\n<div {...$store} />\n<div bind:this={$store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/await01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\tasync function foo() {\n\t\treturn [await store, await $constStore];\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/calc01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(42);\n\tconst constStore = writable('hello');\n\n\t// UpdateExpression\n\tconsole.log($store++);\n\tconsole.log($store--);\n\tconsole.log(++$store);\n\tconsole.log(--$store);\n\n\t// UnaryExpression\n\tconsole.log(-$store);\n\t// eslint-disable-next-line no-implicit-coercion -- test\n\tconsole.log(+$store);\n\tconsole.log(!store);\n\tconsole.log(~$store);\n\tconsole.log(typeof store);\n\tconsole.log(!$constStore);\n\tconsole.log(typeof $constStore);\n\n\tlet foo = 1;\n\t// AssignmentExpression\n\tstore = writable(42);\n\t$store += 42;\n\tfoo += $store;\n\tfoo = store;\n\n\t// BinaryExpression\n\tconsole.log($store + 42);\n\tconsole.log(42 + $store);\n\tconsole.log(store == null);\n\tconsole.log(store != null);\n\tconsole.log(store === null);\n\tconsole.log(store !== null);\n\tconsole.log($constStore == null);\n\tconsole.log($constStore != null);\n\tconsole.log($constStore === null);\n\tconsole.log($constStore !== null);\n\n\t// LogicalExpression\n\tconsole.log(store && foo);\n\tconsole.log($constStore || foo);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/call01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(() => 'hello');\n\tconst constStore = writable(() => 'hello');\n\t$: foo = $store();\n\t$: bar = $constStore();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/condition01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\t$: message = store ? `${$store} world` : null;\n\t$: message2 = $constStore ? `${$constStore} world` : null;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/directives-store01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet color = writable('red');\n\tlet value = writable('hello');\n\tlet handleClick = writable(() => {});\n\tconst list = [];\n</script>\n\n<button on:click={$handleClick} />\n<div style:color={$store} />\n<div use:$store />\n<div transition:$store />\n<div in:$store />\n<div out:$store />\n{#each list as e (e)}\n\t<div animate:$store />\n{/each}\n\n<div class:name={store} />\n<div class:store />\n<div class:name={$store} />\n<div class:$store />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/for-in01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tfor (const k in $store) {\n\t\tconsole.log(k);\n\t}\n\tfor (const k in $constStore) {\n\t\tconsole.log(k);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/for-of01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tfor (const c of $store) {\n\t\tconsole.log(c);\n\t}\n\tfor (const c of $constStore) {\n\t\tconsole.log(c);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/if-statement01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tif (store) {\n\t\tconsole.log($store);\n\t}\n\tif ($constStore) {\n\t\tconsole.log($constStore);\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/import01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\tasync function foo() {\n\t\treturn [await import($store), await import($constStore)];\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/properties01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\n\t$: obj = {\n\t\t[$store]: store,\n\t\t[$constStore]: constStore,\n\t\tstore,\n\t\tconstStore\n\t};\n\tclass Foo {\n\t\tstore = store;\n\n\t\t[$store] = store;\n\n\t\tconstStore = constStore;\n\n\t\t[$constStore] = constStore;\n\t}\n\tclass Bar {\n\t\t[$store]() {\n\t\t\treturn store;\n\t\t}\n\n\t\tstore() {\n\t\t\treturn store;\n\t\t}\n\n\t\t[$constStore]() {\n\t\t\treturn constStore;\n\t\t}\n\n\t\tconstStore() {\n\t\t\treturn constStore;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/props-store01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n</script>\n\n<MyComponent prop={store} />\n<MyComponent {store} />\n<MyComponent bind:value={store} />\n<MyComponent bind:store />\n<MyComponent bind:this={$store} />\n<MyComponent --my-style-var={$store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/spread01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable([42]);\n\tconst constStore = writable(['hello']);\n\n\tconsole.log(...$store);\n\tconsole.log(...$constStore);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/svelte-component01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet component = writable(MyComponent);\n</script>\n\n<svelte:component this={$component} prop=\"Hello {$store}\" />\n<svelte:component this={$component} bind:this={$store} />\n<svelte:component this={$component} --my-style-var={$store} />\n<svelte:component this={$component} {...$store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/svelte-element01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tlet value = writable('hello');\n\tlet div = writable('div');\n\tlet input = writable('input');\n</script>\n\n<svelte:element this={$div} prop=\"Hello {$store}\" />\n<svelte:element this={$div} prop={$store} />\n<svelte:element this={$div} {...$store} />\n<svelte:element this={$div} bind:this={$store} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/switch01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable('hello');\n\tconst constStore = writable('hello');\n\tswitch ($store) {\n\t\tcase 'hello':\n\t\t\tconsole.log('hello');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('other');\n\t}\n\tswitch ($constStore) {\n\t\tcase 'hello':\n\t\t\tconsole.log('hello');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('other');\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/tagged01-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable((...args) => args.join(','));\n\tconst constStore = writable((...args) => args.join(','));\n\n\tconsole.log($store`abc`);\n\tconsole.log($constStore`abc`);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/test01-input.svelte",
    "content": "<script>\n\timport { writable, readable, derived, get } from 'svelte/store';\n\tconst storeValue1 = writable('hello');\n\tconst storeValue2 = readable('hello');\n\tconst storeValue3 = derived(storeValue1, () => {});\n\tconst numValue = 42;\n\tconst strValue = 'string';\n\tlet anyValue;\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$storeValue1}</p>\n<p>{get(storeValue1)}</p>\n<p>{$storeValue2}</p>\n<p>{get(storeValue2)}</p>\n<p>{$storeValue3}</p>\n<p>{get(storeValue3)}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/ts/ts-i18n-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { _ } from 'svelte-i18n';\n</script>\n\n<h1>{$_('page.home.title')}</h1>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/ts/ts-non-store01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport {\n\t\tnumValue,\n\t\tstrValue,\n\t\tanyValue,\n\t\tnullableValue,\n\t\thasSubscribe1,\n\t\thasSubscribe2,\n\t\thasSubscribe3\n\t} from '../../ts/non-store';\n\timport { get } from 'svelte/store';\n</script>\n\n<!-- Non store -->\n<p>{numValue}</p>\n<p>{strValue}</p>\n<p>{anyValue}</p>\n<p>{nullableValue}</p>\n<p>{hasSubscribe1}</p>\n<p>{hasSubscribe2}</p>\n<p>{hasSubscribe3}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/ts/ts-non-store02-input.svelte",
    "content": "<script lang=\"ts\">\n\timport * as nonStore from '../../ts/non-store';\n\timport { get } from 'svelte/store';\n</script>\n\n<!-- Non store -->\n<p>{nonStore.numValue}</p>\n<p>{nonStore.strValue}</p>\n<p>{nonStore.anyValue}</p>\n<p>{nonStore.nullableValue}</p>\n<p>{nonStore.hasSubscribe1}</p>\n<p>{nonStore.hasSubscribe2}</p>\n<p>{nonStore.hasSubscribe3}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/ts/ts-stores01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport * as stores from '../../ts/store';\n\timport { get } from 'svelte/store';\n</script>\n\n<p>{get(stores.wStore)}</p>\n<p>{get(stores.rStore)}</p>\n<p>{get(stores.dStore)}</p>\n<p>{get(stores.unionStore)}</p>\n<p>{get(stores.storeLike)}</p>\n<p>{get(stores.stores.w)}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/ts/ts-test01-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { wStore, rStore, dStore, unionStore, storeLike, stores } from '../../ts/store';\n\timport { get } from 'svelte/store';\n</script>\n\n<!-- ✓ GOOD -->\n<p>{$wStore}</p>\n<p>{get(wStore)}</p>\n<p>{$rStore}</p>\n<p>{get(rStore)}</p>\n<p>{$dStore}</p>\n<p>{get(dStore)}</p>\n<p>{$unionStore}</p>\n<p>{get(unionStore)}</p>\n<p>{$storeLike}</p>\n<p>{get(storeLike)}</p>\n<p>{get(stores.w)}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/unknown-values01-input.svelte",
    "content": "<script>\n\tconst numValue = 42;\n\tconst strValue = 'string';\n\tlet anyValue;\n</script>\n\n<!-- Non store -->\n<p>{numValue}</p>\n<p>{strValue}</p>\n<p>{anyValue}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-store-reactive-access/valid/unknown-values02-input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet value;\n\n\texport let foo;\n\t$: {\n\t\tif (foo) {\n\t\t\tvalue = writable('hello');\n\t\t} else {\n\t\t\tvalue = null;\n\t\t}\n\t}\n</script>\n\n<!-- Unknown -->\n<p>{value}</p>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/invalid/no-init-in-js01-errors.yaml",
    "content": "- message: Always set a default value for svelte stores.\n  line: 2\n  column: 18\n  suggestions: null\n- message: Always set a default value for svelte stores.\n  line: 3\n  column: 18\n  suggestions: null\n- message: Always set a default value for svelte stores.\n  line: 4\n  column: 18\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/invalid/no-init-in-js01-input.js",
    "content": "import { writable, readable, derived } from 'svelte/store';\nexport const w = writable();\nexport const r = readable();\nexport const d = derived([a, b], () => {});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/invalid/no-init01-errors.yaml",
    "content": "- message: Always set a default value for svelte stores.\n  line: 3\n  column: 12\n  suggestions: null\n- message: Always set a default value for svelte stores.\n  line: 4\n  column: 12\n  suggestions: null\n- message: Always set a default value for svelte stores.\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/invalid/no-init01-input.svelte",
    "content": "<script>\n\timport { writable, readable, derived } from 'svelte/store';\n\tconst w = writable();\n\tconst r = readable();\n\tconst d = derived([a, b], () => {});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/valid/has-init-in-js01-input.js",
    "content": "import { writable, readable, derived } from 'svelte/store';\nexport const w = writable(false);\nexport const r = readable({});\nexport const d = derived([a, b], () => {}, false);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/valid/has-init01-input.svelte",
    "content": "<script>\n\timport { writable, readable, derived } from 'svelte/store';\n\tconst w = writable(false);\n\tconst r = readable({});\n\tconst d = derived([a, b], () => {}, false);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/valid/no-svelte-store01-input.svelte",
    "content": "<script>\n\timport { writable, readable, derived } from './unknown';\n\tconst w = writable();\n\tconst r = readable();\n\tconst d = derived([a, b], () => {});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/require-stores-init/valid/spread01-input.svelte",
    "content": "<script>\n\timport { derived } from 'svelte/store';\n\tconst args = [[a, b], () => {}, false];\n\tconst d = derived(...args);\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/always/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/always/test01-errors.yaml",
    "content": "- message: Expected shorthand attribute.\n  line: 6\n  column: 9\n  suggestions: null\n- message: Expected shorthand attribute.\n  line: 10\n  column: 9\n  suggestions: null\n- message: Expected shorthand attribute.\n  line: 13\n  column: 9\n  suggestions: null\n- message: Expected shorthand attribute.\n  line: 15\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/always/test01-input.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button disabled={disabled}>...</button>\n<button {disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button disabled  =  {disabled}>...</button>\n<button {disabled}>...</button>\n<!-- prettier-ignore -->\n<button disabled=\"{disabled}\">...</button>\n<!-- prettier-ignore -->\n<button disabled  =  \"{disabled}\">...</button>\n<!-- prettier-ignore -->\n<button disabled  =  \" {disabled} \">...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/always/test01-output.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button {disabled}>...</button>\n<button {disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button {disabled}>...</button>\n<button {disabled}>...</button>\n<!-- prettier-ignore -->\n<button {disabled}>...</button>\n<!-- prettier-ignore -->\n<button {disabled}>...</button>\n<!-- prettier-ignore -->\n<button disabled  =  \" {disabled} \">...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/never/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"never\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/never/test01-errors.yaml",
    "content": "- message: Expected regular attribute syntax.\n  line: 7\n  column: 9\n  suggestions: null\n- message: Expected regular attribute syntax.\n  line: 11\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/never/test01-input.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button disabled={disabled}>...</button>\n<button {disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button disabled  =  {disabled}>...</button>\n<button {disabled}>...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/never/test01-output.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button disabled={disabled}>...</button>\n<button disabled={disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button disabled  =  {disabled}>...</button>\n<button disabled={disabled}>...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/test01-errors.yaml",
    "content": "- message: Expected shorthand attribute.\n  line: 6\n  column: 9\n  suggestions: null\n- message: Expected shorthand attribute.\n  line: 10\n  column: 9\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/test01-input.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button disabled={disabled}>...</button>\n<button {disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button disabled  =  {disabled}>...</button>\n<button {disabled}>...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/invalid/test01-output.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button {disabled}>...</button>\n<button {disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button {disabled}>...</button>\n<button {disabled}>...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/valid/always/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/valid/always/test01-input.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<button {disabled}>...</button>\n<button disabled={disabled || false}>...</button>\n<button class=\"{disabled} a\">...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/valid/never/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"never\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/valid/never/test01-input.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<!-- prettier-ignore -->\n<button disabled={disabled}>...</button>\n\n<!-- prettier-ignore -->\n<button disabled  =  {disabled}>...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-attribute/valid/test01-input.svelte",
    "content": "<script>\n\tlet disabled = false;\n</script>\n\n<button {disabled}>...</button>\n<button disabled={disabled || false}>...</button>\n<button class=\"{disabled} a\">...</button>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/always/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/always/test01-errors.yaml",
    "content": "- message: Expected shorthand directive.\n  line: 14\n  column: 8\n  suggestions: null\n- message: Expected shorthand directive.\n  line: 16\n  column: 6\n  suggestions: null\n- message: Expected shorthand directive.\n  line: 18\n  column: 6\n  suggestions: null\n- message: Expected shorthand directive.\n  line: 21\n  column: 6\n  suggestions: null\n- message: Expected shorthand directive.\n  line: 23\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/always/test01-input.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<!-- prettier-ignore -->\n<input bind:value={value}>\n<!-- prettier-ignore -->\n<div class:active={active}>...</div>\n<!-- prettier-ignore -->\n<div style:color={color}>...</div>\n\n<!-- prettier-ignore -->\n<div class:active=\"{active}\">...</div>\n<!-- prettier-ignore -->\n<div style:color=\"{color}\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/always/test01-output.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<!-- prettier-ignore -->\n<input bind:value>\n<!-- prettier-ignore -->\n<div class:active>...</div>\n<!-- prettier-ignore -->\n<div style:color>...</div>\n\n<!-- prettier-ignore -->\n<div class:active>...</div>\n<!-- prettier-ignore -->\n<div style:color>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/never/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"never\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/never/test01-errors.yaml",
    "content": "- message: Expected regular directive syntax.\n  line: 8\n  column: 8\n  suggestions: null\n- message: Expected regular directive syntax.\n  line: 9\n  column: 6\n  suggestions: null\n- message: Expected regular directive syntax.\n  line: 10\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/never/test01-input.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<!-- prettier-ignore -->\n<input bind:value={value}>\n<!-- prettier-ignore -->\n<div class:active={active}>...</div>\n<!-- prettier-ignore -->\n<div style:color={color}>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/never/test01-output.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value={value} />\n<div class:active={active}>...</div>\n<div style:color={color}>...</div>\n\n<!-- ✗ BAD -->\n<!-- prettier-ignore -->\n<input bind:value={value}>\n<!-- prettier-ignore -->\n<div class:active={active}>...</div>\n<!-- prettier-ignore -->\n<div style:color={color}>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/test01-errors.yaml",
    "content": "- message: Expected shorthand directive.\n  line: 14\n  column: 8\n  suggestions: null\n- message: Expected shorthand directive.\n  line: 16\n  column: 6\n  suggestions: null\n- message: Expected shorthand directive.\n  line: 18\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/test01-input.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<!-- prettier-ignore -->\n<input bind:value={value}>\n<!-- prettier-ignore -->\n<div class:active={active}>...</div>\n<!-- prettier-ignore -->\n<div style:color={color}>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/invalid/test01-output.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n\n<!-- ✗ BAD -->\n<!-- prettier-ignore -->\n<input bind:value>\n<!-- prettier-ignore -->\n<div class:active>...</div>\n<!-- prettier-ignore -->\n<div style:color>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/valid/always/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"always\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/valid/always/test01-input.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/valid/never/_config.json",
    "content": "{\n\t\"options\": [{ \"prefer\": \"never\" }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/valid/never/test01-input.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n</script>\n\n<!-- ✓ GOOD -->\n<!-- prettier-ignore -->\n<input bind:value={value}>\n<!-- prettier-ignore -->\n<div class:active={active}>...</div>\n<!-- prettier-ignore -->\n<div style:color={color}>...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/shorthand-directive/valid/test01-input.svelte",
    "content": "<script>\n\tlet value = 'hello!';\n\tlet active = true;\n\tlet color = 'red';\n\tlet foo = 42;\n</script>\n\n<!-- ✓ GOOD -->\n<input bind:value />\n<div class:active>...</div>\n<div style:color>...</div>\n\n<input bind:value={foo} />\n<div class:active={foo}>...</div>\n<div style:color={foo}>...</div>\n<div style:color=\"r{foo}\">...</div>\n<div style:color=\"red\">...</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/alphabetical-test-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^c-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t},\n\t\t\t\t\"/^b-/u\",\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^a-/u\"],\n\t\t\t\t\t\"sort\": \"ignore\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/alphabetical-test-errors.yaml",
    "content": "- message: Attribute 'b-foo' should go before 'a-foo'.\n  line: 1\n  column: 12\n  suggestions: null\n- message: Attribute 'c-foo' should go before 'a-foo'.\n  line: 1\n  column: 18\n  suggestions: null\n- message: Attribute 'c-b' should go before 'c-c'.\n  line: 4\n  column: 10\n  suggestions: null\n- message: Attribute 'c-a' should go before 'c-c'.\n  line: 4\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/alphabetical-test-input.svelte",
    "content": "<div a-foo b-foo c-foo />\n<div a-b a-a a-c />\n<div b-c b-b b-a />\n<div c-c c-b c-a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/alphabetical-test-output.svelte",
    "content": "<div b-foo a-foo c-foo />\n<div a-b a-a a-c />\n<div b-c b-b b-a />\n<div c-b c-c c-a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/attach-tag-errors.yaml",
    "content": "- message: Attribute '@attach' should go before 'foo'.\n  line: 14\n  column: 10\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/attach-tag-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\n\n\tconst myAttachment: Attachment = (element) => {\n\t\tconsole.log(element.nodeName); // 'DIV'\n\n\t\treturn () => {\n\t\t\tconsole.log('cleaning up');\n\t\t};\n\t};\n</script>\n\n<div foo {@attach myAttachment}>...</div>"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/attach-tag-output.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\n\n\tconst myAttachment: Attachment = (element) => {\n\t\tconsole.log(element.nodeName); // 'DIV'\n\n\t\treturn () => {\n\t\t\tconsole.log('cleaning up');\n\t\t};\n\t};\n</script>\n\n<div {@attach myAttachment} foo>...</div>"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/attach-tag-requirements.json",
    "content": "{\n\t\"svelte\": \"^5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/class-test-errors.yaml",
    "content": "- message: Attribute 'class:a' should go before 'class:b'.\n  line: 6\n  column: 26\n  suggestions: null\n- message: Attribute 'class' should go before 'class:a'.\n  line: 7\n  column: 14\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/class-test-input.svelte",
    "content": "<script>\n\tlet a, b;\n</script>\n\n<div class=\"foo\" class:a class:b />\n<div class=\"foo\" class:b class:a />\n<div class:a class=\"foo\" class:b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/class-test-output.svelte",
    "content": "<script>\n\tlet a, b;\n</script>\n\n<div class=\"foo\" class:a class:b />\n<div class=\"foo\" class:a class:b />\n<div class=\"foo\" class:a class:b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01-errors.yaml",
    "content": "- message: Attribute 'this' should go before 'bind:value'.\n  line: 19\n  column: 3\n  suggestions: null\n- message: Attribute 'def' should go before 'bind:value'.\n  line: 21\n  column: 3\n  suggestions: null\n- message: Attribute 'data-foo' should go before 'bind:value'.\n  line: 22\n  column: 3\n  suggestions: null\n- message: Attribute 'abc' should go before 'bind:value'.\n  line: 23\n  column: 3\n  suggestions: null\n- message: Attribute '--style-props' should go before 'bind:value'.\n  line: 25\n  column: 3\n  suggestions: null\n- message: Attribute 'bind:this' should go before 'id'.\n  line: 29\n  column: 2\n  suggestions: null\n- message: Attribute 'class:disable' should go before 'class:enable'.\n  line: 34\n  column: 2\n  suggestions: null\n- message: Attribute 'use:action' should go before 'animate:name'.\n  line: 36\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'animate:name'.\n  line: 37\n  column: 2\n  suggestions: null\n- message: Attribute 'bind:value' should go before 'animate:name'.\n  line: 38\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'animate:name'.\n  line: 39\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'animate:name'.\n  line: 40\n  column: 2\n  suggestions: null\n- message: Attribute 'abc' should go before 'def'.\n  line: 42\n  column: 28\n  suggestions: null\n- message: Attribute 'data-foo' should go before 'def'.\n  line: 42\n  column: 34\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01-input.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<!-- prettier-ignore -->\n<svelte:component\n  bind:value={componentValue}\n  this={component}\n  on:changeValue={handleChange}\n  {def}\n  data-foo\n  {abc}\n  bind:metaData\n  --style-props={color}\n/>\n<input\n\tid=\"foo\"\n\tbind:this={foo}\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:enable={!disable}\n\tclass:disable\n\tanimate:name\n\tuse:action\n\ttransition:fn\n\tbind:value={inputValue}\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {def} {abc} data-foo />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01-output.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<!-- prettier-ignore -->\n<svelte:component\n  this={component}\n  bind:value={componentValue}\n  on:changeValue={handleChange}\n  {def}\n  data-foo\n  {abc}\n  bind:metaData\n  --style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tuse:action\n\tanimate:name\n\ttransition:fn\n\tbind:value={inputValue}\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {abc} {def} data-foo />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix1-errors.yaml",
    "content": "- message: Attribute 'def' should go before 'bind:value'.\n  line: 20\n  column: 2\n  suggestions: null\n- message: Attribute 'data-foo' should go before 'bind:value'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'abc' should go before 'bind:value'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute '--style-props' should go before 'bind:value'.\n  line: 24\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'animate:name'.\n  line: 36\n  column: 2\n  suggestions: null\n- message: Attribute 'bind:value' should go before 'use:action'.\n  line: 37\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'animate:name'.\n  line: 38\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'animate:name'.\n  line: 39\n  column: 2\n  suggestions: null\n- message: Attribute 'data-foo' should go before 'def'.\n  line: 41\n  column: 34\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix1-input.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\t{def}\n\tdata-foo\n\t{abc}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tuse:action\n\tanimate:name\n\ttransition:fn\n\tbind:value={inputValue}\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {abc} {def} data-foo />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix1-output.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\tdata-foo\n\t{abc}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\tanimate:name\n\ttransition:fn\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix2-errors.yaml",
    "content": "- message: Attribute 'data-foo' should go before 'def'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'abc' should go before 'def'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute '--style-props' should go before 'def'.\n  line: 24\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'animate:name'.\n  line: 37\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'animate:name'.\n  line: 38\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'animate:name'.\n  line: 39\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix2-input.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\tdata-foo\n\t{abc}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\tanimate:name\n\ttransition:fn\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix2-output.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\tdata-foo\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\t{abc}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\ttransition:fn\n\tanimate:name\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix3-errors.yaml",
    "content": "- message: Attribute 'abc' should go before 'data-foo'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute '--style-props' should go before 'data-foo'.\n  line: 24\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'animate:name'.\n  line: 38\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'animate:name'.\n  line: 39\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix3-input.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\tdata-foo\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\t{abc}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\ttransition:fn\n\tanimate:name\n\tin:fn\n\tout:fn\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix3-output.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\t{abc}\n\tdata-foo\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\ttransition:fn\n\tin:fn\n\tanimate:name\n\tout:fn\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix4-errors.yaml",
    "content": "- message: Attribute '--style-props' should go before 'abc'.\n  line: 24\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'animate:name'.\n  line: 39\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix4-input.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\t{abc}\n\tdata-foo\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\tbind:metaData\n\t--style-props={color}\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\ttransition:fn\n\tin:fn\n\tanimate:name\n\tout:fn\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/default-test01fix4-output.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\t--style-props={color}\n\t{abc}\n\tdata-foo\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\tbind:metaData\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle:color\n\tstyle=\"width: 150px;\"\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\ttransition:fn\n\tin:fn\n\tout:fn\n\tanimate:name\n/>\n<slot name=\"content\" {abc} data-foo {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/in-out-test-errors.yaml",
    "content": "- message: Attribute 'in:b' should go before 'out:a'.\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/in-out-test-input.svelte",
    "content": "<script>\n\tfunction a() {}\n\tfunction b() {}\n</script>\n\n<div out:a in:b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/in-out-test-output.svelte",
    "content": "<script>\n\tfunction a() {}\n\tfunction b() {}\n</script>\n\n<div in:b out:a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/let-test-errors.yaml",
    "content": "- message: Attribute 'items' should go before 'let:a'.\n  line: 6\n  column: 26\n  suggestions: null\n- message: Attribute 'items' should go before 'let:a'.\n  line: 10\n  column: 41\n  suggestions: null\n- message: Attribute 'let:a' should go before 'let:b'.\n  line: 14\n  column: 35\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/let-test-input.svelte",
    "content": "<script>\n\timport FancyList from './FancyListFancyList.svelte';\n\tlet items = [1, 2, 3];\n</script>\n\n<FancyList let:a={thing} {items} let:b={thing2}>\n\t<div>{thing.text}</div>\n</FancyList>\n\n<FancyList let:a={thing} let:b={thing2} {items}>\n\t<div>{thing.text}</div>\n</FancyList>\n\n<FancyList {items} let:b={thing2} let:a={thing}>\n\t<div>{thing.text}</div>\n</FancyList>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/let-test-output.svelte",
    "content": "<script>\n\timport FancyList from './FancyListFancyList.svelte';\n\tlet items = [1, 2, 3];\n</script>\n\n<FancyList {items} let:a={thing} let:b={thing2}>\n\t<div>{thing.text}</div>\n</FancyList>\n\n<FancyList {items} let:a={thing} let:b={thing2}>\n\t<div>{thing.text}</div>\n</FancyList>\n\n<FancyList {items} let:a={thing} let:b={thing2}>\n\t<div>{thing.text}</div>\n</FancyList>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/slot-test-errors.yaml",
    "content": "- message: Attribute 'slot' should go before 'let:item'.\n  line: 7\n  column: 29\n  suggestions: null\n- message: Attribute 'slot' should go before 'class'.\n  line: 8\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/slot-test-input.svelte",
    "content": "<script>\n\timport FancyList from './FancyList.svelte';\n\tconst items = [1, 2, 3];\n</script>\n\n<FancyList {items}>\n\t<div id={item.id} let:item slot=\"item\">{item.text}</div>\n\t<p class=\"footer\" slot=\"footer\">Footer</p>\n</FancyList>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/slot-test-output.svelte",
    "content": "<script>\n\timport FancyList from './FancyList.svelte';\n\tconst items = [1, 2, 3];\n</script>\n\n<FancyList {items}>\n\t<div id={item.id} slot=\"item\" let:item>{item.text}</div>\n\t<p slot=\"footer\" class=\"footer\">Footer</p>\n</FancyList>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test01-errors.yaml",
    "content": "- message: Attribute 'c' should go before 'd'.\n  line: 5\n  column: 8\n  suggestions: null\n- message: Attribute 'a' should go before 'b'.\n  line: 5\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test01-input.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div d c {...attrs} b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test01-output.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div c d {...attrs} a b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test02-errors.yaml",
    "content": "- message: Attribute 'id' should go before 'a'.\n  line: 5\n  column: 23\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test02-input.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div b c {...attrs} a id />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test02-output.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div b c {...attrs} id a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test03-errors.yaml",
    "content": "- message: Attribute 'e' should go before 'f'.\n  line: 5\n  column: 8\n  suggestions: null\n- message: Attribute 'c' should go before 'd'.\n  line: 5\n  column: 23\n  suggestions: null\n- message: Attribute 'a' should go before 'b'.\n  line: 5\n  column: 39\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test03-input.svelte",
    "content": "<script>\n\tlet attrs, attrs2;\n</script>\n\n<div f e {...attrs} d c {...attrs2} b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/spread-test03-output.svelte",
    "content": "<script>\n\tlet attrs, attrs2;\n</script>\n\n<div e f {...attrs} c d {...attrs2} a b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/style-ptops-test-errors.yaml",
    "content": "- message: Attribute '--a' should go before '--b'.\n  line: 6\n  column: 26\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/style-ptops-test-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet color = 'red';\n</script>\n\n<MyComponent --b={color} --a={color} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/style-ptops-test-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet color = 'red';\n</script>\n\n<MyComponent --a={color} --b={color} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/use-test-errors.yaml",
    "content": "- message: Attribute 'use:a' should go before 'use:b'.\n  line: 6\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/use-test-input.svelte",
    "content": "<script>\n\tfunction a() {}\n\tfunction b() {}\n</script>\n\n<div use:b use:a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/default/use-test-output.svelte",
    "content": "<script>\n\tfunction a() {}\n\tfunction b() {}\n</script>\n\n<div use:a use:b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-test-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^order-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-test-errors.yaml",
    "content": "- message: Attribute 'order-a' should go before 'order-b'.\n  line: 1\n  column: 22\n  suggestions: null\n- message: Attribute 'order-a' should go before 'order-b'.\n  line: 4\n  column: 24\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-test-input.svelte",
    "content": "<div order-b order-c order-a />\n<div a b c />\n<div c b a />\n<div h g f e order-b d order-a c order-c b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-test-output.svelte",
    "content": "<div order-a order-b order-c />\n<div a b c />\n<div c b a />\n<div h g f e order-a order-b d c order-c b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-with-spread-test-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^order-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-with-spread-test-errors.yaml",
    "content": "- message: Attribute 'order-a' should go before 'order-c'.\n  line: 5\n  column: 33\n  suggestions: null\n- message: Attribute 'order-a' should go before 'order-c'.\n  line: 8\n  column: 47\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-with-spread-test-input.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div order-b {...attrs} order-c order-a />\n<div a b {...attrs} c />\n<div c {...attrs} b a />\n<div h g f e order-b d {...attrs} c order-c b order-a a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/ignore-no-order-with-spread-test-output.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div order-b {...attrs} order-a order-c />\n<div a b {...attrs} c />\n<div c {...attrs} b a />\n<div h g f e order-b d {...attrs} c order-a order-c b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t\"id\",\n\t\t\t\t\"class\",\n\t\t\t\t\"/^class:/u\",\n\t\t\t\t\"value\",\n\t\t\t\t\"src\",\n\t\t\t\t\"/^data-/u\",\n\t\t\t\t\"style\",\n\t\t\t\t\"/^style:/u\",\n\t\t\t\t\"/^on:/u\",\n\t\t\t\t\"/^use:/u\",\n\t\t\t\t\"/^animate:/u\",\n\t\t\t\t\"/^transition:/u\",\n\t\t\t\t\"/^in:/u\",\n\t\t\t\t\"/^out:/u\",\n\t\t\t\t\"bind:this\",\n\t\t\t\t[\"/^bind:/u\", \"!bind:this\"],\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"!/:/u\", \"!/^(?:id|class|value|src|style)$/u\", \"!/^data-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01-errors.yaml",
    "content": "- message: Attribute 'bind:this' should go before 'bind:data'.\n  line: 11\n  column: 24\n  suggestions: null\n- message: Attribute 'data-foo' should go before 'bind:data'.\n  line: 11\n  column: 53\n  suggestions: null\n- message: Attribute 'class' should go before 'class:bar'.\n  line: 14\n  column: 2\n  suggestions: null\n- message: Attribute 'id' should go before 'class:bar'.\n  line: 15\n  column: 2\n  suggestions: null\n- message: Attribute 'value' should go before 'bind:this'.\n  line: 17\n  column: 2\n  suggestions: null\n- message: Attribute 'style:color' should go before 'bind:this'.\n  line: 18\n  column: 2\n  suggestions: null\n- message: Attribute 'style' should go before 'bind:this'.\n  line: 19\n  column: 2\n  suggestions: null\n- message: Attribute 'data-value' should go before 'bind:this'.\n  line: 20\n  column: 2\n  suggestions: null\n- message: Attribute 'animate:name' should go before 'bind:this'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'bind:this'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n- message: Attribute 'src' should go before 'alt'.\n  line: 26\n  column: 16\n  suggestions: null\n- message: Attribute 'id' should go before 'alt'.\n  line: 26\n  column: 22\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent bind:data bind:this={comp} {abc} {def} data-foo />\n<input\n\tclass:bar\n\tclass=\"my-block\"\n\tid=\"foo\"\n\tbind:this={foo}\n\tvalue=\"abc\"\n\tstyle:color\n\tstyle=\"width: 30px;\"\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img alt=\"bar\" {src} id=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent bind:this={comp} bind:data {abc} {def} data-foo />\n<input\n\tclass=\"my-block\"\n\tclass:bar\n\tid=\"foo\"\n\tvalue=\"abc\"\n\tbind:this={foo}\n\tstyle:color\n\tstyle=\"width: 30px;\"\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img {src} alt=\"bar\" id=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix1-errors.yaml",
    "content": "- message: Attribute 'data-foo' should go before 'bind:this'.\n  line: 11\n  column: 53\n  suggestions: null\n- message: Attribute 'id' should go before 'class'.\n  line: 15\n  column: 2\n  suggestions: null\n- message: Attribute 'style:color' should go before 'bind:this'.\n  line: 18\n  column: 2\n  suggestions: null\n- message: Attribute 'style' should go before 'bind:this'.\n  line: 19\n  column: 2\n  suggestions: null\n- message: Attribute 'data-value' should go before 'bind:this'.\n  line: 20\n  column: 2\n  suggestions: null\n- message: Attribute 'animate:name' should go before 'bind:this'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'bind:this'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n- message: Attribute 'id' should go before 'src'.\n  line: 26\n  column: 22\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix1-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent bind:this={comp} bind:data {abc} {def} data-foo />\n<input\n\tclass=\"my-block\"\n\tclass:bar\n\tid=\"foo\"\n\tvalue=\"abc\"\n\tbind:this={foo}\n\tstyle:color\n\tstyle=\"width: 30px;\"\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img {src} alt=\"bar\" id=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix1-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tstyle:color\n\tbind:this={foo}\n\tstyle=\"width: 30px;\"\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix2-errors.yaml",
    "content": "- message: Attribute 'style' should go before 'style:color'.\n  line: 19\n  column: 2\n  suggestions: null\n- message: Attribute 'data-value' should go before 'style:color'.\n  line: 20\n  column: 2\n  suggestions: null\n- message: Attribute 'animate:name' should go before 'bind:this'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'bind:this'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix2-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tstyle:color\n\tbind:this={foo}\n\tstyle=\"width: 30px;\"\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix2-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tbind:this={foo}\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix3-errors.yaml",
    "content": "- message: Attribute 'data-value' should go before 'style'.\n  line: 20\n  column: 2\n  suggestions: null\n- message: Attribute 'animate:name' should go before 'bind:this'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'bind:this'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix3-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tbind:this={foo}\n\tdata-value=\"x\"\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix3-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tbind:this={foo}\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix4-errors.yaml",
    "content": "- message: Attribute 'animate:name' should go before 'bind:this'.\n  line: 21\n  column: 2\n  suggestions: null\n- message: Attribute 'in:fn' should go before 'bind:this'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix4-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tbind:this={foo}\n\tanimate:name\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix4-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\tbind:this={foo}\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix5-errors.yaml",
    "content": "- message: Attribute 'in:fn' should go before 'bind:this'.\n  line: 22\n  column: 2\n  suggestions: null\n- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix5-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\tbind:this={foo}\n\tin:fn\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix5-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\tin:fn\n\tbind:this={foo}\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix6-errors.yaml",
    "content": "- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 23\n  column: 2\n  suggestions: null\n- message: Attribute 'transition:fn' should go before 'in:fn'.\n  line: 24\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix6-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\tin:fn\n\tbind:this={foo}\n\tout:fn\n\ttransition:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix6-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\ttransition:fn\n\tin:fn\n\tbind:this={foo}\n\tout:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix7-errors.yaml",
    "content": "- message: Attribute 'out:fn' should go before 'bind:this'.\n  line: 24\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix7-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\ttransition:fn\n\tin:fn\n\tbind:this={foo}\n\tout:fn\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/invalid/order/test01fix7-output.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\ttransition:fn\n\tin:fn\n\tout:fn\n\tbind:this={foo}\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/alphabetical-test-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^c-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t},\n\t\t\t\t\"/^b-/u\",\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^a-/u\"],\n\t\t\t\t\t\"sort\": \"ignore\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/alphabetical-test-input.svelte",
    "content": "<div c-foo b-foo a-foo />\n<div a-b a-a a-c />\n<div b-c b-b b-a />\n<div c-a c-b c-c />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/attach-tag-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\n\n\tconst myAttachment: Attachment = (element) => {\n\t\tconsole.log(element.nodeName); // 'DIV'\n\n\t\treturn () => {\n\t\t\tconsole.log('cleaning up');\n\t\t};\n\t};\n</script>\n\n<div {@attach myAttachment}>...</div>"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/attach-tag-requirements.json",
    "content": "{\n\t\"svelte\": \"^5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/bind-on-test01-input.svelte",
    "content": "<script>\n\t/* eslint no-console: 0 -- test */\n\tlet value = 'Hello World';\n</script>\n\n<input\n\ton:input={() => console.log('Old value:', value)}\n\tbind:value\n\ton:input={() => console.log('New value:', value)}\n/>\n<input on:input={() => console.log('Old value:', value)} bind:value />\n<input bind:value on:input={() => console.log('New value:', value)} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/class-test-input.svelte",
    "content": "<script>\n\tlet a, b;\n</script>\n\n<div class=\"foo\" class:a class:b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/default-test01-input.svelte",
    "content": "<script>\n\timport component from './foo';\n\tlet style = { color: 'red' };\n\tlet componentValue;\n\tlet metaData = {};\n\tlet foo;\n\tlet color = 'red';\n\tlet disable = false;\n\tlet inputValue;\n\tlet abc, def;\n\tfunction fn() {}\n\tfunction handleChange() {}\n\tfunction action() {}\n</script>\n\n<svelte:component\n\tthis={component}\n\t--style-props={color}\n\t{abc}\n\tdata-foo\n\t{def}\n\tbind:value={componentValue}\n\ton:changeValue={handleChange}\n\tbind:metaData\n/>\n<input\n\tbind:this={foo}\n\tid=\"foo\"\n\tstyle=\"width: 150px;\"\n\tstyle:color\n\tclass=\"my-input\"\n\tclass:disable\n\tclass:enable={!disable}\n\tbind:value={inputValue}\n\tuse:action\n\ttransition:fn\n\tin:fn\n\tout:fn\n\tanimate:name\n/>\n<slot name=\"content\" {abc} {def} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/ignore-spread-test-input.svelte",
    "content": "<script>\n\tlet a, b, attrs;\n</script>\n\n<div id=\"foo\" {...attrs} class=\"foo\" />\n<div {...attrs} id=\"foo\" class=\"foo\" />\n<div id=\"foo\" class=\"foo\" {...attrs} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/in-out-test-input.svelte",
    "content": "<script>\n\tfunction a() {}\n\tfunction b() {}\n</script>\n\n<div in:b out:a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/let-test-input.svelte",
    "content": "<script>\n\timport FancyList from './FancyListFancyList.svelte';\n\tlet items = [1, 2, 3];\n</script>\n\n<FancyList {items} let:a={thing} let:b={thing2}>\n\t<div>{thing.text}</div>\n</FancyList>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/slot-test-input.svelte",
    "content": "<script>\n\timport FancyList from './FancyList.svelte';\n\tconst items = [1, 2, 3];\n</script>\n\n<FancyList {items}>\n\t<div id={item.id} slot=\"item\" let:item>{item.text}</div>\n\t<p slot=\"footer\" class=\"footer\">Footer</p>\n</FancyList>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/spread-test01-input.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div b c d {...attrs} a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/spread-test02-input.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div b c {...attrs} id a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/style-ptops-test-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet color = 'red';\n</script>\n\n<MyComponent --a={color} --b={color} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/style-test-input.svelte",
    "content": "<div style=\"color: red;\" style:width=\"32p\" style:height=\"32p\" />\n<div style=\"color: red;\" style:height=\"32p\" style:width=\"32p\" />\n<div style:height=\"32p\" style=\"color: red;\" style:width=\"32p\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/default/use-test-input.svelte",
    "content": "<script>\n\tfunction a() {}\n\tfunction b() {}\n</script>\n\n<div use:a use:b />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/ignore-no-order-test-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^order-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/ignore-no-order-test-input.svelte",
    "content": "<div order-a order-b order-c />\n<div a b c />\n<div c b a />\n<div h g order-a f e order-b d c order-c b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/ignore-no-order-with-spread-test-config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"/^order-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/ignore-no-order-with-spread-test-input.svelte",
    "content": "<script>\n\tlet attrs;\n</script>\n\n<div order-b {...attrs} order-a order-c />\n<div a b {...attrs} c />\n<div c {...attrs} b a />\n<div h g f e order-b d {...attrs} c order-a order-c b a />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/order/_config.json",
    "content": "{\n\t\"options\": [\n\t\t{\n\t\t\t\"order\": [\n\t\t\t\t\"id\",\n\t\t\t\t\"class\",\n\t\t\t\t\"/^class:/u\",\n\t\t\t\t\"value\",\n\t\t\t\t\"src\",\n\t\t\t\t\"/^data-/u\",\n\t\t\t\t\"style\",\n\t\t\t\t\"/^style:/u\",\n\t\t\t\t\"/^on:/u\",\n\t\t\t\t\"/^use:/u\",\n\t\t\t\t\"/^animate:/u\",\n\t\t\t\t\"/^transition:/u\",\n\t\t\t\t\"/^in:/u\",\n\t\t\t\t\"/^out:/u\",\n\t\t\t\t\"bind:this\",\n\t\t\t\t[\"/^bind:/u\", \"!bind:this\"],\n\t\t\t\t{\n\t\t\t\t\t\"match\": [\"!/:/u\", \"!/^(?:id|class|value|src|style)$/u\", \"!/^data-/u\"],\n\t\t\t\t\t\"sort\": \"alphabetical\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sort-attributes/valid/order/test01-input.svelte",
    "content": "<script>\n\timport MyComponent from './MyComponent.svelte';\n\tlet data, comp, abc, def;\n\tlet foo, bar;\n\tlet src;\n\tconst color = 'red';\n\tfunction name() {}\n\tfunction fn() {}\n</script>\n\n<MyComponent data-foo bind:this={comp} bind:data {abc} {def} />\n<input\n\tid=\"foo\"\n\tclass=\"my-block\"\n\tclass:bar\n\tvalue=\"abc\"\n\tdata-value=\"x\"\n\tstyle=\"width: 30px;\"\n\tstyle:color\n\tanimate:name\n\ttransition:fn\n\tin:fn\n\tout:fn\n\tbind:this={foo}\n/>\n<img id=\"bar\" {src} alt=\"bar\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/always/_config.json",
    "content": "{\n\t\"options\": [\"always\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/always/always-invalid-errors.yaml",
    "content": "- message: Expected space or tab after '<!--' in comment.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Expected space or tab before '-->' in comment.\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/always/always-invalid-input.svelte",
    "content": "<!--comment-->\n<!-- comment -->\n<!--\n    comment\n    -->\n<!-- \n    comment \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/always/always-invalid-output.svelte",
    "content": "<!-- comment -->\n<!-- comment -->\n<!--\n    comment\n    -->\n<!-- \n    comment \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/default/default-invalid-errors.yaml",
    "content": "- message: Expected space or tab after '<!--' in comment.\n  line: 1\n  column: 1\n  suggestions: null\n- message: Expected space or tab before '-->' in comment.\n  line: 1\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/default/default-invalid-input.svelte",
    "content": "<!--comment-->\n<!-- comment -->\n<!--\n    comment\n    -->\n<!-- \n    comment \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/default/default-invalid-output.svelte",
    "content": "<!-- comment -->\n<!-- comment -->\n<!--\n    comment\n    -->\n<!-- \n    comment \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/never/_config.json",
    "content": "{\n\t\"options\": [\"never\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/never/never-invalid-errors.yaml",
    "content": "- message: Unexpected space or tab after '<!--' in comment.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unexpected space or tab before '-->' in comment.\n  line: 2\n  column: 1\n  suggestions: null\n- message: Unexpected space or tab after '<!--' in comment.\n  line: 6\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/never/never-invalid-input.svelte",
    "content": "<!--comment-->\n<!-- comment -->\n<!--\n    comment\n    -->\n<!-- \n    comment \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/invalid/never/never-invalid-output.svelte",
    "content": "<!--comment-->\n<!--comment-->\n<!--\n    comment\n    -->\n<!--\n    comment \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/valid/always/_config.json",
    "content": "{\n\t\"options\": [\"always\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/valid/always/test01-input.svelte",
    "content": "<!-- comment -->\n<!--   comment   -->\n<!--\n    comment\n    -->\n<!--   \n    comment   \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/valid/default/test01-input.svelte",
    "content": "<!-- comment -->\n<!--   comment   -->\n<!--\n    comment\n    -->\n<!--   \n    comment   \n    -->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/valid/never/_config.json",
    "content": "{\n\t\"options\": [\"never\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/spaced-html-comment/valid/never/test01-input.svelte",
    "content": "<!--comment-->\n<!--\n    comment\n    -->\n<!--\ncomment\n-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/sveltekit-types.d.ts",
    "content": "// Type stubs for SvelteKit's $app modules\n\ndeclare module '$app/types' {\n\texport type Pathname = \"/\" | \"/test\" | \"/test/123\" | \"/test/123/456\";\n\texport type ResolvedPathname = `${\"\" | `/${string}`}${Pathname}`;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"jsx\": \"preserve\",\n\t\t\"target\": \"es5\",\n\t\t\"strict\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"lib\": [\"es2015\", \"es2017\", \"esnext\"],\n\t\t\"experimentalDecorators\": true\n\t},\n\t\"include\": [\"**/*.svelte\", \"**/*.ts\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/a11y01-errors.yaml",
    "content": "- message: |-\n    `<img>` element should have an alt attribute\n    https://svelte.dev/e/a11y_missing_attribute(a11y_missing_attribute)\n  line: 5\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/a11y01-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/a11y01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/a11y01-svelte4-errors.yaml",
    "content": "- message: 'A11y: <img> element should have an alt attribute(a11y-missing-attribute)'\n  line: 5\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/a11y01-svelte4-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/a11y01-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/custom_element_props_identifier-errors.yaml",
    "content": "- message: |-\n    Using a rest element or a non-destructured declaration with `$props()` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the `customElement.props` option.\n    https://svelte.dev/e/custom_element_props_identifier(custom_element_props_identifier)\n  line: 4\n  column: 6\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/custom_element_props_identifier-input.svelte",
    "content": "<svelte:options customElement=\"my-component\" />\n\n<script>\n\tlet props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/custom_element_props_identifier-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.33.4\"\n}"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/dyamic-slot01-errors.yaml",
    "content": "- message: <slot> name cannot be dynamic(dynamic-slot-name)\n  line: 5\n  column: 7\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/dyamic-slot01-input.svelte",
    "content": "<script>\n\texport const SLOT_NAME = 'name';\n</script>\n\n<slot name={SLOT_NAME} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/dyamic-slot01-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/experimental-async-disabled/top-level-await-errors.yaml",
    "content": "- message: |-\n    Cannot use `await` in deriveds and template expressions, or at the top level of a component, unless the `experimental.async` compiler option is `true`\n    https://svelte.dev/e/experimental_async(experimental_async)\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/experimental-async-disabled/top-level-await-input.svelte",
    "content": "<script>\n\tawait new Promise(() => {});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/experimental-async-disabled/top-level-await-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore01-errors.yaml",
    "content": "- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 6\n  column: 3\n  suggestions: null\n- message: |-\n    A form label must be associated with a control\n    https://svelte.dev/e/a11y_label_has_associated_control(a11y_label_has_associated_control)\n  line: 6\n  column: 3\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore01-input.svelte",
    "content": "<div>\n\t{#if true}\n\t\tA\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore01-svelte4-errors.yaml",
    "content": "- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 6\n  column: 3\n  suggestions: null\n- message: 'A11y: A form label must be associated with a\n    control.(a11y-label-has-associated-control)'\n  line: 6\n  column: 3\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore01-svelte4-input.svelte",
    "content": "<div>\n\t{#if true}\n\t\tA\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore01-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore02-errors.yaml",
    "content": "- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 6\n  column: 3\n  suggestions: null\n- message: |-\n    A form label must be associated with a control\n    https://svelte.dev/e/a11y_label_has_associated_control(a11y_label_has_associated_control)\n  line: 6\n  column: 3\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore02-input.svelte",
    "content": "<div>\n\t{#each [] as e}\n\t\tA\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore02-svelte4-errors.yaml",
    "content": "- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 6\n  column: 3\n  suggestions: null\n- message: 'A11y: A form label must be associated with a\n    control.(a11y-label-has-associated-control)'\n  line: 6\n  column: 3\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 7\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore02-svelte4-input.svelte",
    "content": "<div>\n\t{#each [] as e}\n\t\tA\n\t\t<!-- svelte_ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:else}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore02-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-errors.yaml",
    "content": "- message: |-\n    Empty block\n    https://svelte.dev/e/block_empty(block_empty)\n  line: 2\n  column: 30\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 5\n  column: 3\n  suggestions: null\n- message: |-\n    A form label must be associated with a control\n    https://svelte.dev/e/a11y_label_has_associated_control(a11y_label_has_associated_control)\n  line: 5\n  column: 3\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 6\n  column: 3\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 9\n  column: 3\n  suggestions: null\n- message: |-\n    A form label must be associated with a control\n    https://svelte.dev/e/a11y_label_has_associated_control(a11y_label_has_associated_control)\n  line: 9\n  column: 3\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 10\n  column: 3\n  suggestions: null\n- message: |-\n    Empty block\n    https://svelte.dev/e/block_empty(block_empty)\n  line: 14\n  column: 30\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 17\n  column: 3\n  suggestions: null\n- message: |-\n    A form label must be associated with a control\n    https://svelte.dev/e/a11y_label_has_associated_control(a11y_label_has_associated_control)\n  line: 17\n  column: 3\n  suggestions: null\n- message: |-\n    noninteractive element cannot have nonnegative tabIndex value\n    https://svelte.dev/e/a11y_no_noninteractive_tabindex(a11y_no_noninteractive_tabindex)\n  line: 18\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-input.svelte",
    "content": "<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-svelte4-errors.yaml",
    "content": "- message: Empty block(empty-block)\n  line: 2\n  column: 30\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 5\n  column: 3\n  suggestions: null\n- message: 'A11y: A form label must be associated with a\n    control.(a11y-label-has-associated-control)'\n  line: 5\n  column: 3\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 6\n  column: 3\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 9\n  column: 3\n  suggestions: null\n- message: 'A11y: A form label must be associated with a\n    control.(a11y-label-has-associated-control)'\n  line: 9\n  column: 3\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 10\n  column: 3\n  suggestions: null\n- message: Empty block(empty-block)\n  line: 14\n  column: 30\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 17\n  column: 3\n  suggestions: null\n- message: 'A11y: A form label must be associated with a\n    control.(a11y-label-has-associated-control)'\n  line: 17\n  column: 3\n  suggestions: null\n- message: 'A11y: noninteractive element cannot have nonnegative tabIndex\n    value(a11y-no-noninteractive-tabindex)'\n  line: 18\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-svelte4-input.svelte",
    "content": "<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t{#await Promise.resolve(42)}\n\t\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n\n<!--tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-svelte4-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/invalid-svelte-ignore03-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-lang01-errors.yaml",
    "content": "- message: Unused CSS selector \".foo .foo\"(css-unused-selector)\n  line: 9\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-lang01-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\"></div>\n</div>\n\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .foo {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-lang01-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-without-global-01-errors.yaml",
    "content": "- message: Unused CSS selector \"input\"(css-unused-selector)\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-without-global-01-input.svelte",
    "content": "<style>\n\tinput {\n\t\t@apply bg-surface-50-900-token h-full overflow-hidden;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-without-global-01-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-without-global-02-errors.yaml",
    "content": "- message: |-\n    Unused CSS selector \"input\"\n    https://svelte.dev/e/css_unused_selector(css_unused_selector)\n  line: 2\n  column: 2\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-without-global-02-input.svelte",
    "content": "<style>\n\tinput {\n\t\t@apply bg-surface-50-900-token h-full overflow-hidden;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/style-without-global-02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/_config.cjs",
    "content": "/**\n * @typedef {import(\"svelte/compiler\").Warning} Warning\n */\nmodule.exports = {\n\tlanguageOptions: {\n\t\tparserOptions: {\n\t\t\tsvelteConfig: {\n\t\t\t\t/**\n\t\t\t\t * @param {Warning} warning\n\t\t\t\t * @param {(warning: Warning) => void} handler\n\t\t\t\t * @returns {void}\n\t\t\t\t */\n\t\t\t\tonwarn(warning, handler) {\n\t\t\t\t\t// transform code\n\t\t\t\t\thandler({ ...warning, message: warning.message, code: 'foo' });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-errors.yaml",
    "content": "- message: |-\n    `<img>` element should have an alt attribute\n    https://svelte.dev/e/a11y_missing_attribute(foo)\n  line: 5\n  column: 1\n  suggestions: null\n- message: |-\n    Avoid using autofocus\n    https://svelte.dev/e/a11y_autofocus(foo)\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} autofocus />\n\n<!--packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-input.svelte-->\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-svelte4-errors.yaml",
    "content": "- message: 'A11y: <img> element should have an alt attribute(foo)'\n  line: 5\n  column: 1\n  suggestions: null\n- message: 'A11y: Avoid using autofocus(foo)'\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-svelte4-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/a11y-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/_config.cjs",
    "content": "/**\n * @typedef {import(\"svelte/compiler\").Warning} Warning\n */\nmodule.exports = {\n\tlanguageOptions: {\n\t\tparserOptions: {\n\t\t\tsvelteConfig: {\n\t\t\t\t/**\n\t\t\t\t * @param {Warning} warning\n\t\t\t\t * @param {(warning: Warning) => void} handler\n\t\t\t\t * @returns {void}\n\t\t\t\t */\n\t\t\t\tonwarn(warning, handler) {\n\t\t\t\t\tif (\n\t\t\t\t\t\twarning.code === 'a11y_missing_attribute' ||\n\t\t\t\t\t\twarning.code === 'a11y-missing-attribute'\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandler(warning);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-errors.yaml",
    "content": "- message: |-\n    Avoid using autofocus\n    https://svelte.dev/e/a11y_autofocus(a11y_autofocus)\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-errors.yaml",
    "content": "- message: 'A11y: Avoid using autofocus(a11y-autofocus)'\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/_config.cjs",
    "content": "/**\n * @typedef {import(\"svelte/compiler\").Warning} Warning\n */\nmodule.exports = {\n\tlanguageOptions: {\n\t\tparserOptions: {\n\t\t\tsvelteConfig: {\n\t\t\t\twarningFilter: (warning) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\twarning.code !== 'a11y_missing_attribute' && warning.code !== 'a11y-missing-attribute'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-errors.yaml",
    "content": "- message: |-\n    Avoid using autofocus\n    https://svelte.dev/e/a11y_autofocus(a11y_autofocus)\n  line: 5\n  column: 12\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/ts/enum01-errors.yaml",
    "content": "- message: |-\n    The $ prefix is reserved, and cannot be used for variables and imports\n    https://svelte.dev/e/dollar_prefix_invalid(dollar_prefix_invalid)\n  line: 2\n  column: 8\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/ts/enum01-input.svelte",
    "content": "<script lang=\"ts\">\n  enum $E {\n    a = \"tutorial/image.gif\",\n    b = \"Rick Astley\",\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/ts/enum01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/ts/enum01-svelte4-errors.yaml",
    "content": "- message: The $ prefix is reserved, and cannot be used for variable and import\n    names(illegal-declaration)\n  line: 2\n  column: 3\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/ts/enum01-svelte4-input.svelte",
    "content": "<script lang=\"ts\">\n  enum $E {\n    a = \"tutorial/image.gif\",\n    b = \"Rick Astley\",\n  }\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/ts/enum01-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/babel/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"parser\": \"@babel/eslint-parser\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/babel/babel-function-bind01-input.svelte",
    "content": "<script>\n  function func() {}\n  const obj = {}\n  const foo = obj::func\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/babel/class01-input.svelte",
    "content": "<script>\n  class A {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/global-style-input.svelte",
    "content": "<style global>\n\tinput {\n\t\t@apply bg-surface-50-900-token h-full overflow-hidden;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore-warnings/_config.json",
    "content": "{\n\t\"options\": [{ \"ignoreWarnings\": true }]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore-warnings/enum01-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore01-input.svelte",
    "content": "<!-- svelte-ignore a11y_autofocus a11y_missing_attribute -->\n<img src=\"foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore01-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-autofocus a11y-missing-attribute -->\n<img src=\"foo\" autofocus />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore01-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore02-input.svelte",
    "content": "<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<span tabindex=\"0\">\n\t<span class=\"element\"></span>\n</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore02-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<span tabindex=\"0\">\n\t<span class=\"element\"></span>\n</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ignore02-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/no-false-custom_element_props_identifier-warning-without-custom-element-input.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/no-false-custom_element_props_identifier-warning-without-custom-element-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.33.4\"\n}"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/script-comment-input.svelte",
    "content": "<script module>\n\tlet foo;\n</script>\n\n<script>\n\t// svelte-ignore export_let_unused\n\texport let unused;\n\tlet bar;\n\n\t// svelte-ignore reactive_declaration_module_script\n\t$: {\n\t\tbar = foo;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/script-comment-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/script-comment-svelte4-input.svelte",
    "content": "<script context=\"module\">\n\tlet foo;\n</script>\n\n<script>\n\t// svelte-ignore unused-export-let\n\texport let unused;\n\tlet bar;\n\n\t// svelte-ignore module-script-reactive-declaration\n\t$: {\n\t\t// svelte-ignore module-script-reactive-declaration\n\t\tbar = foo;\n\t}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/script-comment-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/style-lang01-input.svelte",
    "content": "<div class=\"foo\"></div>\n\n<style>\n\t.foo {\n\t\theight: 10px;\n\t\twidth: 10px;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/style-lang02-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\"></div>\n</div>\n\n<style lang=\"postcss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t& .bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/style-lang03-input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\"></div>\n</div>\n\n<style lang=\"scss\">\n\t.foo {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\t.bar {\n\t\t\theight: 10px;\n\t\t\twidth: 10px;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-experimental-async/_config.cjs",
    "content": "module.exports = {\n\tlanguageOptions: {\n\t\tparserOptions: {\n\t\t\tsvelteConfig: {\n\t\t\t\tcompilerOptions: {\n\t\t\t\t\texperimental: {\n\t\t\t\t\t\tasync: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-experimental-async/top-level-await-input.svelte",
    "content": "<script>\n\tawait new Promise(() => {});\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-experimental-async/top-level-await-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-onwarn/_config.cjs",
    "content": "/**\n * @typedef {import(\"svelte/compiler\").Warning} Warning\n */\nmodule.exports = {\n\tlanguageOptions: {\n\t\tparserOptions: {\n\t\t\tsvelteConfig: {\n\t\t\t\t/**\n\t\t\t\t * @param {Warning} warning\n\t\t\t\t * @param {(warning: Warning) => void} handler\n\t\t\t\t * @returns {void}\n\t\t\t\t */\n\t\t\t\tonwarn(warning, handler) {\n\t\t\t\t\tif (\n\t\t\t\t\t\twarning.code === 'a11y_missing_attribute' ||\n\t\t\t\t\t\twarning.code === 'a11y-missing-attribute'\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandler(warning);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-onwarn/a11y-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/_config.cjs",
    "content": "/**\n * @typedef {import(\"svelte/compiler\").Warning} Warning\n */\nmodule.exports = {\n\tlanguageOptions: {\n\t\tparserOptions: {\n\t\t\tsvelteConfig: {\n\t\t\t\twarningFilter: (warning) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\twarning.code !== 'a11y_missing_attribute' && warning.code !== 'a11y-missing-attribute'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/a11y-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n</script>\n\n<img {src} />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore01-input.svelte",
    "content": "<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore01-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore01-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore02-input.svelte",
    "content": "TEXT\n<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore02-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore02-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\nTEXT\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore02-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore03-input.svelte",
    "content": "<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n<!-- comment -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n<!-- svelte-ignore a11y_label_has_associated_control -->\n<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore03-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore03-svelte4-input.svelte",
    "content": "<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n<!-- comment -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n<!-- svelte-ignore a11y-label-has-associated-control -->\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<div class=\"dropdown\">\n\t<label tabindex=\"0\">Click</label>\n\t<ul tabindex=\"0\"></ul>\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore03-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore04-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#if true}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#if true}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore04-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore04-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#if true}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#if true}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore04-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore05-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#key 42}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/key}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore05-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore05-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#key 42}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/key}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore05-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore06-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#each [] as e}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#each [] as e}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore06-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore06-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#each [] as e}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#each [] as e}\n\t\tA\n\t{:else}\n\t\t<div></div>\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore06-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore07-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42) then n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y_label_has_associated_control a11y_no_noninteractive_tabindex -->\n\t{#await Promise.resolve(42) catch n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore07-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore07-svelte4-input.svelte",
    "content": "<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:catch name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42)}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{:then name}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42) then n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n<div>\n\t<!-- svelte-ignore a11y-label-has-associated-control a11y-no-noninteractive-tabindex -->\n\t{#await Promise.resolve(42) catch n}\n\t\t<label tabindex=\"0\">Click</label>\n\t\t<ul tabindex=\"0\"></ul>\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-ignore07-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-options-custom-element-input.svelte",
    "content": "<svelte:options customElement=\"my-component\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-options-custom-element-requirements.json",
    "content": "{\n\t\"svelte\": \">=4.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte3-options-custom-element-input.svelte",
    "content": "<svelte:options tag=\"my-component\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte3-options-custom-element-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/test01-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<img {src} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/class01-input.svelte",
    "content": "<script lang=\"ts\">\n  type C = {}\n  abstract class A implements C {}\n  class B<T> extends A implements C {\n    // private t: T\n    public fn(): void {}\n    public get a(): number {\n      return 42\n    }\n    public *gen(s: string) {}\n  }\n  interface I {}\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/script-comment-input.svelte",
    "content": "<script module>\n\tlet foo;\n</script>\n\n<script lang=\"ts\">\n\t// svelte-ignore export_let_unused\n\texport let unused;\n\t// svelte-ignore reactive_declaration_module_script\n\t$: reactive = foo;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/script-comment-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/script-comment-svelte4-input.svelte",
    "content": "<script context=\"module\">\n  let foo\n</script>\n\n<script lang=\"ts\">\n  // svelte-ignore unused-export-let\n  export let unused\n  // svelte-ignore module-script-reactive-declaration\n  $: reactive = foo\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/script-comment-svelte4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/test01-input.svelte",
    "content": "<script lang=\"ts\">\n  let src: string = \"tutorial/image.gif\"\n  let name: string = \"Rick Astley\"\n</script>\n\n<img {src} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/ts-lang01-input-svete4-requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/ts-lang01-input-svete4.svelte",
    "content": "<script lang=\"ts\">\n\t// svelte-ignore unused-export-let\n\texport let something;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/ts-lang01-input.svelte",
    "content": "<script lang=\"ts\">\n\t// svelte-ignore export_let_unused\n\texport let something;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/ts-lang01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/ts-unused-in-script-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { page } from '$app/stores';\n</script>\n\n{$page}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/type-only-import01-input.svelte",
    "content": "<script lang=\"ts\">\n  import type { Writable } from \"svelte/store\"\n  import { writable } from \"svelte/store\"\n  let a: Writable = writable(42)\n</script>\n\n{{ $a }}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/ts/type-only-import02-input.svelte",
    "content": "<script lang=\"ts\">\n  import { type Writable, writable } from \"svelte/store\"\n  let a: Writable = writable(42)\n</script>\n\n{{ $a }}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/undef01-input.svelte",
    "content": "<script>\n\tlet name = 'Rick Astley';\n</script>\n\n<img {src} alt=\"{name} dances.\" />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/unuse01-input.svelte",
    "content": "<script>\n\tlet src = 'tutorial/image.gif';\n\tlet name = 'Rick Astley';\n</script>\n\n<input />\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/valid-custom-element-with-props-identifier-input.svelte",
    "content": "<svelte:options customElement={{ tag: 'my-component', props: {} }} />\n\n<script>\n\tlet props = $props();\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/valid-custom-element-with-props-identifier-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.33.4\"\n}"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/invalid/const-key01-errors.yaml",
    "content": "- message: Expected key to use the variables which are defined by the `{#each}` block.\n  line: 11\n  column: 25\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/invalid/const-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n</script>\n\n{#each things as thing (key)}\n\t{@const key = thing.id}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/invalid/out-vars-key01-errors.yaml",
    "content": "- message: Expected key to use the variables which are defined by the `{#each}` block.\n  line: 12\n  column: 25\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/invalid/out-vars-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n\tconst foo = 'key';\n</script>\n\n{#each things as thing (foo)}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/call-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n\tfunction fn(thing) {\n\t\treturn thing.id;\n\t}\n</script>\n\n{#each things as thing (fn(thing))}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/destructure-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n</script>\n\n{#each things as { id, name } (id)}\n\t{name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/expression-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n</script>\n\n{#each things as thing (`thing_id=${thing.id}`)}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/expression-key02-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n\tconst foo = 'thing_id=';\n</script>\n\n{#each things as thing (foo + thing.id)}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/index-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n</script>\n\n{#each things as thing, index (index)}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/member-key01-input.svelte",
    "content": "<script>\n\tlet things = [\n\t\t{ id: 1, name: 'apple' },\n\t\t{ id: 2, name: 'banana' },\n\t\t{ id: 3, name: 'carrot' },\n\t\t{ id: 4, name: 'doughnut' },\n\t\t{ id: 5, name: 'egg' }\n\t];\n</script>\n\n{#each things as thing (thing.id)}\n\t{thing.name}\n{/each}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/svelte5-each-blocks-without-an-item-input.svelte",
    "content": "<div class=\"chess-board\">\n\t{#each { length: 8 }, rank}\n\t\t{#each { length: 8 }}\n\t\t\t{rank}\n\t\t{/each}\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-each-key/valid/svelte5-each-blocks-without-an-item-requirements.json",
    "content": "{\n\t\"svelte\": \"^5.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/+page.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n\texport let { baz, qux } = data;\n\texport let { data: data2, errors: errors2 } = { data: {}, errors: {} };\n</script>\n\n{foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/errors.yaml",
    "content": "- message: disallow props other than data or errors in SvelteKit page components.\n  line: 2\n  column: 13\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 3\n  column: 13\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 4\n  column: 15\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 4\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config/+page.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n\texport let { baz, qux } = data;\n\texport let { data: data2, errors: errors2 } = { data: {}, errors: {} };\n</script>\n\n{foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config/errors.yaml",
    "content": "- message: disallow props other than data or errors in SvelteKit page components.\n  line: 2\n  column: 13\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 3\n  column: 13\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 4\n  column: 15\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 4\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config/svelte.config.js",
    "content": "export default {\n\tkit: {\n\t\tfiles: {\n\t\t\troutes: 'tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config'\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config-from-parser-options/+page.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n\texport let { baz, qux } = data;\n\texport let { data: data2, errors: errors2 } = { data: {}, errors: {} };\n</script>\n\n{foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config-from-parser-options/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config-from-parser-options\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte-config-from-parser-options/errors.yaml",
    "content": "- message: disallow props other than data or errors in SvelteKit page components.\n  line: 2\n  column: 13\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 3\n  column: 13\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 4\n  column: 15\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 4\n  column: 20\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/+page.svelte",
    "content": "<script>\n\texport let children;\n</script>\n\n{children}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/errors.yaml",
    "content": "- message: disallow props other than data or errors in SvelteKit page components.\n  line: 2\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/requirements.json",
    "content": "{\n\t\"svelte\": \"^3.0.0 || ^4.0.0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte5/+page.svelte",
    "content": "<script>\n\tlet { foo, bar } = $props();\n</script>\n\n{foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte5/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte5\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte5/errors.yaml",
    "content": "- message: disallow props other than data or errors in SvelteKit page components.\n  line: 2\n  column: 8\n  suggestions: null\n- message: disallow props other than data or errors in SvelteKit page components.\n  line: 2\n  column: 13\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte5/requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/not-page/svelte5/test01-input.svelte",
    "content": "<script>\n\tlet { data, errors, foo, bar } = $props();\n</script>\n\n{data}, {errors}, {foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/not-page/svelte5/test01-requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/not-page/test01-input.svelte",
    "content": "<script>\n\texport let data;\n\texport let errors;\n\texport let foo;\n\texport let bar;\n</script>\n\n{data}, {errors}, {foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5/+page.svelte",
    "content": "<script>\n\tlet { data, errors, form, params, children } = $props();\n\n\tlet comment = '';\n\n\texport const snapshot = {\n\t\tcapture: () => comment,\n\t\trestore: (value) => (comment = value)\n\t};\n</script>\n\n{data}, {errors}\n\n{#if form?.success}\n\t<p>Successfully logged in! Welcome back, {data.user.name}</p>\n{/if}\n\n<form method=\"POST\">\n\t<textarea bind:value={comment} />\n\t<button>Post comment</button>\n\t{@render children()}\n</form>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5/requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-typescript/+page.svelte",
    "content": "<script lang=\"ts\">\n\tlet { data: pageData }: { data: PageData } = $props();\n</script>\n\n{pageData}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-typescript/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte5\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-typescript/requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/+page.svelte",
    "content": "<script>\n\texport let data;\n\texport let errors;\n\texport let form;\n\texport let children;\n\n\tlet comment = '';\n\n\texport const snapshot = {\n\t\tcapture: () => comment,\n\t\trestore: (value) => (comment = value)\n\t};\n</script>\n\n{data}, {errors}\n\n{#if form?.success}\n\t<p>Successfully logged in! Welcome back, {data.user.name}</p>\n{/if}\n\n<form method=\"POST\">\n\t<textarea bind:value={comment} />\n\t<button>Post comment</button>\n</form>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/_config.json",
    "content": "{\n\t\"languageOptions\": {\n\t\t\"parserOptions\": {\n\t\t\t\"svelteConfig\": {\n\t\t\t\t\"kit\": {\n\t\t\t\t\t\"files\": {\n\t\t\t\t\t\t\"routes\": \"tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/requirements.json",
    "content": "{\n\t\"svelte\": \">=5.0.0-0\"\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test-for-form/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport type { PageData, ActionData } from './$types';\n\texport let form: ActionData;\n</script>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test-for-form/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test001/+page.svelte",
    "content": "<script>\n\texport let data;\n\texport let errors;\n\texport let form;\n\texport let params;\n\n\tlet comment = '';\n\n\texport const snapshot = {\n\t\tcapture: () => comment,\n\t\trestore: (value) => (comment = value)\n\t};\n</script>\n\n{data}, {errors}\n\n{#if form?.success}\n\t<p>Successfully logged in! Welcome back, {data.user.name}</p>\n{/if}\n\n<form method=\"POST\">\n\t<textarea bind:value={comment} />\n\t<button>Post comment</button>\n</form>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test001/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test002-1/+page.svelte",
    "content": "<script context=\"module\">\n\texport let data;\n\texport let errors;\n\texport let foo;\n\texport let bar;\n</script>\n\n{data}, {errors}, {foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test002-1/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test002-2/+page.svelte",
    "content": "<script module>\n\texport let data;\n\texport let errors;\n\texport let foo;\n\texport let bar;\n</script>\n\n{data}, {errors}, {foo}, {bar}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test002-2/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test003-1/+page.svelte",
    "content": "<script context=\"module\">\n\texport const { data, errors } = { data: {}, errors: {} };\n</script>\n\n{data}, {errors}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test003-1/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test003-2/+page.svelte",
    "content": "<script module>\n\texport const { data, errors } = { data: {}, errors: {} };\n</script>\n\n{data}, {errors}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test003-2/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test004-1/+page.svelte",
    "content": "<script context=\"module\">\n\texport const { data2: data, errors2: errors } = { data2: {}, errors2: {} };\n</script>\n\n{data}, {errors}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test004-1/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test004-2/+page.svelte",
    "content": "<script module>\n\texport const { data2: data, errors2: errors } = { data2: {}, errors2: {} };\n</script>\n\n{data}, {errors}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/test004-2/_config.json",
    "content": "{\n\t\"settings\": {\n\t\t\"svelte\": {\n\t\t\t\"kit\": {\n\t\t\t\t\"files\": {\n\t\t\t\t\t\"routes\": \"tests/fixtures\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/invalid/invalid-css01-errors.yaml",
    "content": "- message: 'Error parsing style element. Error message:\n    \"tests/fixtures/rules/valid-style-parse/invalid/invalid-css01-input.svelte:4:11:\n    Unknown word .div-class/35\"'\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/invalid/invalid-css01-input.svelte",
    "content": "<div class=\"container\">\n  <div class=\"div-class\">Hello</div>\n\n  <span class=\"span-class\">World!</span>\n</div>\n\n<style>\n  // This syntax is intentionally invalid CSS - this is to be used to test resiliency against invalid input\n  .container {\n    class .div-class/35\n      # Weird comment\n      color: red;\n\n    .span-class begin\n      font-weight: bold;\n    end\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/invalid/invalid-scss01-errors.yaml",
    "content": "- message: 'Error parsing style element. Error message:\n    \"tests/fixtures/rules/valid-style-parse/invalid/invalid-scss01-input.svelte:4:11:\n    Unknown word .div-class/35\"'\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/invalid/invalid-scss01-input.svelte",
    "content": "<div class=\"container\">\n  <div class=\"div-class\">Hello</div>\n\n  <span class=\"span-class\">World!</span>\n</div>\n\n<style lang=\"scss\">\n  // This syntax is intentionally invalid CSS - this is to be used to test resiliency against invalid input\n  .container {\n    class .div-class/35\n      # Weird comment\n      color: red;\n\n    .span-class begin\n      font-weight: bold;\n    end\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/invalid/unknown-lang01-errors.yaml",
    "content": "- message: Found unsupported style element language \"invalid-lang\"\n  line: 7\n  column: 1\n  suggestions: null\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/invalid/unknown-lang01-input.svelte",
    "content": "<div class=\"container\">\n  <div class=\"div-class\">Hello</div>\n\n  <span class=\"span-class\">World!</span>\n</div>\n\n<style lang=\"invalid-lang\">\n  // This syntax is intentionally invalid CSS - this is to be used to test resiliency against unknown style languages.\n  .container {\n    class .div-class/35\n      # Weird comment\n      color: red;\n\n    .span-class begin\n      font-weight: bold;\n    end\n  }\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/valid/no-style01-input.svelte",
    "content": "<a href=\"https://svelte.dev\">Hello</a>\n\n<span style=\"font-weight: bold;\">World!</span>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/valid/valid-css01-input.svelte",
    "content": "<div class=\"div-class\">Hello</div>\n\n<span class=\"span-class\">World!</span>\n\n<style>\n\t.div-class {\n\t\tcolor: red;\n\t}\n\n\t.span-class {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/fixtures/rules/valid-style-parse/valid/valid-scss01-input.svelte",
    "content": "<div class=\"container\">\n\t<div class=\"div-class\">Hello</div>\n\n\t<span class=\"span-class\">World!</span>\n</div>\n\n<style lang=\"scss\">\n\t.container {\n\t\t.div-class {\n\t\t\t// This is an inline comment\n\t\t\tcolor: red;\n\t\t}\n\n\t\t.span-class {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/configs/all.ts",
    "content": "import assert from 'assert';\nimport plugin from '../../../src/index.js';\nimport { loadESLint, type ESLint as ESLintClass } from 'eslint';\n\ndescribe('`all` config', () => {\n\tlet ESLint: typeof ESLintClass;\n\n\tbefore(async () => {\n\t\tESLint = await loadESLint({ useFlatConfig: true });\n\t});\n\n\tit('`all` config should work. ', async () => {\n\t\tconst code = `<script>const a = 1, b = 2;</script>{@html a+b}`;\n\n\t\tconst linter = new ESLint({\n\t\t\toverrideConfigFile: true,\n\t\t\toverrideConfig: plugin.configs['flat/all']\n\t\t});\n\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\tconst messages = result[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessages.map((m) => ({ ruleId: m.ruleId, line: m.line, message: m.message })),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\truleId: 'svelte/no-at-html-tags',\n\t\t\t\t\tmessage: '`{@html}` can lead to XSS attack.',\n\t\t\t\t\tline: 1\n\t\t\t\t}\n\t\t\t]\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/configs/base.ts",
    "content": "import assert from 'assert';\nimport plugin from '../../../src/index.js';\nimport { loadESLint, type ESLint as ESLintClass } from 'eslint';\n\ndescribe('`base` config', () => {\n\tlet ESLint: typeof ESLintClass;\n\n\tbefore(async () => {\n\t\tESLint = await loadESLint({ useFlatConfig: true });\n\t});\n\n\tit('`base` config should work. ', async () => {\n\t\tconst code = `<script>const a = 1, b = 2;</script>\n<!-- eslint-disable-next-line svelte/no-at-html-tags -->\n{@html a+b}\n{@html a+b}`;\n\t\tconst linter = new ESLint({\n\t\t\toverrideConfigFile: true,\n\t\t\toverrideConfig: [\n\t\t\t\t...plugin.configs['flat/base'],\n\t\t\t\t{\n\t\t\t\t\trules: {\n\t\t\t\t\t\t'svelte/no-at-html-tags': 'error'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\tconst messages = result[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessages.map((m) => ({ ruleId: m.ruleId, line: m.line, message: m.message })),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\truleId: 'svelte/no-at-html-tags',\n\t\t\t\t\tmessage: '`{@html}` can lead to XSS attack.',\n\t\t\t\t\tline: 4\n\t\t\t\t}\n\t\t\t]\n\t\t);\n\n\t\tconst resultWithJs = await linter.lintText(';', { filePath: 'test.js' });\n\t\tconst messagesWithJs = resultWithJs[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessagesWithJs.map((m) => ({\n\t\t\t\truleId: m.ruleId,\n\t\t\t\tline: m.line,\n\t\t\t\tmessage: m.message\n\t\t\t})),\n\t\t\t[]\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/configs/recommended.ts",
    "content": "import assert from 'assert';\nimport plugin from '../../../src/index.js';\nimport { loadESLint, type ESLint as ESLintClass } from 'eslint';\n\ndescribe('`recommended` config', () => {\n\tlet ESLint: typeof ESLintClass;\n\n\tbefore(async () => {\n\t\tESLint = await loadESLint({ useFlatConfig: true });\n\t});\n\n\tit('`recommended` config should work. ', async () => {\n\t\tconst code = `<script>const a = 1, b = 2;</script>{@html a+b}`;\n\n\t\tconst linter = new ESLint({\n\t\t\toverrideConfigFile: true,\n\t\t\toverrideConfig: plugin.configs['flat/recommended']\n\t\t});\n\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\tconst messages = result[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessages.map((m) => ({ ruleId: m.ruleId, line: m.line, message: m.message })),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\truleId: 'svelte/no-at-html-tags',\n\t\t\t\t\tmessage: '`{@html}` can lead to XSS attack.',\n\t\t\t\t\tline: 1\n\t\t\t\t}\n\t\t\t]\n\t\t);\n\n\t\tconst resultWithJs = await linter.lintText(';', { filePath: 'test.js' });\n\t\tconst messagesWithJs = resultWithJs[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessagesWithJs.map((m) => ({\n\t\t\t\truleId: m.ruleId,\n\t\t\t\tline: m.line,\n\t\t\t\tmessage: m.message\n\t\t\t})),\n\t\t\t[]\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/index.spec.ts",
    "content": "import assert from 'assert';\nimport { shouldRun } from '../../src/utils/index.js';\n\nconst actualSvelte3: Parameters<typeof shouldRun>[0] = {\n\tsvelteVersion: '3/4',\n\tsvelteFileType: '.svelte',\n\trunes: null,\n\tsvelteKitVersion: null,\n\tsvelteKitFileType: null\n};\n\nconst actualSvelte5: Parameters<typeof shouldRun>[0] = {\n\tsvelteVersion: '5',\n\tsvelteFileType: '.svelte',\n\trunes: true,\n\tsvelteKitVersion: null,\n\tsvelteKitFileType: null\n};\n\nconst actualUndetermined: Parameters<typeof shouldRun>[0] = {\n\tsvelteVersion: '5',\n\tsvelteFileType: '.svelte',\n\trunes: 'undetermined',\n\tsvelteKitVersion: null,\n\tsvelteKitFileType: null\n};\n\nconst actualSvelte5Script: Parameters<typeof shouldRun>[0] = {\n\tsvelteVersion: '5',\n\tsvelteFileType: '.svelte.[js|ts]',\n\trunes: true,\n\tsvelteKitVersion: null,\n\tsvelteKitFileType: null\n};\n\nconst actualSvelteKit: Parameters<typeof shouldRun>[0] = {\n\tsvelteVersion: '5',\n\tsvelteFileType: '.svelte',\n\trunes: true,\n\tsvelteKitVersion: '2',\n\tsvelteKitFileType: '+page.svelte'\n};\n\nconst actualSvelteKitNotRoute: Parameters<typeof shouldRun>[0] = {\n\tsvelteVersion: '5',\n\tsvelteFileType: '.svelte',\n\trunes: true,\n\tsvelteKitVersion: '2',\n\tsvelteKitFileType: null\n};\n\ndescribe('shouldRun', () => {\n\tit('no condition1', () => {\n\t\tassert.strictEqual(shouldRun(actualSvelte3, []), true);\n\t});\n\tit('no condition2', () => {\n\t\tassert.strictEqual(shouldRun(actualSvelte3, [{}]), true);\n\t});\n\tit('no condition3', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte3, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: undefined\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\tit('no condition4', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte3, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: []\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('simple true', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte3, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('simple false', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte3, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5']\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n\n\tit('or true', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte3, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5']\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('or false', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelteKit, [\n\t\t\t\t{\n\t\t\t\t\tsvelteKitFileTypes: ['+page.[js|ts]']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsvelteKitFileTypes: ['+page.server.[js|ts]']\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n\n\tit('and true', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte5, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\t\trunes: [true]\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('and false', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte5, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\t\trunes: [false]\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n\n\tit('undetermined true', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualUndetermined, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\t\trunes: ['undetermined']\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('real - svelte3', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte3, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['3/4']\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('real - Svelte5 with runes', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte5, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\t\tsvelteFileTypes: ['.svelte'],\n\t\t\t\t\trunes: [true]\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('real - Svelte5 without runes', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte5, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\t\tsvelteFileTypes: ['.svelte'],\n\t\t\t\t\trunes: [false]\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n\n\tit('real - Svelte5 script', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelte5Script, [\n\t\t\t\t{\n\t\t\t\t\tsvelteVersions: ['5'],\n\t\t\t\t\tsvelteFileTypes: ['.svelte.[js|ts]'],\n\t\t\t\t\trunes: [true]\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('real - SvelteKit1', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelteKit, [\n\t\t\t\t{\n\t\t\t\t\tsvelteKitVersions: ['2'],\n\t\t\t\t\tsvelteKitFileTypes: ['+page.svelte']\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('real - SvelteKit2', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelteKit, [\n\t\t\t\t{\n\t\t\t\t\tsvelteKitVersions: [null]\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n\n\tit('real - SvelteKit3', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelteKit, [\n\t\t\t\t{\n\t\t\t\t\tsvelteKitVersions: ['2'],\n\t\t\t\t\tsvelteKitFileTypes: [null]\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n\n\tit('real - SvelteKit not route1', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelteKitNotRoute, [\n\t\t\t\t{\n\t\t\t\t\tsvelteKitVersions: ['2'],\n\t\t\t\t\tsvelteKitFileTypes: [null]\n\t\t\t\t}\n\t\t\t]),\n\t\t\ttrue\n\t\t);\n\t});\n\n\tit('real - SvelteKit not route2', () => {\n\t\tassert.strictEqual(\n\t\t\tshouldRun(actualSvelteKitNotRoute, [\n\t\t\t\t{\n\t\t\t\t\tsvelteKitVersions: ['2'],\n\t\t\t\t\tsvelteKitFileTypes: ['+page.svelte']\n\t\t\t\t}\n\t\t\t]),\n\t\t\tfalse\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/integration/no-unused-vars.ts",
    "content": "import type { Rule } from 'eslint';\nimport { getCoreRule } from '../../../src/utils/eslint-core.js';\nimport { RuleTester } from '../../utils/eslint-compat.js';\nimport * as parser from 'svelte-eslint-parser';\n\ndescribe('Integration test for no-unused-vars', () => {\n\tconst ruleNoUnusedVars = getCoreRule('no-unused-vars') as unknown as Rule.RuleModule;\n\tconst tester = new RuleTester({\n\t\tlanguageOptions: {\n\t\t\tparser: parser,\n\t\t\tecmaVersion:\"latest\",\n\t\t\tsourceType: 'module'\n\t\t}\n\t});\n\ttester.run('no-unused-vars', ruleNoUnusedVars, {\n\t\tvalid: [\n\t\t\t`\n      <script>\n        import { a } from \"./stores\"\n        $a = 42\n      </script>\n      `,\n\t\t\t`\n      <script>\n        import { a as b } from \"./stores\"\n        $b = 42\n      </script>\n      `,\n\t\t\t`\n      <script>\n        import a from \"./stores\"\n        $a = 42\n      </script>\n      `,\n\t\t\t`\n      <script>\n        import * as a from \"./stores\"\n        $a = 42\n      </script>\n      `\n\t\t],\n\t\tinvalid: [\n\t\t\t{\n\t\t\t\tcode: `\n          <script>\n            import { a } from \"./stores\"\n            $b = 42\n          </script>\n          `,\n\t\t\t\terrors: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tcode: `\n          <script>\n            import { a as b } from \"./stores\"\n            $a = 42\n          </script>\n          `,\n\t\t\t\terrors: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tcode: `\n          <script>\n            import a from \"./stores\"\n            $b = 42\n          </script>\n          `,\n\t\t\t\terrors: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tcode: `\n          <script>\n            import * as a from \"./stores\"\n            $b = 42\n          </script>\n          `,\n\t\t\t\terrors: 1\n\t\t\t}\n\t\t]\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/meta.ts",
    "content": "import assert from 'assert';\nimport plugin from '../../src/index.js';\nimport { version } from '../../package.json';\nconst expectedMeta = {\n\tname: 'eslint-plugin-svelte',\n\tversion\n};\n\ndescribe('Test for meta object', () => {\n\tit('A plugin should have a meta object.', () => {\n\t\tassert.strictEqual(plugin.meta.name, expectedMeta.name);\n\t\tassert.strictEqual(typeof plugin.meta.version, 'string');\n\t});\n\n\tfor (const [name, processor] of Object.entries(plugin.processors)) {\n\t\tit(`\"${name}\" processor should have a meta object.`, () => {\n\t\t\tassert.strictEqual(processor.meta.name, expectedMeta.name);\n\t\t\tassert.strictEqual(typeof processor.meta.version, 'string');\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/no-unnecessary-condition.ts",
    "content": "import { RuleTester } from '../../../utils/eslint-compat.js';\nimport rule from '../../../../src/rules/@typescript-eslint/no-unnecessary-condition.js';\nimport { loadTestCases, RULES_PROJECT } from '../../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module',\n\t\tparserOptions: {\n\t\t\tparser: {\n\t\t\t\tts: '@typescript-eslint/parser',\n\t\t\t\tjs: 'espree'\n\t\t\t},\n\t\t\tproject: RULES_PROJECT,\n\t\t\tdisallowAutomaticSingleRunInference: true\n\t\t}\n\t}\n});\n\ntester.run(\n\t'@typescript-eslint/no-unnecessary-condition',\n\trule as any,\n\tloadTestCases('@typescript-eslint/no-unnecessary-condition')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/fixtures/file.ts",
    "content": ""
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/fixtures/react.tsx",
    "content": ""
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/fixtures/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"jsx\": \"preserve\",\n\t\t\"target\": \"es5\",\n\t\t\"module\": \"commonjs\",\n\t\t\"strict\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"lib\": [\"es2015\", \"es2017\", \"esnext\"],\n\t\t\"experimentalDecorators\": true\n\t},\n\t\"include\": [\"file.ts\", \"react.tsx\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/fixtures/unstrict/file.ts",
    "content": ""
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/fixtures/unstrict/react.tsx",
    "content": ""
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/fixtures/unstrict/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"jsx\": \"preserve\",\n\t\t\"target\": \"es5\",\n\t\t\"module\": \"commonjs\",\n\t\t\"strict\": false,\n\t\t\"esModuleInterop\": true,\n\t\t\"lib\": [\"es2015\", \"es2017\", \"esnext\"],\n\t\t\"experimentalDecorators\": true\n\t},\n\t\"include\": [\"file.ts\", \"react.tsx\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/no-unnecessary-condition.ts",
    "content": "// Original test cases\n// https://github.com/typescript-eslint/typescript-eslint/blob/78467fc1bde9bd2db1e08b3d19f151f4adaff8a9/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts\n/* eslint func-style: off, eslint-plugin/consistent-output: off -- respect original  */\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { RuleTester } from '../../../../utils/eslint-compat.js';\nimport type * as eslint from 'eslint';\nimport * as typescriptParser from '@typescript-eslint/parser';\n\nimport rule from '../../../../../src/rules/@typescript-eslint/no-unnecessary-condition.js';\n\nconst url = new URL(import.meta.url);\nconst __dirname = path.dirname(fileURLToPath(url));\n\nfunction getFixturesRootDir(): string {\n\treturn path.join(__dirname, 'fixtures');\n}\n\nconst rootPath = getFixturesRootDir();\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser: typescriptParser,\n\t\tparserOptions: {\n\t\t\ttsconfigRootDir: rootPath,\n\t\t\tproject: './tsconfig.json',\n\t\t\tdisallowAutomaticSingleRunInference: true\n\t\t}\n\t}\n});\n\nfunction withFileName<\n\tTestCase extends eslint.RuleTester.ValidTestCase | eslint.RuleTester.InvalidTestCase\n>(list: (string | TestCase)[]): TestCase[] {\n\treturn list.map((e: any) => {\n\t\tif (typeof e === 'string') {\n\t\t\treturn { code: e, filename: path.join(rootPath, 'file.ts') } as TestCase;\n\t\t}\n\t\tif (e.filename) return e;\n\t\treturn {\n\t\t\t...e,\n\t\t\tfilename: e.languageOptions?.parserOptions?.tsconfigRootDir\n\t\t\t\t? path.join(e.languageOptions?.parserOptions.tsconfigRootDir, 'file.ts')\n\t\t\t\t: path.join(rootPath, 'file.ts')\n\t\t} as TestCase;\n\t});\n}\n\nconst ruleError = (\n\tline: number,\n\tcolumn: number,\n\tmessageId: string\n): {\n\tmessageId: string;\n\tline: number;\n\tcolumn: number;\n} => ({\n\tmessageId,\n\tline,\n\tcolumn\n});\n\nconst necessaryConditionTest = (condition: string): string => `\ndeclare const b1: ${condition};\ndeclare const b2: boolean;\nconst t1 = b1 && b2;\n`;\n\nconst unnecessaryConditionTest = (\n\tcondition: string,\n\tmessageId: string\n): eslint.RuleTester.InvalidTestCase => ({\n\tcode: necessaryConditionTest(condition),\n\terrors: [ruleError(4, 12, messageId)]\n});\n\nruleTester.run('no-unnecessary-conditionals', rule as any, {\n\tvalid: withFileName([\n\t\t`\ndeclare const b1: boolean;\ndeclare const b2: boolean;\nconst t1 = b1 && b2;\nconst t2 = b1 || b2;\nif (b1 && b2) {\n}\nwhile (b1 && b2) {}\nfor (let i = 0; b1 && b2; i++) {\n  break;\n}\nconst t1 = b1 && b2 ? 'yes' : 'no';\nif (b1 && b2) {\n}\nwhile (b1 && b2) {}\nfor (let i = 0; b1 && b2; i++) {\n  break;\n}\nconst t1 = b1 && b2 ? 'yes' : 'no';\nfor (;;) {}\n    `,\n\t\tnecessaryConditionTest('false | 5'), // Truthy literal and falsy literal\n\t\tnecessaryConditionTest('boolean | \"foo\"'), // boolean and truthy literal\n\t\tnecessaryConditionTest('0 | boolean'), // boolean and falsy literal\n\t\tnecessaryConditionTest('boolean | object'), // boolean and always-truthy type\n\t\tnecessaryConditionTest('false | object'), // always truthy type and falsy literal\n\t\t// always falsy type and always truthy type\n\t\tnecessaryConditionTest('null | object'),\n\t\tnecessaryConditionTest('undefined | true'),\n\t\tnecessaryConditionTest('void | true'),\n\n\t\tnecessaryConditionTest('any'), // any\n\t\tnecessaryConditionTest('unknown'), // unknown\n\n\t\t// Generic type params\n\t\t`\nfunction test<T extends string>(t: T) {\n  return t ? 'yes' : 'no';\n}\n    `,\n\t\t`\n// Naked type param\nfunction test<T>(t: T) {\n  return t ? 'yes' : 'no';\n}\n    `,\n\t\t`\n// Naked type param in union\nfunction test<T>(t: T | []) {\n  return t ? 'yes' : 'no';\n}\n    `,\n\n\t\t// Boolean expressions\n\t\t`\nfunction test(a: string) {\n  const t1 = a === 'a';\n  const t2 = 'a' === a;\n}\n    `,\n\t\t`\nfunction test(a?: string) {\n  const t1 = a === undefined;\n  const t2 = undefined === a;\n  const t1 = a !== undefined;\n  const t2 = undefined !== a;\n}\n    `,\n\t\t`\nfunction test(a: null | string) {\n  const t1 = a === null;\n  const t2 = null === a;\n  const t1 = a !== null;\n  const t2 = null !== a;\n}\n    `,\n\t\t`\nfunction test(a?: null | string) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n}\n    `,\n\t\t`\nfunction test(a?: string) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n}\n    `,\n\t\t`\nfunction test(a: null | string) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n}\n    `,\n\t\t`\nfunction test(a: any) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n  const t9 = a === null;\n  const t10 = null === a;\n  const t11 = a !== null;\n  const t12 = null !== a;\n  const t13 = a === undefined;\n  const t14 = undefined === a;\n  const t15 = a !== undefined;\n  const t16 = undefined !== a;\n}\n    `,\n\t\t`\nfunction test(a: unknown) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n  const t9 = a === null;\n  const t10 = null === a;\n  const t11 = a !== null;\n  const t12 = null !== a;\n  const t13 = a === undefined;\n  const t14 = undefined === a;\n  const t15 = a !== undefined;\n  const t16 = undefined !== a;\n}\n    `,\n\t\t`\nfunction test<T>(a: T) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n  const t9 = a === null;\n  const t10 = null === a;\n  const t11 = a !== null;\n  const t12 = null !== a;\n  const t13 = a === undefined;\n  const t14 = undefined === a;\n  const t15 = a !== undefined;\n  const t16 = undefined !== a;\n}\n    `,\n\n\t\t//\n\t\t// Predicate functions\n\t\t//\n\t\t`\n// with literal arrow function\n[0, 1, 2].filter(x => x);\n\n// filter with named function\nfunction length(x: string) {\n  return x.length;\n}\n['a', 'b', ''].filter(length);\n\n// with non-literal array\nfunction nonEmptyStrings(x: string[]) {\n  return x.filter(length);\n}\n\n// filter-like predicate\nfunction count(\n  list: string[],\n  predicate: (value: string, index: number, array: string[]) => unknown,\n) {\n  return list.filter(predicate).length;\n}\n    `,\n\t\t// Ignores non-array methods of the same name\n\t\t`\nconst notArray = {\n  filter: (func: () => boolean) => func(),\n  find: (func: () => boolean) => func(),\n};\nnotArray.filter(() => true);\nnotArray.find(() => true);\n    `,\n\n\t\t// Nullish coalescing operator\n\t\t`\nfunction test(a: string | null) {\n  return a ?? 'default';\n}\n    `,\n\t\t`\nfunction test(a: string | undefined) {\n  return a ?? 'default';\n}\n    `,\n\t\t`\nfunction test(a: string | null | undefined) {\n  return a ?? 'default';\n}\n    `,\n\t\t`\nfunction test(a: unknown) {\n  return a ?? 'default';\n}\n    `,\n\t\t// Indexing cases\n\t\t`\ndeclare const arr: object[];\nif (arr[42]) {\n} // looks unnecessary from the types, but isn't\n\nconst tuple = [{}] as [object];\ndeclare const n: number;\nif (tuple[n]) {\n}\n    `,\n\t\t// Optional-chaining indexing\n\t\t`\ndeclare const arr: Array<{ value: string } & (() => void)>;\nif (arr[42]?.value) {\n}\narr[41]?.();\n\n// An array access can \"infect\" deeper into the chain\ndeclare const arr2: Array<{ x: { y: { z: object } } }>;\narr2[42]?.x?.y?.z;\n\nconst tuple = ['foo'] as const;\ndeclare const n: number;\ntuple[n]?.toUpperCase();\n    `,\n\t\t`\nif (arr?.[42]) {\n}\n    `,\n\t\t`\ndeclare const returnsArr: undefined | (() => string[]);\nif (returnsArr?.()[42]) {\n}\nreturnsArr?.()[42]?.toUpperCase();\n    `,\n\t\t// nullish + array index\n\t\t`\ndeclare const arr: string[][];\narr[x] ?? [];\n    `,\n\t\t// nullish + optional array index\n\t\t`\ndeclare const arr: { foo: number }[];\nconst bar = arr[42]?.foo ?? 0;\n    `,\n\t\t// Doesn't check the right-hand side of a logical expression\n\t\t//  in a non-conditional context\n\t\t`\ndeclare const b1: boolean;\ndeclare const b2: true;\nconst x = b1 && b2;\n      `,\n\t\t{\n\t\t\tcode: `\nwhile (true) {}\nfor (; true; ) {}\ndo {} while (true);\n      `,\n\t\t\toptions: [{ allowConstantLoopConditions: true }]\n\t\t},\n\t\t`\nlet foo: undefined | { bar: true };\nfoo?.bar;\n    `,\n\t\t`\nlet foo: null | { bar: true };\nfoo?.bar;\n    `,\n\t\t`\nlet foo: undefined;\nfoo?.bar;\n    `,\n\t\t`\nlet foo: undefined;\nfoo?.bar.baz;\n    `,\n\t\t`\nlet foo: null;\nfoo?.bar;\n    `,\n\t\t`\nlet anyValue: any;\nanyValue?.foo;\n    `,\n\t\t`\nlet unknownValue: unknown;\nunknownValue?.foo;\n    `,\n\t\t`\nlet foo: undefined | (() => {});\nfoo?.();\n    `,\n\t\t`\nlet foo: null | (() => {});\nfoo?.();\n    `,\n\t\t`\nlet foo: undefined;\nfoo?.();\n    `,\n\t\t`\nlet foo: undefined;\nfoo?.().bar;\n    `,\n\t\t`\nlet foo: null;\nfoo?.();\n    `,\n\t\t`\nlet anyValue: any;\nanyValue?.();\n    `,\n\t\t`\nlet unknownValue: unknown;\nunknownValue?.();\n    `,\n\t\t'const foo = [1, 2, 3][0];',\n\t\t`\ndeclare const foo: { bar?: { baz: { c: string } } } | null;\nfoo?.bar?.baz;\n    `,\n\t\t`\nfoo?.bar?.baz?.qux;\n    `,\n\t\t`\ndeclare const foo: { bar: { baz: string } };\nfoo.bar.qux?.();\n    `,\n\t\t`\ntype Foo = { baz: number } | null;\ntype Bar = { baz: null | string | { qux: string } };\ndeclare const foo: { fooOrBar: Foo | Bar } | null;\nfoo?.fooOrBar?.baz?.qux;\n    `,\n\t\t`\ntype Foo = { [key: string]: string } | null;\ndeclare const foo: Foo;\n\nconst key = '1';\nfoo?.[key]?.trim();\n    `,\n\t\t`\ntype Foo = { [key: string]: string; foo: 'foo'; bar: 'bar' } | null;\ntype Key = 'bar' | 'foo';\ndeclare const foo: Foo;\ndeclare const key: Key;\n\nfoo?.[key].trim();\n    `,\n\t\t`\ninterface Outer {\n  inner?: {\n    [key: string]: string | undefined;\n  };\n}\n\nfunction Foo(outer: Outer, key: string): number | undefined {\n  return outer.inner?.[key]?.charCodeAt(0);\n}\n    `,\n\t\t`\ninterface Outer {\n  inner?: {\n    [key: string]: string | undefined;\n    bar: 'bar';\n  };\n}\ntype Foo = 'foo';\n\nfunction Foo(outer: Outer, key: Foo): number | undefined {\n  return outer.inner?.[key]?.charCodeAt(0);\n}\n    `,\n\t\t`\ntype Foo = { [key: string]: string; foo: 'foo'; bar: 'bar' } | null;\ntype Key = 'bar' | 'foo' | 'baz';\ndeclare const foo: Foo;\ndeclare const key: Key;\n\nfoo?.[key]?.trim();\n    `,\n\t\t`\nlet latencies: number[][] = [];\n\nfunction recordData(): void {\n  if (!latencies[0]) latencies[0] = [];\n  latencies[0].push(4);\n}\n\nrecordData();\n    `,\n\t\t`\nlet latencies: number[][] = [];\n\nfunction recordData(): void {\n  if (latencies[0]) latencies[0] = [];\n  latencies[0].push(4);\n}\n\nrecordData();\n    `,\n\t\t`\nfunction test(testVal?: boolean) {\n  if (testVal ?? true) {\n    console.log('test');\n  }\n}\n    `,\n\t\t`\ndeclare const x: string[];\nif (!x[0]) {\n}\n    `,\n\t\t// https://github.com/typescript-eslint/typescript-eslint/issues/2421\n\t\t`\nconst isEven = (val: number) => val % 2 === 0;\nif (!isEven(1)) {\n}\n    `,\n\t\t`\ndeclare const booleanTyped: boolean;\ndeclare const unknownTyped: unknown;\n\nif (!(booleanTyped || unknownTyped)) {\n}\n    `,\n\t\t{\n\t\t\tcode: `\ndeclare const x: string[] | null;\n// eslint-disable-next-line\nif (x) {\n}\n      `,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tallowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: true\n\t\t\t\t}\n\t\t\t],\n\t\t\tlanguageOptions: {\n\t\t\t\tparserOptions: {\n\t\t\t\t\ttsconfigRootDir: path.join(rootPath, 'unstrict')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]),\n\tinvalid: withFileName([\n\t\t// Ensure that it's checking in all the right places\n\t\t{\n\t\t\tcode: `\nconst b1 = true;\ndeclare const b2: boolean;\nconst t1 = b1 && b2;\nconst t2 = b1 || b2;\nif (b1 && b2) {\n}\nif (b2 && b1) {\n}\nwhile (b1 && b2) {}\nwhile (b2 && b1) {}\nfor (let i = 0; b1 && b2; i++) {\n  break;\n}\nconst t1 = b1 && b2 ? 'yes' : 'no';\nconst t1 = b2 && b1 ? 'yes' : 'no';\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(4, 12, 'alwaysTruthy'),\n\t\t\t\truleError(5, 12, 'alwaysTruthy'),\n\t\t\t\truleError(6, 5, 'alwaysTruthy'),\n\t\t\t\truleError(8, 11, 'alwaysTruthy'),\n\t\t\t\truleError(10, 8, 'alwaysTruthy'),\n\t\t\t\truleError(11, 14, 'alwaysTruthy'),\n\t\t\t\truleError(12, 17, 'alwaysTruthy'),\n\t\t\t\truleError(15, 12, 'alwaysTruthy'),\n\t\t\t\truleError(16, 18, 'alwaysTruthy')\n\t\t\t]\n\t\t},\n\t\t// Ensure that it's complaining about the right things\n\t\tunnecessaryConditionTest('object', 'alwaysTruthy'),\n\t\tunnecessaryConditionTest('object | true', 'alwaysTruthy'),\n\t\tunnecessaryConditionTest('\"\" | false', 'alwaysFalsy'), // Two falsy literals\n\t\tunnecessaryConditionTest('\"always truthy\"', 'alwaysTruthy'),\n\t\tunnecessaryConditionTest(`undefined`, 'alwaysFalsy'),\n\t\tunnecessaryConditionTest('null', 'alwaysFalsy'),\n\t\tunnecessaryConditionTest('void', 'alwaysFalsy'),\n\t\tunnecessaryConditionTest('never', 'never'),\n\n\t\t// More complex logical expressions\n\t\t{\n\t\t\tcode: `\ndeclare const b1: boolean;\ndeclare const b2: boolean;\nif (true && b1 && b2) {\n}\nif (b1 && false && b2) {\n}\nif (b1 || b2 || true) {\n}\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(4, 5, 'alwaysTruthy'),\n\t\t\t\truleError(6, 11, 'alwaysFalsy'),\n\t\t\t\truleError(8, 17, 'alwaysTruthy')\n\t\t\t]\n\t\t},\n\n\t\t// Generic type params\n\t\t{\n\t\t\tcode: `\nfunction test<T extends object>(t: T) {\n  return t ? 'yes' : 'no';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'alwaysTruthy')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test<T extends false>(t: T) {\n  return t ? 'yes' : 'no';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'alwaysFalsy')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test<T extends 'a' | 'b'>(t: T) {\n  return t ? 'yes' : 'no';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'alwaysTruthy')]\n\t\t},\n\n\t\t// Boolean expressions\n\t\t{\n\t\t\tcode: `\nfunction test(a: 'a') {\n  return a === 'a';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'literalBooleanExpression')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nconst y = 1;\nif (y === 0) {\n}\n      `,\n\t\t\terrors: [ruleError(3, 5, 'literalBooleanExpression')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nenum Foo {\n  a = 1,\n  b = 2,\n}\n\nconst x = Foo.a;\nif (x === Foo.a) {\n}\n      `,\n\t\t\terrors: [ruleError(8, 5, 'literalBooleanExpression')]\n\t\t},\n\t\t// Workaround https://github.com/microsoft/TypeScript/issues/37160\n\t\t{\n\t\t\tcode: `\nfunction test(a: string) {\n  const t1 = a === undefined;\n  const t2 = undefined === a;\n  const t3 = a !== undefined;\n  const t4 = undefined !== a;\n  const t5 = a === null;\n  const t6 = null === a;\n  const t7 = a !== null;\n  const t8 = null !== a;\n}\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(3, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(4, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(5, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(6, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(7, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(8, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(9, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(10, 14, 'noOverlapBooleanExpression')\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test(a?: string) {\n  const t1 = a === undefined;\n  const t2 = undefined === a;\n  const t3 = a !== undefined;\n  const t4 = undefined !== a;\n  const t5 = a === null;\n  const t6 = null === a;\n  const t7 = a !== null;\n  const t8 = null !== a;\n}\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(7, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(8, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(9, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(10, 14, 'noOverlapBooleanExpression')\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test(a: null | string) {\n  const t1 = a === undefined;\n  const t2 = undefined === a;\n  const t3 = a !== undefined;\n  const t4 = undefined !== a;\n  const t5 = a === null;\n  const t6 = null === a;\n  const t7 = a !== null;\n  const t8 = null !== a;\n}\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(3, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(4, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(5, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(6, 14, 'noOverlapBooleanExpression')\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test<T extends object>(a: T) {\n  const t1 = a == null;\n  const t2 = null == a;\n  const t3 = a != null;\n  const t4 = null != a;\n  const t5 = a == undefined;\n  const t6 = undefined == a;\n  const t7 = a != undefined;\n  const t8 = undefined != a;\n  const t9 = a === null;\n  const t10 = null === a;\n  const t11 = a !== null;\n  const t12 = null !== a;\n  const t13 = a === undefined;\n  const t14 = undefined === a;\n  const t15 = a !== undefined;\n  const t16 = undefined !== a;\n}\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(3, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(4, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(5, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(6, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(7, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(8, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(9, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(10, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(11, 14, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(12, 15, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(13, 15, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(14, 15, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(15, 15, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(16, 15, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(17, 15, 'noOverlapBooleanExpression'),\n\t\t\t\truleError(18, 15, 'noOverlapBooleanExpression')\n\t\t\t]\n\t\t},\n\t\t// Nullish coalescing operator\n\t\t{\n\t\t\tcode: `\nfunction test(a: string) {\n  return a ?? 'default';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'neverNullish')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test(a: string | false) {\n  return a ?? 'default';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'neverNullish')]\n\t\t},\n\t\t// nullish + array index without optional chaining\n\t\t{\n\t\t\tcode: `\nfunction test(a: { foo: string }[]) {\n  return a[0].foo ?? 'default';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'neverNullish')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test(a: null) {\n  return a ?? 'default';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'alwaysNullish')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test(a: null[]) {\n  return a[0] ?? 'default';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'alwaysNullish')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction test(a: never) {\n  return a ?? 'default';\n}\n      `,\n\t\t\terrors: [ruleError(3, 10, 'never')]\n\t\t},\n\n\t\t// Predicate functions\n\t\t{\n\t\t\tcode: `\n[1, 3, 5].filter(() => true);\n[1, 2, 3].find(() => {\n  return false;\n});\n\n// with non-literal array\nfunction nothing(x: string[]) {\n  return x.filter(() => false);\n}\n// with readonly array\nfunction nothing2(x: readonly string[]) {\n  return x.filter(() => false);\n}\n// with tuple\nfunction nothing3(x: [string, string]) {\n  return x.filter(() => false);\n}\n      `,\n\t\t\terrors: [\n\t\t\t\truleError(2, 24, 'alwaysTruthy'),\n\t\t\t\truleError(4, 10, 'alwaysFalsy'),\n\t\t\t\truleError(9, 25, 'alwaysFalsy'),\n\t\t\t\truleError(13, 25, 'alwaysFalsy'),\n\t\t\t\truleError(17, 25, 'alwaysFalsy')\n\t\t\t]\n\t\t},\n\t\t// Indexing cases\n\t\t{\n\t\t\t// This is an error because 'dict' doesn't represent\n\t\t\t//  the potential for undefined in its types\n\t\t\tcode: `\ndeclare const dict: Record<string, object>;\nif (dict['mightNotExist']) {\n}\n      `,\n\t\t\terrors: [ruleError(3, 5, 'alwaysTruthy')]\n\t\t},\n\t\t{\n\t\t\t// Should still check tuples when accessed with literal numbers, since they don't have\n\t\t\t//   unsound index signatures\n\t\t\tcode: `\nconst x = [{}] as [{ foo: string }];\nif (x[0]) {\n}\nif (x[0]?.foo) {\n}\n      `,\n\t\t\toutput: `\nconst x = [{}] as [{ foo: string }];\nif (x[0]) {\n}\nif (x[0].foo) {\n}\n      `,\n\t\t\terrors: [ruleError(3, 5, 'alwaysTruthy'), ruleError(5, 9, 'neverOptionalChain')]\n\t\t},\n\t\t{\n\t\t\t// Shouldn't mistake this for an array indexing case\n\t\t\tcode: `\ndeclare const arr: object[];\nif (arr.filter) {\n}\n      `,\n\t\t\terrors: [ruleError(3, 5, 'alwaysTruthy')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction truthy() {\n  return [];\n}\nfunction falsy() {}\n[1, 3, 5].filter(truthy);\n[1, 2, 3].find(falsy);\n      `,\n\t\t\terrors: [ruleError(6, 18, 'alwaysTruthyFunc'), ruleError(7, 16, 'alwaysFalsyFunc')]\n\t\t},\n\t\t// Supports generics\n\t\t// TODO: fix this\n\t\t//     {\n\t\t//       code: `\n\t\t// const isTruthy = <T>(t: T) => T;\n\t\t// // Valid: numbers can be truthy or falsy (0).\n\t\t// [0,1,2,3].filter(isTruthy);\n\t\t// // Invalid: arrays are always falsy.\n\t\t// [[1,2], [3,4]].filter(isTruthy);\n\t\t// `,\n\t\t//       errors: [ruleError(6, 23, 'alwaysTruthyFunc')],\n\t\t//     },\n\t\t{\n\t\t\tcode: `\nwhile (true) {}\nfor (; true; ) {}\ndo {} while (true);\n      `,\n\t\t\toptions: [{ allowConstantLoopConditions: false }],\n\t\t\terrors: [\n\t\t\t\truleError(2, 8, 'alwaysTruthy'),\n\t\t\t\truleError(3, 8, 'alwaysTruthy'),\n\t\t\t\truleError(4, 14, 'alwaysTruthy')\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nlet foo = { bar: true };\nfoo?.bar;\nfoo ?. bar;\nfoo ?.\n  bar;\nfoo\n  ?. bar;\n      `,\n\t\t\toutput: `\nlet foo = { bar: true };\nfoo.bar;\nfoo . bar;\nfoo .\n  bar;\nfoo\n  . bar;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tcolumn: 4,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tendColumn: 6\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tcolumn: 5,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tendColumn: 7\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tcolumn: 5,\n\t\t\t\t\tendLine: 5,\n\t\t\t\t\tendColumn: 7\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 8,\n\t\t\t\t\tcolumn: 3,\n\t\t\t\t\tendLine: 8,\n\t\t\t\t\tendColumn: 5\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nlet foo = () => {};\nfoo?.();\nfoo ?. ();\nfoo ?.\n  ();\nfoo\n  ?. ();\n      `,\n\t\t\toutput: `\nlet foo = () => {};\nfoo();\nfoo  ();\nfoo${' '}\n  ();\nfoo\n   ();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tcolumn: 4,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tendColumn: 6\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tcolumn: 5,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tendColumn: 7\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tcolumn: 5,\n\t\t\t\t\tendLine: 5,\n\t\t\t\t\tendColumn: 7\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 8,\n\t\t\t\t\tcolumn: 3,\n\t\t\t\t\tendLine: 8,\n\t\t\t\t\tendColumn: 5\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nlet foo = () => {};\nfoo?.(bar);\nfoo ?. (bar);\nfoo ?.\n  (bar);\nfoo\n  ?. (bar);\n      `,\n\t\t\toutput: `\nlet foo = () => {};\nfoo(bar);\nfoo  (bar);\nfoo${' '}\n  (bar);\nfoo\n   (bar);\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tcolumn: 4,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tendColumn: 6\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tcolumn: 5,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tendColumn: 7\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tcolumn: 5,\n\t\t\t\t\tendLine: 5,\n\t\t\t\t\tendColumn: 7\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 8,\n\t\t\t\t\tcolumn: 3,\n\t\t\t\t\tendLine: 8,\n\t\t\t\t\tendColumn: 5\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: 'const foo = [1, 2, 3]?.[0];',\n\t\t\toutput: 'const foo = [1, 2, 3][0];',\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 1,\n\t\t\t\t\tendLine: 1,\n\t\t\t\t\tcolumn: 22,\n\t\t\t\t\tendColumn: 24\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const x: { a?: { b: string } };\nx?.a?.b;\n      `,\n\t\t\toutput: `\ndeclare const x: { a?: { b: string } };\nx.a?.b;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 2,\n\t\t\t\t\tendColumn: 4\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const x: { a: { b?: { c: string } } };\nx.a?.b?.c;\n      `,\n\t\t\toutput: `\ndeclare const x: { a: { b?: { c: string } } };\nx.a.b?.c;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 4,\n\t\t\t\t\tendColumn: 6\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\nlet x: { a?: string };\nx?.a;\n      `,\n\t\t\toutput: `\nlet x: { a?: string };\nx.a;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 2,\n\t\t\t\t\tendColumn: 4\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const foo: { bar: { baz: { c: string } } } | null;\nfoo?.bar?.baz;\n      `,\n\t\t\toutput: `\ndeclare const foo: { bar: { baz: { c: string } } } | null;\nfoo?.bar.baz;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 9,\n\t\t\t\t\tendColumn: 11\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const foo: { bar?: { baz: { qux: string } } } | null;\nfoo?.bar?.baz?.qux;\n      `,\n\t\t\toutput: `\ndeclare const foo: { bar?: { baz: { qux: string } } } | null;\nfoo?.bar?.baz.qux;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 14,\n\t\t\t\t\tendColumn: 16\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const foo: { bar: { baz: { qux?: () => {} } } } | null;\nfoo?.bar?.baz?.qux?.();\n      `,\n\t\t\toutput: `\ndeclare const foo: { bar: { baz: { qux?: () => {} } } } | null;\nfoo?.bar.baz.qux?.();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 9,\n\t\t\t\t\tendColumn: 11\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 14,\n\t\t\t\t\tendColumn: 16\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const foo: { bar: { baz: { qux: () => {} } } } | null;\nfoo?.bar?.baz?.qux?.();\n      `,\n\t\t\toutput: `\ndeclare const foo: { bar: { baz: { qux: () => {} } } } | null;\nfoo?.bar.baz.qux();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 9,\n\t\t\t\t\tendColumn: 11\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 14,\n\t\t\t\t\tendColumn: 16\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 19,\n\t\t\t\t\tendColumn: 21\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ntype baz = () => { qux: () => {} };\ndeclare const foo: { bar: { baz: baz } } | null;\nfoo?.bar?.baz?.().qux?.();\n      `,\n\t\t\toutput: `\ntype baz = () => { qux: () => {} };\ndeclare const foo: { bar: { baz: baz } } | null;\nfoo?.bar.baz().qux();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 9,\n\t\t\t\t\tendColumn: 11\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 14,\n\t\t\t\t\tendColumn: 16\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 22,\n\t\t\t\t\tendColumn: 24\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ntype baz = null | (() => { qux: () => {} });\ndeclare const foo: { bar: { baz: baz } } | null;\nfoo?.bar?.baz?.().qux?.();\n      `,\n\t\t\toutput: `\ntype baz = null | (() => { qux: () => {} });\ndeclare const foo: { bar: { baz: baz } } | null;\nfoo?.bar.baz?.().qux();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 9,\n\t\t\t\t\tendColumn: 11\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 22,\n\t\t\t\t\tendColumn: 24\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ntype baz = null | (() => { qux: () => {} } | null);\ndeclare const foo: { bar: { baz: baz } } | null;\nfoo?.bar?.baz?.()?.qux?.();\n      `,\n\t\t\toutput: `\ntype baz = null | (() => { qux: () => {} } | null);\ndeclare const foo: { bar: { baz: baz } } | null;\nfoo?.bar.baz?.()?.qux();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 9,\n\t\t\t\t\tendColumn: 11\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 4,\n\t\t\t\t\tendLine: 4,\n\t\t\t\t\tcolumn: 23,\n\t\t\t\t\tendColumn: 25\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ntype Foo = { baz: number };\ntype Bar = { baz: null | string | { qux: string } };\ndeclare const foo: { fooOrBar: Foo | Bar } | null;\nfoo?.fooOrBar?.baz?.qux;\n      `,\n\t\t\toutput: `\ntype Foo = { baz: number };\ntype Bar = { baz: null | string | { qux: string } };\ndeclare const foo: { fooOrBar: Foo | Bar } | null;\nfoo?.fooOrBar.baz?.qux;\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tendLine: 5,\n\t\t\t\t\tcolumn: 14,\n\t\t\t\t\tendColumn: 16\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const x: { a: { b: number } }[];\nx[0].a?.b;\n      `,\n\t\t\toutput: `\ndeclare const x: { a: { b: number } }[];\nx[0].a.b;\n      `,\n\t\t\terrors: [ruleError(3, 7, 'neverOptionalChain')]\n\t\t},\n\t\t{\n\t\t\tcode: `\ntype Foo = { [key: string]: string; foo: 'foo'; bar: 'bar' } | null;\ntype Key = 'bar' | 'foo';\ndeclare const foo: Foo;\ndeclare const key: Key;\n\nfoo?.[key]?.trim();\n      `,\n\t\t\toutput: `\ntype Foo = { [key: string]: string; foo: 'foo'; bar: 'bar' } | null;\ntype Key = 'bar' | 'foo';\ndeclare const foo: Foo;\ndeclare const key: Key;\n\nfoo?.[key].trim();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 7,\n\t\t\t\t\tendLine: 7,\n\t\t\t\t\tcolumn: 11,\n\t\t\t\t\tendColumn: 13\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ntype Foo = { [key: string]: string; foo: 'foo'; bar: 'bar' } | null;\ndeclare const foo: Foo;\nconst key = 'bar';\nfoo?.[key]?.trim();\n      `,\n\t\t\toutput: `\ntype Foo = { [key: string]: string; foo: 'foo'; bar: 'bar' } | null;\ndeclare const foo: Foo;\nconst key = 'bar';\nfoo?.[key].trim();\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tendLine: 5,\n\t\t\t\t\tcolumn: 11,\n\t\t\t\t\tendColumn: 13\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ninterface Outer {\n  inner?: {\n    [key: string]: string | undefined;\n    bar: 'bar';\n  };\n}\n\nexport function test(outer: Outer): number | undefined {\n  const key = 'bar';\n  return outer.inner?.[key]?.charCodeAt(0);\n}\n      `,\n\t\t\toutput: `\ninterface Outer {\n  inner?: {\n    [key: string]: string | undefined;\n    bar: 'bar';\n  };\n}\n\nexport function test(outer: Outer): number | undefined {\n  const key = 'bar';\n  return outer.inner?.[key].charCodeAt(0);\n}\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 11,\n\t\t\t\t\tendLine: 11,\n\t\t\t\t\tcolumn: 28,\n\t\t\t\t\tendColumn: 30\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tcode: `\ninterface Outer {\n  inner?: {\n    [key: string]: string | undefined;\n    bar: 'bar';\n  };\n}\ntype Bar = 'bar';\n\nfunction Foo(outer: Outer, key: Bar): number | undefined {\n  return outer.inner?.[key]?.charCodeAt(0);\n}\n      `,\n\t\t\toutput: `\ninterface Outer {\n  inner?: {\n    [key: string]: string | undefined;\n    bar: 'bar';\n  };\n}\ntype Bar = 'bar';\n\nfunction Foo(outer: Outer, key: Bar): number | undefined {\n  return outer.inner?.[key].charCodeAt(0);\n}\n      `,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'neverOptionalChain',\n\t\t\t\t\tline: 11,\n\t\t\t\t\tendLine: 11,\n\t\t\t\t\tcolumn: 28,\n\t\t\t\t\tendColumn: 30\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t// https://github.com/typescript-eslint/typescript-eslint/issues/2384\n\t\t{\n\t\t\tcode: `\nfunction test(testVal?: true) {\n  if (testVal ?? true) {\n    console.log('test');\n  }\n}\n      `,\n\t\t\toutput: null,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'alwaysTruthy',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tendLine: 3,\n\t\t\t\t\tcolumn: 7,\n\t\t\t\t\tendColumn: 22\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t// https://github.com/typescript-eslint/typescript-eslint/issues/2255\n\t\t{\n\t\t\tcode: `\nconst a = null;\nif (!a) {\n}\n      `,\n\t\t\terrors: [ruleError(3, 6, 'alwaysTruthy')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nconst a = true;\nif (!a) {\n}\n      `,\n\t\t\terrors: [ruleError(3, 6, 'alwaysFalsy')]\n\t\t},\n\t\t{\n\t\t\tcode: `\nfunction sayHi(): void {\n  console.log('Hi!');\n}\n\nlet speech: never = sayHi();\nif (!speech) {\n}\n      `,\n\t\t\terrors: [ruleError(7, 6, 'never')]\n\t\t},\n\t\t{\n\t\t\tcode: `\ndeclare const x: string[] | null;\nif (x) {\n}\n      `,\n\t\t\tlanguageOptions: {\n\t\t\t\tparserOptions: {\n\t\t\t\t\ttsconfigRootDir: path.join(rootPath, 'unstrict')\n\t\t\t\t}\n\t\t\t},\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noStrictNullCheck',\n\t\t\t\t\tline: 0,\n\t\t\t\t\tcolumn: 1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'alwaysTruthy',\n\t\t\t\t\tline: 3,\n\t\t\t\t\tcolumn: 5\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t])\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/block-lang.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/block-lang.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('block-lang', rule as any, loadTestCases('block-lang'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/button-has-type.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/button-has-type.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('button-has-type', rule as any, loadTestCases('button-has-type'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts",
    "content": "import assert from 'assert';\nimport plugin from '../../../src/index.js';\nimport { loadESLint, type ESLint as ESLintClass } from 'eslint';\nimport * as svelteParser from 'svelte-eslint-parser';\n\n// -----------------------------------------------------------------------------\n// Tests\n// -----------------------------------------------------------------------------\n\ndescribe('comment-directive', () => {\n\tlet ESLint: typeof ESLintClass;\n\tlet linter: InstanceType<typeof ESLintClass>;\n\n\tbefore(async () => {\n\t\tESLint = await loadESLint({ useFlatConfig: true });\n\t\tlinter = new ESLint({\n\t\t\tbaseConfig: {\n\t\t\t\tlanguageOptions: {\n\t\t\t\t\tparser: svelteParser,\n\t\t\t\t\tecmaVersion:\"latest\"\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\tsvelte: plugin\n\t\t\t\t},\n\t\t\t\trules: {\n\t\t\t\t\t'no-undef': 'error',\n\t\t\t\t\t'space-infix-ops': 'error',\n\t\t\t\t\t'svelte/no-at-html-tags': 'error',\n\t\t\t\t\t'svelte/comment-directive': 'error'\n\t\t\t\t},\n\t\t\t\tprocessor: 'svelte/svelte',\n\t\t\t\tfiles: ['**']\n\t\t\t},\n\t\t\toverrideConfigFile: true\n\t\t});\n\t});\n\n\tdescribe('eslint-disable/eslint-enable', () => {\n\t\tit('disable all rules if <!-- eslint-disable -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\n\t\tit('disable specific rules if <!-- eslint-disable space-infix-ops -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable space-infix-ops -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 3);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t});\n\n\t\tit('enable all rules if <!-- eslint-enable -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable -->\n      {@html a+b}\n      <!-- eslint-enable -->\n      {@html a+b}\n       `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 4);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[0].line, 5);\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].line, 5);\n\t\t\tassert.strictEqual(messages[2].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[2].line, 5);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[3].line, 5);\n\t\t});\n\n\t\tit('enable specific rules if <!-- eslint-enable space-infix-ops -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable svelte/no-at-html-tags, space-infix-ops -->\n      {@html a+b}\n      <!-- eslint-enable space-infix-ops -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 5);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[0].line, 3);\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].line, 3);\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].line, 5);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[3].line, 5);\n\t\t\tassert.strictEqual(messages[4].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[4].line, 5);\n\t\t});\n\n\t\tit('should not affect to the code in <script>.', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable -->\n      {@html a+b}\n      <script>\n        a;\n      </script>\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 1);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'no-undef');\n\t\t});\n\n\t\tit('disable specific rules if <!-- eslint-disable space-infix-ops ,, , svelte/no-at-html-tags -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable space-infix-ops ,, , svelte/no-at-html-tags -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 2);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t});\n\t});\n\n\tdescribe('eslint-disable-line', () => {\n\t\tit('disable all rules if <!-- eslint-disable-line -->', async () => {\n\t\t\tconst code = `\n      {@html a+b} <!-- eslint-disable-line -->\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\n\t\tit('disable specific rules if <!-- eslint-disable-line space-infix-ops -->', async () => {\n\t\t\tconst code = `\n      {@html a+b} <!-- eslint-disable-line space-infix-ops -->\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 3);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t});\n\n\t\tit(\"don't disable rules if <!-- eslint-disable-line --> is on another line\", async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-line -->\n      {@html a+b}\n      <!-- eslint-disable-line -->\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 4);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[3].ruleId, 'no-undef');\n\t\t});\n\t});\n\n\tdescribe('eslint-disable-next-line', () => {\n\t\tit('disable all rules if <!-- eslint-disable-next-line -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-next-line -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\n\t\tit('disable specific rules if <!-- eslint-disable-next-line space-infix-ops -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-next-line space-infix-ops -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 3);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t});\n\n\t\tit(\"don't disable rules if <!-- eslint-disable-next-line --> is on another line\", async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-next-line -->\n\n      {@html a+b} <!-- eslint-disable-next-line -->\n      <!-- eslint-disable-next-line -->\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 4);\n\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[0].line, 4);\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].line, 4);\n\t\t\tassert.strictEqual(messages[2].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[2].line, 4);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[3].line, 4);\n\t\t});\n\n\t\tit('should affect only the next line', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-next-line svelte/no-at-html-tags, space-infix-ops -->\n      {@html a+b}\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 6);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[0].line, 3);\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].line, 3);\n\n\t\t\tassert.strictEqual(messages[2].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[2].line, 4);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[3].line, 4);\n\t\t\tassert.strictEqual(messages[4].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[4].line, 4);\n\t\t\tassert.strictEqual(messages[5].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[5].line, 4);\n\t\t});\n\t});\n\n\tdescribe('allow description', () => {\n\t\tit('disable all rules if <!-- eslint-disable -- description -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable -- description -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\n\t\tit('enable all rules if <!-- eslint-enable -- description -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable -- description -->\n      {@html a+b}\n      <!-- eslint-enable -- description -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 4);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[0].line, 5);\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].line, 5);\n\t\t\tassert.strictEqual(messages[2].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[2].line, 5);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[3].line, 5);\n\t\t});\n\n\t\tit('enable specific rules if <!-- eslint-enable space-infix-ops -- description -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable svelte/no-at-html-tags, space-infix-ops -- description -->\n      {@html a+b}\n      <!-- eslint-enable space-infix-ops -- description -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 5);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[0].line, 3);\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[1].line, 3);\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].line, 5);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'space-infix-ops');\n\t\t\tassert.strictEqual(messages[3].line, 5);\n\t\t\tassert.strictEqual(messages[4].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[4].line, 5);\n\t\t});\n\n\t\tit('disable all rules if <!-- eslint-disable-line -- description -->', async () => {\n\t\t\tconst code = `\n      {@html a+b} <!-- eslint-disable-line -- description -->\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\n\t\tit('disable specific rules if <!-- eslint-disable-line space-infix-ops -- description -->', async () => {\n\t\t\tconst code = `\n      {@html a+b} <!-- eslint-disable-line space-infix-ops -- description -->\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 3);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t});\n\n\t\tit('disable all rules if <!-- eslint-disable-next-line -- description -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-next-line -- description -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\n\t\tit('disable specific rules if <!-- eslint-disable-next-line space-infix-ops -->', async () => {\n\t\t\tconst code = `\n      <!-- eslint-disable-next-line space-infix-ops -- description -->\n      {@html a+b}\n      `;\n\t\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\t\tconst messages = result[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 3);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[1].ruleId, 'no-undef');\n\t\t\tassert.strictEqual(messages[2].ruleId, 'no-undef');\n\t\t});\n\t});\n\n\tdescribe('reportUnusedDisableDirectives', () => {\n\t\tbefore(() => {\n\t\t\tlinter = new ESLint({\n\t\t\t\tbaseConfig: {\n\t\t\t\t\tlanguageOptions: {\n\t\t\t\t\t\tparser: svelteParser,\n\t\t\t\t\t\tecmaVersion:\"latest\"\n\t\t\t\t\t},\n\t\t\t\t\tplugins: {\n\t\t\t\t\t\tsvelte: plugin\n\t\t\t\t\t},\n\t\t\t\t\trules: {\n\t\t\t\t\t\t'no-unused-vars': 'error',\n\t\t\t\t\t\t'svelte/comment-directive': ['error', { reportUnusedDisableDirectives: true }],\n\t\t\t\t\t\t'svelte/no-at-html-tags': 'error',\n\t\t\t\t\t\t'svelte/no-at-debug-tags': 'error'\n\t\t\t\t\t},\n\t\t\t\t\tfiles: ['**'],\n\t\t\t\t\tprocessor: 'svelte/svelte'\n\t\t\t\t},\n\t\t\t\toverrideConfigFile: true\n\t\t\t});\n\t\t});\n\n\t\tit('report unused <!-- eslint-disable -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable -->\n        <div>Hello</div>\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 1);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[0].message,\n\t\t\t\t'Unused eslint-disable directive (no problems were reported).'\n\t\t\t);\n\t\t\tassert.strictEqual(messages[0].line, 2);\n\t\t\tassert.strictEqual(messages[0].column, 9);\n\t\t});\n\n\t\tit('dont report unused <!-- eslint-disable -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable -->\n        <div>{@html foo}{@debug foo}</div>\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 0);\n\t\t});\n\t\tit('disable and report unused <!-- eslint-disable -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable -->\n        <div>{@html foo}{@debug foo}</div>\n        <!-- eslint-enable -->\n        <!-- eslint-disable -->\n        <div>Hello</div>\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 1);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[0].message,\n\t\t\t\t'Unused eslint-disable directive (no problems were reported).'\n\t\t\t);\n\t\t\tassert.strictEqual(messages[0].line, 5);\n\t\t\tassert.strictEqual(messages[0].column, 9);\n\t\t});\n\n\t\tit('report unused <!-- eslint-disable svelte/no-at-debug-tags, svelte/no-at-html-tags -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable svelte/no-at-debug-tags, svelte/no-at-html-tags -->\n        <div>Hello</div>\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 2);\n\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[0].message,\n\t\t\t\t\"Unused eslint-disable directive (no problems were reported from 'svelte/no-at-debug-tags').\"\n\t\t\t);\n\t\t\tassert.strictEqual(messages[0].line, 2);\n\t\t\tassert.strictEqual(messages[0].column, 29);\n\n\t\t\tassert.strictEqual(messages[1].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[1].message,\n\t\t\t\t\"Unused eslint-disable directive (no problems were reported from 'svelte/no-at-html-tags').\"\n\t\t\t);\n\t\t\tassert.strictEqual(messages[1].line, 2);\n\t\t\tassert.strictEqual(messages[1].column, 54);\n\t\t});\n\n\t\tit('report unused <!-- eslint-disable-next-line svelte/no-at-debug-tags, svelte/no-at-html-tags -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable-next-line svelte/no-at-debug-tags, svelte/no-at-html-tags -->\n        <div>Hello</div>\n        <div>{@html foo}{@debug foo}</div>\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 4);\n\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[0].message,\n\t\t\t\t\"Unused eslint-disable-next-line directive (no problems were reported from 'svelte/no-at-debug-tags').\"\n\t\t\t);\n\t\t\tassert.strictEqual(messages[0].line, 2);\n\t\t\tassert.strictEqual(messages[0].column, 39);\n\n\t\t\tassert.strictEqual(messages[1].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[1].message,\n\t\t\t\t\"Unused eslint-disable-next-line directive (no problems were reported from 'svelte/no-at-html-tags').\"\n\t\t\t);\n\t\t\tassert.strictEqual(messages[1].line, 2);\n\t\t\tassert.strictEqual(messages[1].column, 64);\n\n\t\t\tassert.strictEqual(messages[2].ruleId, 'svelte/no-at-html-tags');\n\t\t\tassert.strictEqual(messages[2].line, 4);\n\t\t\tassert.strictEqual(messages[3].ruleId, 'svelte/no-at-debug-tags');\n\t\t\tassert.strictEqual(messages[3].line, 4);\n\t\t});\n\n\t\tit('dont report used <!-- eslint-disable-next-line svelte/no-at-debug-tags, svelte/no-at-html-tags -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable-next-line svelte/no-at-debug-tags, svelte/no-at-html-tags -->\n        <div>{@html foo}{@debug foo}</div>\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.deepStrictEqual(messages, []);\n\t\t});\n\n\t\tit('dont report used, with duplicate eslint-disable', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable -->\n        <!-- eslint-disable-next-line svelte/no-at-debug-tags, svelte/no-at-html-tags -->\n        <div>{@html foo}</div><!-- eslint-disable-line svelte/no-at-debug-tags, svelte/no-at-html-tags -->\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.deepStrictEqual(messages, []);\n\t\t});\n\n\t\tit('report unused <!-- eslint-enable -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-enable -->\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 1);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[0].message,\n\t\t\t\t'Unused eslint-enable directive (reporting is not suppressed).'\n\t\t\t);\n\t\t\tassert.strictEqual(messages[0].line, 2);\n\t\t\tassert.strictEqual(messages[0].column, 9);\n\t\t});\n\t\tit('report unused <!-- eslint-enable svelte/no-at-debug-tags -->', async () => {\n\t\t\tconst code = `\n        <!-- eslint-disable svelte/no-at-html-tags -->\n        <div>{@html foo}</div>\n        <!-- eslint-enable svelte/no-at-debug-tags -->\n      `;\n\t\t\tconst messages = (await linter.lintText(code, { filePath: 'test.svelte' }))[0].messages;\n\n\t\t\tassert.strictEqual(messages.length, 1);\n\t\t\tassert.strictEqual(messages[0].ruleId, 'svelte/comment-directive');\n\t\t\tassert.strictEqual(\n\t\t\t\tmessages[0].message,\n\t\t\t\t\"Unused eslint-enable directive (reporting from 'svelte/no-at-debug-tags' is not suppressed).\"\n\t\t\t);\n\t\t\tassert.strictEqual(messages[0].line, 4);\n\t\t\tassert.strictEqual(messages[0].column, 28);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/consistent-selector-style.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat';\nimport rule from '../../../src/rules/consistent-selector-style';\nimport { loadTestCases } from '../../utils/utils';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('consistent-selector-style', rule as any, loadTestCases('consistent-selector-style'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/derived-has-same-inputs-outputs.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/derived-has-same-inputs-outputs.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'derived-has-same-inputs-outputs',\n\trule as any,\n\tloadTestCases('derived-has-same-inputs-outputs')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/experimental-require-slot-types.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/experimental-require-slot-types.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'experimental-require-slot-types',\n\trule as any,\n\tloadTestCases('experimental-require-slot-types')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/experimental-require-strict-events.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/experimental-require-strict-events.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'experimental-require-strict-events',\n\trule as any,\n\tloadTestCases('experimental-require-strict-events')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/first-attribute-linebreak.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/first-attribute-linebreak.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('first-attribute-linebreak', rule as any, loadTestCases('first-attribute-linebreak'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-new-line.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/html-closing-bracket-new-line.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'html-closing-bracket-new-line',\n\trule as any,\n\tloadTestCases('html-closing-bracket-new-line')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-spacing.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/html-closing-bracket-spacing.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'html-closing-bracket-spacing',\n\trule as any,\n\tloadTestCases('html-closing-bracket-spacing')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/html-quotes.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/html-quotes.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('html-quotes', rule as any, loadTestCases('html-quotes'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/html-self-closing.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/html-self-closing.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('html-self-closing', rule as any, loadTestCases('html-self-closing'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/indent.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/indent.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module',\n\t\tparserOptions: {\n\t\t\tparser: {\n\t\t\t\tts: '@typescript-eslint/parser',\n\t\t\t\tjs: 'espree'\n\t\t\t}\n\t\t}\n\t}\n});\n\ntester.run('indent', rule as any, loadTestCases('indent'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/infinite-reactive-loop.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/infinite-reactive-loop.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('infinite-reactive-loop', rule as any, loadTestCases('infinite-reactive-loop'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/max-attributes-per-line.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/max-attributes-per-line.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('max-attributes-per-line', rule as any, loadTestCases('max-attributes-per-line'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/max-lines-per-block.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/max-lines-per-block.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion: 'latest',\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('max-lines-per-block', rule as any, loadTestCases('max-lines-per-block'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/mustache-spacing.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/mustache-spacing.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('mustache-spacing', rule as any, loadTestCases('mustache-spacing'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-add-event-listener.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-add-event-listener', rule as any, loadTestCases('no-add-event-listener'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-at-debug-tags.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-at-debug-tags.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-at-debug-tags', rule as any, loadTestCases('no-at-debug-tags'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-at-html-tags.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-at-html-tags.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-at-html-tags', rule as any, loadTestCases('no-at-html-tags'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-dom-manipulating.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-dom-manipulating.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-dom-manipulating', rule as any, loadTestCases('no-dom-manipulating'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-dupe-else-if-blocks.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-dupe-else-if-blocks.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-dupe-else-if-blocks', rule as any, loadTestCases('no-dupe-else-if-blocks'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-dupe-on-directives.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-dupe-on-directives.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-dupe-on-directives', rule as any, loadTestCases('no-dupe-on-directives'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-dupe-style-properties.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-dupe-style-properties.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-dupe-style-properties', rule as any, loadTestCases('no-dupe-style-properties'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-dupe-use-directives.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-dupe-use-directives.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-dupe-use-directives', rule as any, loadTestCases('no-dupe-use-directives'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-dynamic-slot-name.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-dynamic-slot-name.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-dynamic-slot-name', rule as any, loadTestCases('no-dynamic-slot-name'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-export-load-in-svelte-module-in-kit-pages.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-export-load-in-svelte-module-in-kit-pages',\n\trule as any,\n\tloadTestCases('no-export-load-in-svelte-module-in-kit-pages')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-extra-reactive-curlies.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-extra-reactive-curlies.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-extra-reactive-curlies', rule as any, loadTestCases('no-extra-reactive-curlies'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-goto-without-base.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-goto-without-base.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-goto-without-base', rule as any, loadTestCases('no-goto-without-base'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-ignored-unsubscribe.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-ignored-unsubscribe.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-ignored-unsubscribe', rule as any, loadTestCases('no-ignored-unsubscribe'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-immutable-reactive-statements.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-immutable-reactive-statements.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-immutable-reactive-statements',\n\trule as any,\n\tloadTestCases('no-immutable-reactive-statements')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-inline-styles.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-inline-styles.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-inline-styles', rule as any, loadTestCases('no-inline-styles'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-inner-declarations.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-inner-declarations.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-inner-declarations', rule as any, loadTestCases('no-inner-declarations'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-inspect.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-inspect.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-inspect', rule as any, loadTestCases('no-inspect'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-navigation-without-base.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat';\nimport rule from '../../../src/rules/no-navigation-without-base';\nimport { loadTestCases } from '../../utils/utils';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-navigation-without-base', rule as any, loadTestCases('no-navigation-without-base'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-navigation-without-resolve.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat';\nimport rule from '../../../src/rules/no-navigation-without-resolve';\nimport { loadTestCases } from '../../utils/utils';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion: \"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-navigation-without-resolve', rule as any, loadTestCases('no-navigation-without-resolve'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-not-function-handler.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-not-function-handler.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-not-function-handler', rule as any, loadTestCases('no-not-function-handler'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-object-in-text-mustaches.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-object-in-text-mustaches.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-object-in-text-mustaches',\n\trule as any,\n\tloadTestCases('no-object-in-text-mustaches')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-raw-special-elements.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-raw-special-elements.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-raw-special-elements',\n\trule as any,\n\tloadTestCases('no-raw-special-elements')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-reactive-functions.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-reactive-functions.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-reactive-functions', rule as any, loadTestCases('no-reactive-functions'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-reactive-literals.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-reactive-literals.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-reactive-literals', rule as any, loadTestCases('no-reactive-literals'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-reactive-reassign.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-reactive-reassign.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-reactive-reassign', rule as any, loadTestCases('no-reactive-reassign'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-restricted-html-elements.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-restricted-html-elements.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-restricted-html-elements',\n\trule as any,\n\tloadTestCases('no-restricted-html-elements')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-shorthand-style-property-overrides.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-shorthand-style-property-overrides.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-shorthand-style-property-overrides',\n\trule as any,\n\tloadTestCases('no-shorthand-style-property-overrides')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-spaces-around-equal-signs-in-attribute.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-spaces-around-equal-signs-in-attribute.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-spaces-around-equal-signs-in-attribute',\n\trule as any,\n\tloadTestCases('no-spaces-around-equal-signs-in-attribute')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-store-async.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-store-async.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-store-async', rule as any, loadTestCases('no-store-async'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-svelte-internal.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-svelte-internal.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-svelte-internal', rule as any, loadTestCases('no-svelte-internal'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-target-blank.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-target-blank.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-target-blank', rule as any, loadTestCases('no-target-blank'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-top-level-browser-globals.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-top-level-browser-globals.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion: 'latest',\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-top-level-browser-globals',\n\trule as any,\n\tloadTestCases('no-top-level-browser-globals')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-trailing-spaces.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-trailing-spaces.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-trailing-spaces', rule as any, loadTestCases('no-trailing-spaces'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-unknown-style-directive-property.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-unknown-style-directive-property.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'no-unknown-style-directive-property',\n\trule as any,\n\tloadTestCases('no-unknown-style-directive-property')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-unnecessary-state-wrap.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-unnecessary-state-wrap.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-unnecessary-state-wrap', rule as any, loadTestCases('no-unnecessary-state-wrap'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-unused-class-name.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-unused-class-name.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-unused-class-name', rule as any, loadTestCases('no-unused-class-name'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-unused-props.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-unused-props.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-unused-props', rule as any, loadTestCases('no-unused-props'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-unused-svelte-ignore.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-unused-svelte-ignore.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-unused-svelte-ignore', rule as any, loadTestCases('no-unused-svelte-ignore'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-useless-children-snippet.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat';\nimport rule from '../../../src/rules/no-useless-children-snippet';\nimport { loadTestCases } from '../../utils/utils';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-useless-children-snippet', rule as any, loadTestCases('no-useless-children-snippet'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/no-useless-mustaches.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/no-useless-mustaches.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('no-useless-mustaches', rule as any, loadTestCases('no-useless-mustaches'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/prefer-class-directive.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/prefer-class-directive.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('prefer-class-directive', rule as any, loadTestCases('prefer-class-directive'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/prefer-const.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat';\nimport rule from '../../../src/rules/prefer-const';\nimport { loadTestCases } from '../../utils/utils';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t},\n});\n\ntester.run('prefer-const', rule as any, loadTestCases('prefer-const'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/prefer-destructured-store-props.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/prefer-destructured-store-props.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'prefer-destructured-store-props',\n\trule as any,\n\tloadTestCases('prefer-destructured-store-props')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/prefer-style-directive.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/prefer-style-directive.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('prefer-style-directive', rule as any, loadTestCases('prefer-style-directive'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/prefer-svelte-reactivity.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/prefer-svelte-reactivity.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('prefer-svelte-reactivity', rule as any, loadTestCases('prefer-svelte-reactivity'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/prefer-writable-derived.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/prefer-writable-derived.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('prefer-writable-derived', rule as any, loadTestCases('prefer-writable-derived'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-each-key.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-each-key.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('require-each-key', rule as any, loadTestCases('require-each-key'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-event-dispatcher-types.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-event-dispatcher-types.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'require-event-dispatcher-types',\n\trule as any,\n\tloadTestCases('require-event-dispatcher-types')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-event-prefix.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-event-prefix.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('require-event-prefix', rule as any, loadTestCases('require-event-prefix'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-optimized-style-attribute.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-optimized-style-attribute.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'require-optimized-style-attribute',\n\trule as any,\n\tloadTestCases('require-optimized-style-attribute')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-store-callbacks-use-set-param.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-store-callbacks-use-set-param.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'require-store-callbacks-use-set-param',\n\trule as any,\n\tloadTestCases('require-store-callbacks-use-set-param')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-store-reactive-access.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-store-reactive-access.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'require-store-reactive-access',\n\trule as any,\n\tloadTestCases('require-store-reactive-access')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/require-stores-init.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/require-stores-init.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('require-stores-init', rule as any, loadTestCases('require-stores-init'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/shorthand-attribute.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/shorthand-attribute.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('shorthand-attribute', rule as any, loadTestCases('shorthand-attribute'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/shorthand-directive.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/shorthand-directive.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('shorthand-directive', rule as any, loadTestCases('shorthand-directive'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/sort-attributes.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/sort-attributes.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('sort-attributes', rule as any, loadTestCases('sort-attributes'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/spaced-html-comment.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/spaced-html-comment.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('spaced-html-comment', rule as any, loadTestCases('spaced-html-comment'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/system.ts",
    "content": "/* noop */\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/valid-compile.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/valid-compile.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module',\n\t\tparserOptions: {\n\t\t\tparser: '@typescript-eslint/parser'\n\t\t}\n\t}\n});\n\ntester.run('valid-compile', rule as any, loadTestCases('valid-compile'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/valid-each-key.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/valid-each-key.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('valid-each-key', rule as any, loadTestCases('valid-each-key'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/valid-prop-names-in-kit-pages.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/valid-prop-names-in-kit-pages.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run(\n\t'valid-prop-names-in-kit-pages',\n\trule as any,\n\tloadTestCases('valid-prop-names-in-kit-pages')\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/rules/valid-style-parse.ts",
    "content": "import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '../../../src/rules/valid-style-parse.js';\nimport { loadTestCases } from '../../utils/utils.js';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('valid-style-parse', rule as any, loadTestCases('valid-style-parse'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts",
    "content": "import assert from 'assert';\nimport plugin from '../../../src/index.js';\nimport { loadESLint, type ESLint as ESLintClass } from 'eslint';\nimport * as svelteParser from 'svelte-eslint-parser';\n\ndescribe('ignore-warnings', () => {\n\tlet ESLint: typeof ESLintClass;\n\n\tbefore(async () => {\n\t\tESLint = await loadESLint({ useFlatConfig: true });\n\t});\n\n\tit('disable rules if ignoreWarnings: [ruleName]', async () => {\n\t\tconst code = `\n      {@html a+b}\n      {@debug a}\n      <script>\n        a+b;\n      </script>\n      {@html a+b}\n      {@debug a}\n      `;\n\n\t\tconst linter = new ESLint({\n\t\t\tbaseConfig: {\n\t\t\t\tfiles: ['**'],\n\t\t\t\tlanguageOptions: {\n\t\t\t\t\tparser: svelteParser,\n\t\t\t\t\tecmaVersion:\"latest\"\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\tsvelte: plugin as never\n\t\t\t\t},\n\t\t\t\trules: {\n\t\t\t\t\t'no-undef': 'error',\n\t\t\t\t\t'space-infix-ops': 'error',\n\t\t\t\t\t'svelte/no-at-html-tags': 'error',\n\t\t\t\t\t'svelte/no-at-debug-tags': 'error',\n\t\t\t\t\t'svelte/system': 'error'\n\t\t\t\t},\n\t\t\t\tsettings: {\n\t\t\t\t\tsvelte: {\n\t\t\t\t\t\tignoreWarnings: ['no-undef', 'space-infix-ops', 'svelte/no-at-debug-tags']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tprocessor: 'svelte/svelte'\n\t\t\t},\n\t\t\toverrideConfigFile: true\n\t\t});\n\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\tconst messages = result[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessages.map((m) => ({ ruleId: m.ruleId, line: m.line })),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\truleId: 'svelte/no-at-html-tags',\n\t\t\t\t\tline: 2\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'no-undef',\n\t\t\t\t\tline: 5\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'space-infix-ops',\n\t\t\t\t\tline: 5\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'no-undef',\n\t\t\t\t\tline: 5\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'svelte/no-at-html-tags',\n\t\t\t\t\tline: 7\n\t\t\t\t}\n\t\t\t]\n\t\t);\n\t});\n\tit('disable rules if ignoreWarnings: [regexp]', async () => {\n\t\tconst code = `\n      {@html a+b}\n      {@debug a}\n      <script>\n        a+b;\n      </script>\n      {@html a+b}\n      {@debug a}\n      `;\n\n\t\tconst linter = new ESLint({\n\t\t\tbaseConfig: {\n\t\t\t\tfiles: ['**'],\n\t\t\t\tlanguageOptions: {\n\t\t\t\t\tparser: svelteParser,\n\t\t\t\t\tecmaVersion:\"latest\"\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\tsvelte: plugin as never\n\t\t\t\t},\n\t\t\t\trules: {\n\t\t\t\t\t'no-undef': 'error',\n\t\t\t\t\t'space-infix-ops': 'error',\n\t\t\t\t\t'svelte/no-at-html-tags': 'error',\n\t\t\t\t\t'svelte/no-at-debug-tags': 'error',\n\t\t\t\t\t'svelte/system': 'error'\n\t\t\t\t},\n\t\t\t\tsettings: {\n\t\t\t\t\tsvelte: {\n\t\t\t\t\t\tignoreWarnings: ['no-undef', '/debug/', '/^space/']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tprocessor: 'svelte/svelte'\n\t\t\t},\n\t\t\toverrideConfigFile: true\n\t\t});\n\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\tconst messages = result[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessages.map((m) => ({ ruleId: m.ruleId, line: m.line })),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tline: 2,\n\t\t\t\t\truleId: 'svelte/no-at-html-tags'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'no-undef',\n\t\t\t\t\tline: 5\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'space-infix-ops',\n\t\t\t\t\tline: 5\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'no-undef',\n\t\t\t\t\tline: 5\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\truleId: 'svelte/no-at-html-tags',\n\t\t\t\t\tline: 7\n\t\t\t\t}\n\t\t\t]\n\t\t);\n\t});\n\n\tit('without settings', async () => {\n\t\tconst code = `\n      {@html a+b}\n      {@debug a}\n      <script>\n        a+b;\n      </script>\n      {@html a+b}\n      {@debug a}\n      `;\n\n\t\tconst linter = new ESLint({\n\t\t\tbaseConfig: {\n\t\t\t\tfiles: ['**'],\n\t\t\t\tlanguageOptions: {\n\t\t\t\t\tparser: svelteParser,\n\t\t\t\t\tecmaVersion:\"latest\"\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\tsvelte: plugin as never\n\t\t\t\t},\n\t\t\t\trules: {\n\t\t\t\t\t'svelte/system': 'error'\n\t\t\t\t},\n\t\t\t\tprocessor: 'svelte/svelte'\n\t\t\t},\n\t\t\toverrideConfigFile: true\n\t\t});\n\t\tconst result = await linter.lintText(code, { filePath: 'test.svelte' });\n\t\tconst messages = result[0].messages;\n\n\t\tassert.deepStrictEqual(\n\t\t\tmessages.map((m) => ({ ruleId: m.ruleId, line: m.line })),\n\t\t\t[]\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/utils/eslint-compat.ts",
    "content": "import * as eslint from 'eslint';\nimport * as experimental from 'eslint/use-at-your-own-risk';\n\ntype MaybeHasRuleTester = {\n\tFlatRuleTester?: typeof eslint.RuleTester;\n};\n\nexport const RuleTester =\n\t(experimental as never as MaybeHasRuleTester).FlatRuleTester ?? eslint.RuleTester;\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/utils/source-code-fixer.ts",
    "content": "/**\n * Copy from https://github.com/eslint/eslint/blob/master/lib/linter/source-code-fixer.js\n * @see https://github.com/eslint/eslint/issues/14936\n */\n/**\n * @fileoverview An object that caches and applies source code fixes.\n * @author Nicholas C. Zakas\n */\n\nimport type { Linter } from 'eslint';\n\n// ------------------------------------------------------------------------------\n// Requirements\n// ------------------------------------------------------------------------------\n\n//  const debug = require(\"debug\")(\"eslint:source-code-fixer\");\ntype Message = {\n\tfix?: Linter.LintMessage['fix'];\n};\n\ntype HasFixMessage = Message & {\n\tfix: NonNullable<Message['fix']>;\n};\n\nfunction hasFixMessage(m: Message): m is HasFixMessage {\n\treturn Boolean(m.fix);\n}\n// ------------------------------------------------------------------------------\n// Helpers\n// ------------------------------------------------------------------------------\n\nconst BOM = '\\uFEFF';\n\n/**\n * Compares items in a messages array by range.\n * @param {Message} a The first message.\n * @param {Message} b The second message.\n * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal.\n * @private\n */\nfunction compareMessagesByFixRange(a: HasFixMessage, b: HasFixMessage) {\n\treturn a.fix.range[0] - b.fix.range[0] || a.fix.range[1] - b.fix.range[1];\n}\n\n/**\n * Compares items in a messages array by line and column.\n * @param {Message} a The first message.\n * @param {Message} b The second message.\n * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal.\n * @private\n */\nfunction compareMessagesByLocation(a: any, b: any) {\n\treturn a.line - b.line || a.column - b.column;\n}\n\n// ------------------------------------------------------------------------------\n// Public Interface\n// ------------------------------------------------------------------------------\n\n/**\n * Applies the fixes specified by the messages to the given text. Tries to be\n * smart about the fixes and won't apply fixes over the same area in the text.\n * @param {string} sourceText The text to apply the changes to.\n * @param {Message[]} messages The array of messages reported by ESLint.\n * @param {boolean|Function} [shouldFix=true] Determines whether each message should be fixed\n * @returns {Object} An object containing the fixed text and any unfixed messages.\n */\nexport function applyFixes<M extends Message>(\n\tsourceText: string,\n\tmessages: M[],\n\tshouldFix: boolean | ((m: M) => boolean) = true\n): {\n\tfixed: boolean;\n\tmessages: M[];\n\toutput: string;\n} {\n\t//  debug(\"Applying fixes\");\n\n\tif (shouldFix === false) {\n\t\t//  debug(\"shouldFix parameter was false, not attempting fixes\");\n\t\treturn {\n\t\t\tfixed: false,\n\t\t\tmessages,\n\t\t\toutput: sourceText\n\t\t};\n\t}\n\n\t// clone the array\n\tconst remainingMessages: M[] = [];\n\tconst fixes: (HasFixMessage & M)[] = [];\n\tconst bom = sourceText.startsWith(BOM) ? BOM : '';\n\tconst text = bom ? sourceText.slice(1) : sourceText;\n\tlet lastPos = Number.NEGATIVE_INFINITY;\n\tlet output = bom;\n\n\t/**\n\t * Try to use the 'fix' from a problem.\n\t * @param   {Message} problem The message object to apply fixes from\n\t * @returns {boolean}         Whether fix was successfully applied\n\t */\n\tfunction attemptFix(problem: HasFixMessage) {\n\t\tconst fix = problem.fix;\n\t\tconst start = fix.range[0];\n\t\tconst end = fix.range[1];\n\n\t\t// Remain it as a problem if it's overlapped or it's a negative range\n\t\tif (lastPos >= start || start > end) {\n\t\t\tremainingMessages.push(problem as M);\n\t\t\treturn false;\n\t\t}\n\n\t\t// Remove BOM.\n\t\tif ((start < 0 && end >= 0) || (start === 0 && fix.text.startsWith(BOM))) {\n\t\t\toutput = '';\n\t\t}\n\n\t\t// Make output to this fix.\n\t\toutput += text.slice(Math.max(0, lastPos), Math.max(0, start));\n\t\toutput += fix.text;\n\t\tlastPos = end;\n\t\treturn true;\n\t}\n\n\tmessages.forEach((problem) => {\n\t\tif (hasFixMessage(problem)) {\n\t\t\tfixes.push(problem);\n\t\t} else {\n\t\t\tremainingMessages.push(problem);\n\t\t}\n\t});\n\n\tif (fixes.length) {\n\t\t//  debug(\"Found fixes to apply\");\n\t\tlet fixesWereApplied = false;\n\n\t\tfor (const problem of fixes.sort(compareMessagesByFixRange)) {\n\t\t\tif (typeof shouldFix !== 'function' || shouldFix(problem)) {\n\t\t\t\tattemptFix(problem);\n\n\t\t\t\t// The only time attemptFix will fail is if a previous fix was\n\t\t\t\t// applied which conflicts with it.  So we can mark this as true.\n\t\t\t\tfixesWereApplied = true;\n\t\t\t} else {\n\t\t\t\tremainingMessages.push(problem);\n\t\t\t}\n\t\t}\n\t\toutput += text.slice(Math.max(0, lastPos));\n\n\t\treturn {\n\t\t\tfixed: fixesWereApplied,\n\t\t\tmessages: remainingMessages.sort(compareMessagesByLocation),\n\t\t\toutput\n\t\t};\n\t}\n\n\t//  debug(\"No fixes to apply\");\n\treturn {\n\t\tfixed: false,\n\t\tmessages,\n\t\toutput: bom + text\n\t};\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tests/utils/utils.ts",
    "content": "import fs from 'fs';\nimport path from 'path';\nimport type { RuleTester } from 'eslint';\nimport type { Linter as LinterType } from 'eslint';\nimport plugin from '../../src/index.js';\nimport { applyFixes } from './source-code-fixer.js';\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\nimport semver from 'semver';\nimport { writeAndFormat } from '../../tools/lib/write.js';\nimport { Linter } from 'eslint';\nimport * as svelteParser from 'svelte-eslint-parser';\nimport * as typescriptParser from '@typescript-eslint/parser';\nimport Module from 'module';\nimport globals from 'globals';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(new URL(import.meta.url)));\nconst require = Module.createRequire(import.meta.url);\n\n/**\n * Prevents leading spaces in a multiline template literal from appearing in the resulting string\n */\nexport function unIndent(strings: readonly string[]): string {\n\tconst templateValue = strings[0];\n\tconst lines = templateValue.split('\\n');\n\tconst minLineIndent = getMinIndent(lines);\n\n\treturn lines.map((line) => line.slice(minLineIndent)).join('\\n');\n}\n\n/**\n * for `code` and `output`\n */\nexport function unIndentCodeAndOutput([code]: readonly string[]): (args: readonly string[]) => {\n\tcode: string;\n\toutput: string;\n} {\n\tconst codeLines = code.split('\\n');\n\tconst codeMinLineIndent = getMinIndent(codeLines);\n\n\treturn ([output]: readonly string[]) => {\n\t\tconst outputLines = output.split('\\n');\n\t\tconst minLineIndent = Math.min(getMinIndent(outputLines), codeMinLineIndent);\n\n\t\treturn {\n\t\t\tcode: codeLines.map((line) => line.slice(minLineIndent)).join('\\n'),\n\t\t\toutput: outputLines.map((line) => line.slice(minLineIndent)).join('\\n')\n\t\t};\n\t};\n}\n\n/**\n * Get number of minimum indent\n */\nfunction getMinIndent(lines: string[]) {\n\tconst lineIndents = lines\n\t\t.filter((line) => line.trim())\n\t\t.map((line) => / */u.exec(line)![0].length);\n\treturn Math.min(...lineIndents);\n}\n\nexport const FIXTURES_ROOT = path.resolve(__dirname, `../fixtures/`);\nexport const RULES_PROJECT = path.resolve(FIXTURES_ROOT, './rules/tsconfig.json');\n\n/**\n * Get the rule fixtures root directory\n */\nexport function getRuleFixturesRoot(ruleName: string): string {\n\treturn path.resolve(FIXTURES_ROOT, `./rules/${ruleName}`);\n}\n\nfunction fileNameSuffix(fileName: string): string {\n\treturn fileName.match(/\\.svelte\\.(?:j|t)s$/u)\n\t\t? fileName.slice(fileName.length - 10)\n\t\t: path.extname(fileName);\n}\n\nfunction isSvelteFile(fileName: string): boolean {\n\treturn Boolean(fileName.match(/\\.svelte(?:\\.(?:j|t)s)?$/u));\n}\n\n/**\n * Load test cases\n */\nexport function loadTestCases(\n\truleName: string,\n\toptions?: {\n\t\tadditionals?: {\n\t\t\tvalid?: (RuleTester.ValidTestCase | string)[];\n\t\t\tinvalid?: RuleTester.InvalidTestCase[];\n\t\t};\n\t\tfilter?: (file: string) => boolean;\n\t}\n): {\n\tvalid: RuleTester.ValidTestCase[];\n\tinvalid: RuleTester.InvalidTestCase[];\n} {\n\tconst rootDir = getRuleFixturesRoot(ruleName);\n\tconst validFixtureRoot = path.resolve(rootDir, `./valid/`);\n\tconst invalidFixtureRoot = path.resolve(rootDir, `./invalid/`);\n\n\tconst fileNameFilter = options?.filter ?? (() => true);\n\n\tfunction filter(inputFile: string) {\n\t\tif (!fileNameFilter(inputFile)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst requirements = getRequirements(inputFile);\n\t\tif (\n\t\t\tObject.entries(requirements).some(([pkgName, pkgVersion]) => {\n\t\t\t\tif (pkgName === 'FIXME') return false; // Comments\n\t\t\t\tconst pkg =\n\t\t\t\t\tpkgName === 'node' ? { version: process.version } : require(`${pkgName}/package.json`);\n\t\t\t\treturn !semver.satisfies(pkg.version, pkgVersion);\n\t\t\t})\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst valid = listupInput(validFixtureRoot)\n\t\t.filter(filter)\n\t\t.map((inputFile) => getConfig(ruleName, inputFile));\n\n\tconst fixable = plugin.rules[ruleName].meta?.fixable != null;\n\n\tconst invalid = listupInput(invalidFixtureRoot)\n\t\t.filter(filter)\n\t\t.map((inputFile) => {\n\t\t\tconst config = getConfig(ruleName, inputFile);\n\t\t\tconst errorFile = inputFile.replace(/(input|\\+.+)(?:\\.[a-z]+)+$/u, 'errors.yaml');\n\t\t\tconst outputSuffix = fileNameSuffix(inputFile);\n\t\t\tconst outputFile = inputFile.replace(\n\t\t\t\t/(input|\\+.+)(?:\\.[a-z]+)+$/u,\n\t\t\t\t`output.${outputSuffix.slice(1)}`\n\t\t\t);\n\n\t\t\tif (!fs.existsSync(errorFile)) {\n\t\t\t\twriteFixtures(ruleName, inputFile, outputFile);\n\t\t\t} else if (\n\t\t\t\t// eslint-disable-next-line no-process-env -- tool\n\t\t\t\tprocess.env.UPDATE_FIXTURES\n\t\t\t) {\n\t\t\t\twriteFixtures(ruleName, inputFile, outputFile, { force: true });\n\t\t\t}\n\t\t\tconst errors = fs.readFileSync(errorFile, 'utf8');\n\t\t\tconfig.errors = parseYaml(errors);\n\t\t\tfor (const error of config.errors) {\n\t\t\t\tif (error.suggestions) {\n\t\t\t\t\terror.suggestions = error.suggestions?.map((s: any) => ({\n\t\t\t\t\t\toutput: s.output,\n\t\t\t\t\t\tdesc: s.desc\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fixable) {\n\t\t\t\tlet output;\n\t\t\t\ttry {\n\t\t\t\t\toutput = fs.readFileSync(outputFile, 'utf8');\n\t\t\t\t} catch (_e) {\n\t\t\t\t\twriteFixtures(ruleName, inputFile, outputFile);\n\t\t\t\t\toutput = fs.readFileSync(outputFile, 'utf8');\n\t\t\t\t}\n\t\t\t\tconfig.output = output === config.code ? null : output;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\tif (options?.additionals) {\n\t\tif (options.additionals.valid) {\n\t\t\tvalid.push(...options.additionals.valid);\n\t\t}\n\t\tif (options.additionals.invalid) {\n\t\t\tinvalid.push(...options.additionals.invalid);\n\t\t}\n\t}\n\tfor (const test of valid) {\n\t\tif (!test.code) {\n\t\t\tthrow new Error(`Empty code: ${test.filename}`);\n\t\t}\n\t}\n\tfor (const test of invalid) {\n\t\tif (!test.code) {\n\t\t\tthrow new Error(`Empty code: ${test.filename}`);\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n\nfunction listupInput(rootDir: string) {\n\treturn [...itrListupInput(rootDir)];\n}\n\nfunction* itrListupInput(rootDir: string): IterableIterator<string> {\n\tfor (const filename of fs.readdirSync(rootDir)) {\n\t\tif (filename.startsWith('_')) {\n\t\t\t// ignore\n\t\t\tcontinue;\n\t\t}\n\t\tconst abs = path.join(rootDir, filename);\n\t\tconst baseName = path.basename(filename);\n\t\tconst baseFileName = baseName.slice(0, baseName.length - fileNameSuffix(baseName).length);\n\t\tif (baseFileName.endsWith('input') || baseFileName.startsWith('+')) {\n\t\t\tyield abs;\n\t\t} else if (fs.statSync(abs).isDirectory()) {\n\t\t\tyield* itrListupInput(abs);\n\t\t}\n\t}\n}\n\n// Necessary because of this:\n// https://github.com/eslint/eslint/issues/14936#issuecomment-906746754\nfunction applySuggestion(code: string, suggestion: LinterType.LintSuggestion) {\n\tconst { fix } = suggestion;\n\n\treturn `${code.slice(0, fix.range[0])}${fix.text}${code.slice(fix.range[1])}`;\n}\n\nfunction writeFixtures(\n\truleName: string,\n\tinputFile: string,\n\toutputFile: string,\n\t{ force }: { force?: boolean } = {}\n) {\n\tconst linter = new Linter();\n\tconst errorFile = inputFile.replace(/(input|\\+.+)(?:\\.[a-z]+)+$/u, 'errors.yaml');\n\n\tconst config = getConfig(ruleName, inputFile);\n\n\tconst parser = isSvelteFile(inputFile)\n\t\t? svelteParser\n\t\t: path.extname(inputFile) === '.ts'\n\t\t\t? typescriptParser\n\t\t\t: undefined;\n\tconst { code, filename, options, only, ...verifyConfig } = config;\n\tconst resolvedParser = verifyConfig.languageOptions?.parser ?? parser;\n\tconst result = linter.verify(\n\t\tcode,\n\t\t{\n\t\t\tfiles: ['**'],\n\t\t\t...verifyConfig,\n\t\t\tplugins: {\n\t\t\t\tsvelte: plugin\n\t\t\t},\n\t\t\trules: {\n\t\t\t\t[`svelte/${ruleName}`]: ['error', ...(options || [])]\n\t\t\t},\n\t\t\tlanguageOptions: {\n\t\t\t\tglobals: globals.browser,\n\t\t\t\tecmaVersion: 'latest',\n\t\t\t\tsourceType: 'module',\n\t\t\t\t...verifyConfig?.languageOptions,\n\t\t\t\tparserOptions: {\n\t\t\t\t\tproject: RULES_PROJECT,\n\t\t\t\t\tparser: {\n\t\t\t\t\t\tts: '@typescript-eslint/parser',\n\t\t\t\t\t\tjs: 'espree'\n\t\t\t\t\t},\n\t\t\t\t\t...verifyConfig.languageOptions?.parserOptions\n\t\t\t\t},\n\t\t\t\t...(resolvedParser\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tparser: resolvedParser\n\t\t\t\t\t\t}\n\t\t\t\t\t: {})\n\t\t\t}\n\t\t},\n\t\tfilename\n\t);\n\n\tif (force || !fs.existsSync(errorFile)) {\n\t\tvoid writeAndFormat(\n\t\t\terrorFile,\n\t\t\t`${stringifyYaml(\n\t\t\t\tresult.map((m) => ({\n\t\t\t\t\tmessage: m.message,\n\t\t\t\t\tline: m.line,\n\t\t\t\t\tcolumn: m.column,\n\t\t\t\t\tsuggestions: m.suggestions\n\t\t\t\t\t\t? m.suggestions.map((s) => ({\n\t\t\t\t\t\t\t\tdesc: s.desc,\n\t\t\t\t\t\t\t\tmessageId: s.messageId,\n\t\t\t\t\t\t\t\t// Need to have this be the *fixed* output, not just the fix content or anything\n\t\t\t\t\t\t\t\toutput: applySuggestion(config.code, s)\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t: null\n\t\t\t\t}))\n\t\t\t)}`\n\t\t);\n\t}\n\n\tif (force || !fs.existsSync(outputFile)) {\n\t\tconst output = applyFixes(config.code, result).output;\n\n\t\tif (plugin.rules[ruleName].meta?.fixable != null) {\n\t\t\tfs.writeFileSync(outputFile, output, 'utf8');\n\t\t}\n\t}\n}\n\nfunction getConfig(ruleName: string, inputFile: string) {\n\t// ruleName is normalized to support Windows style paths\n\tconst filename = inputFile.slice(inputFile.indexOf(path.normalize(ruleName)));\n\tconst code = fs.readFileSync(inputFile, 'utf8');\n\tlet config;\n\tlet configFile = [\n\t\tinputFile.replace(/(input|\\+.+)(?:\\.[a-z]+)+$/u, 'config.json'),\n\t\tpath.join(path.dirname(inputFile), '_config.json'),\n\t\tinputFile.replace(/(input|\\+.+)(?:\\.[a-z]+)+$/u, 'config.js'),\n\t\tpath.join(path.dirname(inputFile), '_config.js'),\n\t\tinputFile.replace(/(input|\\+.+)(?:\\.[a-z]+)+$/u, 'config.cjs'),\n\t\tpath.join(path.dirname(inputFile), '_config.cjs')\n\t].find((f) => fs.existsSync(f));\n\tif (configFile) {\n\t\tconfig =\n\t\t\tconfigFile.endsWith('.js') || configFile.endsWith('.cjs')\n\t\t\t\t? require(configFile)\n\t\t\t\t: JSON.parse(fs.readFileSync(configFile, 'utf8'));\n\t}\n\tconst parser = isSvelteFile(filename)\n\t\t? svelteParser\n\t\t: path.extname(inputFile) === '.ts'\n\t\t\t? typescriptParser\n\t\t\t: undefined;\n\n\tconst resolvedParser = config?.languageOptions?.parser\n\t\t? require(config.languageOptions.parser)\n\t\t: parser;\n\treturn Object.assign(\n\t\t{\n\t\t\t...config,\n\t\t\tlanguageOptions: {\n\t\t\t\tglobals: globals.browser,\n\t\t\t\tecmaVersion: 'latest',\n\t\t\t\tsourceType: 'module',\n\t\t\t\t...config?.languageOptions,\n\t\t\t\tparserOptions: {\n\t\t\t\t\tproject: RULES_PROJECT,\n\t\t\t\t\tparser: {\n\t\t\t\t\t\tts: '@typescript-eslint/parser',\n\t\t\t\t\t\tjs: 'espree'\n\t\t\t\t\t},\n\t\t\t\t\textraFileExtensions: ['.svelte'],\n\t\t\t\t\t...config?.languageOptions?.parserOptions\n\t\t\t\t},\n\t\t\t\t...(resolvedParser\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tparser: resolvedParser\n\t\t\t\t\t\t}\n\t\t\t\t\t: {})\n\t\t\t}\n\t\t},\n\t\t{ code, filename: inputFile }\n\t);\n}\n\nfunction getRequirements(inputFile: string): Record<string, string> {\n\tlet requirementsFile: string = inputFile.replace(\n\t\t/(input|\\+.+)(?:\\.[a-z]+)+$/u,\n\t\t'requirements.json'\n\t);\n\tif (!fs.existsSync(requirementsFile)) {\n\t\trequirementsFile = path.join(path.dirname(inputFile), '_requirements.json');\n\t}\n\tif (fs.existsSync(requirementsFile)) {\n\t\treturn JSON.parse(fs.readFileSync(requirementsFile, 'utf8'));\n\t}\n\treturn {};\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/lib/changesets-util.ts",
    "content": "import getReleasePlan from '@changesets/get-release-plan';\nimport { fileURLToPath } from 'url';\n\nconst cwdURL = new URL('../../../..', import.meta.url);\n\n/** Get new version string from changesets */\nexport async function getNewVersion(): Promise<string> {\n\tconst releasePlan = await getReleasePlan(fileURLToPath(cwdURL));\n\n\treturn releasePlan.releases.find(({ name }) => name === 'eslint-plugin-svelte')!.newVersion;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/lib/load-rules.ts",
    "content": "import path from 'path';\nimport fs from 'fs';\nimport type { RuleModule } from '../../src/types.js';\n\nconst rulesLibRootURL = new URL('../../src/rules/', import.meta.url);\n\n/**\n * Get the all rules\n * @returns {Array} The all rules\n */\nasync function readRules() {\n\tconst rules: RuleModule[] = [];\n\tfor (const name of iterateTsFiles()) {\n\t\tconst module = await import(new URL(name, rulesLibRootURL).href);\n\t\tconst rule: RuleModule = module && module.default;\n\t\tif (!rule || typeof rule.create !== 'function') {\n\t\t\tcontinue;\n\t\t}\n\n\t\trules.push(rule);\n\t}\n\treturn rules;\n}\n\nexport const rules = await readRules();\n\n/** Iterate ts files */\nfunction* iterateTsFiles() {\n\tconst files = fs.readdirSync(rulesLibRootURL);\n\n\twhile (files.length) {\n\t\tconst file = files.shift()!;\n\t\tif (file.endsWith('.ts')) {\n\t\t\tyield file;\n\t\t\tcontinue;\n\t\t}\n\t\tconst filePathURL = new URL(file, rulesLibRootURL);\n\t\tif (!fs.statSync(filePathURL).isDirectory()) {\n\t\t\tcontinue;\n\t\t}\n\t\tfiles.unshift(...fs.readdirSync(filePathURL).map((n) => path.join(file, n)));\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/lib/write.ts",
    "content": "import fs from 'fs';\nimport { ESLint } from 'eslint';\nimport prettier from 'prettier';\nimport { fileURLToPath } from 'url';\n\n/**\n * Write file and format it with ESLint\n */\nexport async function writeAndFormat(fileURL: URL, content: string): Promise<void> {\n\tfs.writeFileSync(fileURL, content, 'utf8');\n\n\tconst filePath = fileURLToPath(fileURL);\n\treturn prettier\n\t\t.resolveConfig(fileURL)\n\t\t.then((prettierrc) => {\n\t\t\tif (!prettierrc) {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t\treturn prettier.format(content, { filepath: filePath, ...prettierrc });\n\t\t})\n\t\t.then((formatted) => {\n\t\t\tfs.writeFileSync(fileURL, formatted, 'utf8');\n\t\t\tconst eslint = new ESLint({ fix: true });\n\t\t\treturn eslint.lintText(formatted, { filePath });\n\t\t})\n\t\t.then(([result]) => {\n\t\t\tif (result.output) {\n\t\t\t\tfs.writeFileSync(fileURL, result.output, 'utf8');\n\t\t\t}\n\t\t});\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/new-rule.ts",
    "content": "import path from 'node:path';\nimport fs from 'node:fs';\nimport cp from 'node:child_process';\nimport { writeAndFormat } from './lib/write.js';\nimport { fileURLToPath } from 'node:url';\n\nconst logger = console;\n\n// main\nvoid (async ([ruleId, ...args]) => {\n\tif (ruleId == null) {\n\t\tlogger.error('Usage: pnpm run new <RuleID>');\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tif (!/^[\\w\\-/@]+$/u.test(ruleId)) {\n\t\tlogger.error(\"Invalid RuleID '%s'.\", ruleId);\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst utilsURL = new URL(`../src/utils/index.ts`, import.meta.url);\n\tconst testUtilsURL = new URL(`../tests/utils/utils.ts`, import.meta.url);\n\n\tconst ruleFileURL = new URL(`../src/rules/${ruleId}.ts`, import.meta.url);\n\tconst testFileURL = new URL(`../tests/src/rules/${ruleId}.ts`, import.meta.url);\n\tconst docFileURL = new URL(`../../../docs/rules/${ruleId}.md`, import.meta.url);\n\tconst fixturesRootURL = new URL(`../tests/fixtures/rules/${ruleId}/`, import.meta.url);\n\ttry {\n\t\tfs.mkdirSync(new URL('./', ruleFileURL), { recursive: true });\n\t} catch {\n\t\t// ignore\n\t}\n\ttry {\n\t\tfs.mkdirSync(new URL('./', testFileURL), { recursive: true });\n\t} catch {\n\t\t// ignore\n\t}\n\ttry {\n\t\tfs.mkdirSync(new URL('./', docFileURL), { recursive: true });\n\t} catch {\n\t\t// ignore\n\t}\n\ttry {\n\t\tfs.mkdirSync(new URL('./valid', fixturesRootURL), { recursive: true });\n\t\tfs.mkdirSync(new URL('./invalid', fixturesRootURL), { recursive: true });\n\t} catch {\n\t\t// ignore\n\t}\n\n\tawait writeAndFormat(\n\t\truleFileURL,\n\t\t`import { AST } from 'svelte-eslint-parser';\nimport { createRule } from '${getModulePath(ruleFileURL, utilsURL)}';\n\nexport default createRule('${ruleId}', {\n    meta: {\n        docs: {\n            description: '',\n            category: '',\n            recommended: false,\n        },\n        schema: [],\n        messages: {},\n        type: 'suggestion', // 'problem', or 'layout',\n\t\t\t\tconditions: [], // Conditions for applying this rule. Leave empty to always execute.\n    },\n    create(context) {\n        return {}\n    },\n});\n`\n\t);\n\tawait writeAndFormat(\n\t\ttestFileURL,\n\t\t`import { RuleTester } from '../../utils/eslint-compat.js';\nimport rule from '${getModulePath(testFileURL, ruleFileURL)}';\nimport { loadTestCases } from '${getModulePath(testFileURL, testUtilsURL)}';\n\nconst tester = new RuleTester({\n\tlanguageOptions: {\n\t\tecmaVersion:\"latest\",\n\t\tsourceType: 'module'\n\t}\n});\n\ntester.run('${ruleId}', rule as any, loadTestCases('${ruleId}'));\n`\n\t);\n\tawait writeAndFormat(\n\t\tdocFileURL,\n\t\t`#  (svelte/${ruleId})\n\n> description\n\n## :book: Rule Details\n\nThis rule reports ???.\n\n<!--eslint-skip-->\n\n\\`\\`\\`svelte\n<script>\n  /* eslint svelte/${ruleId}: \"error\" */\n</script>\n\n<!-- ✓ GOOD -->\n\n<!-- ✗ BAD -->\n\n\\`\\`\\`\n\n## :wrench: Options\n\n\\`\\`\\`json\n{\n  \"svelte/${ruleId}\": [\"error\", {\n\n  }]\n}\n\\`\\`\\`\n\n-\n\n## :books: Further Reading\n\n-\n\n`\n\t);\n\n\tconst { code } = expectedArgs(args);\n\tif (!code) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\t// Use code -v to know if vscode is installed and do not print anything to the console\n\t\tcp.execSync('code -v', { stdio: 'ignore' });\n\t\tcp.execSync(`code \"${fileURLToPath(ruleFileURL)}\"`);\n\t\tcp.execSync(`code \"${fileURLToPath(testFileURL)}\"`);\n\t\tcp.execSync(`code \"${fileURLToPath(docFileURL)}\"`);\n\t} catch {\n\t\tlogger.error('Unable to find code command. Will not open files with VSCode.');\n\t}\n})(process.argv.slice(2));\n\n/** Get module path */\nfunction getModulePath(from: URL, module: URL): string {\n\tconst fromDir = fileURLToPath(new URL('./', from));\n\tconst modulePath = fileURLToPath(module);\n\n\treturn path.relative(fromDir, modulePath).replace(/\\\\/g, '/').replace(/.ts$/u, '.js');\n}\n\n/** Argument parsing */\nfunction expectedArgs(args: string[]) {\n\tconst result = { code: false };\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tconst split = args[i].split('=');\n\t\tif (arg === '--code') {\n\t\t\t// Passing --code alone is the same as --code=true\n\t\t\tresult.code = args[i + 1] === 'true' || args[i + 1] === undefined;\n\t\t} else if (split.length === 2) {\n\t\t\tresult.code = split[1] === 'true';\n\t\t} else if (split.length > 2) {\n\t\t\tlogger.error('Usage: pnpm run new <RuleID> <--code=boolean>');\n\t\t}\n\t}\n\n\treturn result;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/render-rules.ts",
    "content": "import type { RuleModule } from '../src/types.js';\nimport { rules } from '../src/utils/rules.js';\n\nconst categories = [\n\t'Possible Errors',\n\t'Security Vulnerability',\n\t'Best Practices',\n\t'Stylistic Issues',\n\t'Extension Rules',\n\t'SvelteKit',\n\t'Experimental',\n\t'System'\n] as const;\n\nconst descriptions: Record<(typeof categories)[number], string> = {\n\t'Possible Errors': 'These rules relate to possible syntax or logic errors in Svelte code:',\n\t'Security Vulnerability': 'These rules relate to security vulnerabilities in Svelte code:',\n\t'Best Practices': 'These rules relate to better ways of doing things to help you avoid problems:',\n\t'Stylistic Issues': 'These rules relate to style guidelines, and are therefore quite subjective:',\n\t'Extension Rules':\n\t\t'These rules extend the rules provided by ESLint itself, or other plugins to work well in Svelte:',\n\tSvelteKit: 'These rules relate to SvelteKit and its best Practices.',\n\tExperimental:\n\t\t':warning: These rules are considered experimental and may change or be removed in the future:',\n\tSystem: 'These rules relate to this plugin works:'\n};\n\nconst activeRules = rules.filter((rule) => !rule.meta.deprecated);\nconst svelteRules = activeRules;\nconst deprecatedRules = rules.filter((rule) => rule.meta.deprecated);\n\nactiveRules.forEach((rule) => {\n\tif (!categories.includes(rule.meta.docs.category)) {\n\t\tthrow new Error(`missing categories:${rule.meta.docs.category}`);\n\t}\n});\n\nconst categoryRules = categories.map((cat) => {\n\treturn {\n\t\ttitle: cat,\n\t\trules: svelteRules.filter((rule) => rule.meta.docs.category === cat)\n\t};\n});\n\nexport default function renderRulesTableContent(\n\tbuildRulePath = (ruleName: string) => `./rules/${ruleName}.md`\n): string {\n\t// -----------------------------------------------------------------------------\n\n\tfunction toRuleRow(rule: RuleModule) {\n\t\tconst mark = `${rule.meta.docs.recommended ? ':star:' : ''}${\n\t\t\trule.meta.fixable ? ':wrench:' : ''\n\t\t}${rule.meta.hasSuggestions ? ':bulb:' : ''}${rule.meta.deprecated ? ':warning:' : ''}`;\n\t\tconst link = `[${rule.meta.docs.ruleId}](${buildRulePath(rule.meta.docs.ruleName || '')})`;\n\t\tconst description = rule.meta.docs.description || '(no description)';\n\n\t\treturn `| ${link} | ${description} | ${mark} |`;\n\t}\n\n\tfunction toDeprecatedRuleRow(rule: RuleModule) {\n\t\tconst link = `[${rule.meta.docs.ruleId}](${buildRulePath(rule.meta.docs.ruleName || '')})`;\n\t\tconst replacedRules = rule.meta.replacedBy || [];\n\t\tconst replacedBy = Array.isArray(replacedRules)\n\t\t\t? replacedRules.map((name) => `[svelte/${name}](${buildRulePath(name)})`).join(', ')\n\t\t\t: replacedRules.note;\n\n\t\treturn `| ${link} | ${replacedBy || '(no replacement)'} |`;\n\t}\n\n\t// -----------------------------------------------------------------------------\n\tlet rulesTableContent = categoryRules\n\t\t.map((cat) => {\n\t\t\treturn `\n## ${cat.title}\n\n${descriptions[cat.title]}\n\n| Rule ID | Description |    |\n|:--------|:------------|:---|\n${cat.rules.map(toRuleRow).join('\\n')}\n`;\n\t\t})\n\t\t.join('');\n\n\t// -----------------------------------------------------------------------------\n\tif (deprecatedRules.length >= 1) {\n\t\trulesTableContent += `\n## Deprecated\n\n- :warning: We're going to remove deprecated rules in the next major release. Please migrate to successor/new rules.\n- :innocent: We don't fix bugs which are in deprecated rules since we don't have enough resources.\n\n| Rule ID | Replaced by |\n|:--------|:------------|\n${deprecatedRules.map(toDeprecatedRuleRow).join('\\n')}\n`;\n\t}\n\treturn rulesTableContent;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-docs-rules-index.ts",
    "content": "import renderRulesTableContent from './render-rules.js';\nimport { writeAndFormat } from './lib/write.js';\n\n// -----------------------------------------------------------------------------\nconst readmeFileURL = new URL('../../../docs/rules.md', import.meta.url);\nvoid writeAndFormat(\n\treadmeFileURL,\n\t`---\nsidebarDepth: 0\n---\n\n# Available Rules\n\n:wrench: Indicates that the rule is fixable, and using \\`--fix\\` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the reported problems.\\\\\n:bulb: Indicates that some problems reported by the rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\\\\\n:star: Indicates that the rule is included in the \\`plugin:svelte/recommended\\` config.\n\n<!-- This file is automatically generated in tools/update-docs-rules-index.js, do not change! -->\n${renderRulesTableContent()}`\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-docs.ts",
    "content": "import fs from 'fs';\nimport { rules } from '../src/utils/rules.js';\nimport type { RuleModule } from '../src/types.js';\nimport { getNewVersion } from './lib/changesets-util.js';\nimport { writeAndFormat } from './lib/write.js';\n\nfunction formatItems(items: string[]) {\n\tif (items.length <= 2) {\n\t\treturn items.join(' and ');\n\t}\n\treturn `all of ${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`;\n}\n\nfunction yamlValue(val: unknown) {\n\tif (typeof val === 'string') {\n\t\treturn `\"${val.replace(/\\\\/gu, '\\\\\\\\').replace(/\"/gu, '\\\\\"')}\"`;\n\t}\n\treturn val;\n}\n\nconst ROOT_URL = new URL('../../../docs/rules/', import.meta.url);\n\nfunction pickSince(content: string): string | null | Promise<string> {\n\tconst fileIntro = /^---\\n((?:.*\\n)+)---\\n*/.exec(content);\n\tif (fileIntro) {\n\t\tconst since = /since: [\"']?(v\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?)[\"']?/.exec(fileIntro[1]);\n\t\tif (since) {\n\t\t\treturn since[1];\n\t\t}\n\t}\n\t// eslint-disable-next-line no-process-env -- ignore\n\tif (process.env.IN_VERSION_SCRIPT) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports -- ignore\n\t\treturn `v${require('../package.json').version}`;\n\t}\n\t// eslint-disable-next-line no-process-env -- ignore\n\tif (process.env.IN_VERSION_CI_SCRIPT) {\n\t\treturn getNewVersion().then((v) => `v${v}`);\n\t}\n\treturn null;\n}\n\nclass DocFile {\n\tprivate readonly rule: RuleModule;\n\n\tprivate readonly fileURL: URL;\n\n\tprivate content: string;\n\n\tprivate readonly since: string | null | Promise<string>;\n\n\tpublic constructor(rule: RuleModule) {\n\t\tthis.rule = rule;\n\t\tthis.fileURL = new URL(`./${rule.meta.docs.ruleName}.md`, ROOT_URL);\n\t\tthis.content = fs.readFileSync(this.fileURL, 'utf8');\n\t\tthis.since = pickSince(this.content);\n\t}\n\n\tpublic static read(rule: RuleModule) {\n\t\treturn new DocFile(rule);\n\t}\n\n\tpublic updateHeader() {\n\t\tconst {\n\t\t\tmeta: {\n\t\t\t\tfixable,\n\t\t\t\thasSuggestions,\n\t\t\t\tdeprecated,\n\t\t\t\treplacedBy,\n\t\t\t\tdocs: { ruleId, description, recommended }\n\t\t\t}\n\t\t} = this.rule;\n\t\tconst title = `# ${ruleId}\\n\\n> ${description}`;\n\t\tconst notes = [];\n\n\t\tif (deprecated) {\n\t\t\tif (replacedBy) {\n\t\t\t\tif (Array.isArray(replacedBy)) {\n\t\t\t\t\tconst replacedRules = replacedBy.map((name) => `[svelte/${name}](${name}.md) rule`);\n\t\t\t\t\tnotes.push(\n\t\t\t\t\t\t`- :warning: This rule was **deprecated** and replaced by ${formatItems(\n\t\t\t\t\t\t\treplacedRules\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tnotes.push(`- :warning: This rule was **deprecated**. ${replacedBy.note}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnotes.push('- :warning: This rule was **deprecated**.');\n\t\t\t}\n\t\t} else if (recommended) {\n\t\t\tif (recommended === 'base') {\n\t\t\t\tnotes.push(\n\t\t\t\t\t'- :gear: This rule is included in `\"plugin:svelte/base\"` and `\"plugin:svelte/recommended\"`.'\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tnotes.push('- :gear: This rule is included in `\"plugin:svelte/recommended\"`.');\n\t\t\t}\n\t\t}\n\t\tif (fixable) {\n\t\t\tnotes.push(\n\t\t\t\t'- :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.'\n\t\t\t);\n\t\t}\n\t\tif (hasSuggestions) {\n\t\t\tnotes.push(\n\t\t\t\t'- :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).'\n\t\t\t);\n\t\t}\n\t\tif (!this.since) {\n\t\t\tnotes.unshift(\n\t\t\t\t`- :exclamation: <badge text=\"This rule has not been released yet.\" vertical=\"middle\" type=\"error\"> **_This rule has not been released yet._** </badge>`\n\t\t\t);\n\t\t}\n\n\t\t// Add an empty line after notes.\n\t\tif (notes.length >= 1) {\n\t\t\tnotes.push('', '');\n\t\t}\n\n\t\tconst headerPattern = /(?:^|\\n)#.+\\n+[^\\n]*\\n+(?:- .+\\n+)*\\n*/u;\n\n\t\tconst header = `\\n${title}\\n\\n${notes.join('\\n')}`;\n\t\tif (headerPattern.test(this.content)) {\n\t\t\tthis.content = this.content.replace(headerPattern, header.replace(/\\$/g, '$$$$'));\n\t\t} else {\n\t\t\tthis.content = `${header}${this.content.trim()}\\n`;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic async updateFooter() {\n\t\tconst { ruleName, extensionRule } = this.rule.meta.docs;\n\t\tconst footerPattern = /## (?:(?::mag:)? ?Implementation|:rocket: Version).+$/s;\n\t\tconst footer = `${\n\t\t\tthis.since\n\t\t\t\t? `## :rocket: Version\n\nThis rule was introduced in eslint-plugin-svelte ${await this.since}\n\n`\n\t\t\t\t: ''\n\t\t}## :mag: Implementation\n\n- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/${ruleName}.ts)\n- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/${ruleName}.ts)\n${\n\textensionRule\n\t\t? typeof extensionRule === 'string'\n\t\t\t? `\n<sup>Taken with ❤️ [from ESLint core](https://eslint.org/docs/rules/${extensionRule})</sup>\n`\n\t\t\t: `\n<sup>Taken with ❤️ [from ${extensionRule.plugin}](${extensionRule.url})</sup>\n`\n\t\t: ''\n}`;\n\t\tif (footerPattern.test(this.content)) {\n\t\t\tthis.content = this.content.replace(footerPattern, footer.replace(/\\$/g, '$$$$'));\n\t\t} else {\n\t\t\tthis.content = `${this.content.trim()}\\n\\n${footer}`;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic updateCodeBlocks() {\n\t\tconst { meta } = this.rule;\n\n\t\tthis.content = this.content.replace(/<ESLintCodeBlock(.*?)>/gu, (_t, str) => {\n\t\t\tconst ps = str\n\t\t\t\t.split(/\\s+/u)\n\t\t\t\t.map((s: string) => s.trim())\n\t\t\t\t.filter((s: string) => s && s !== 'fix');\n\t\t\tif (meta.fixable) {\n\t\t\t\tps.unshift('fix');\n\t\t\t}\n\t\t\tps.unshift('<ESLintCodeBlock');\n\t\t\treturn `${ps.join(' ')}>`;\n\t\t});\n\t\treturn this;\n\t}\n\n\tpublic adjustCodeBlocks() {\n\t\t// Adjust the necessary blank lines before and after the code block so that GitHub can recognize `.md`.\n\t\tthis.content = this.content.replace(/\\n+```svelte/gu, '\\n\\n```svelte');\n\t\tthis.content = this.content.replace(/\\n+```\\n+/gu, '\\n```\\n\\n');\n\t\treturn this;\n\t}\n\n\tpublic async updateFileIntro() {\n\t\tconst { ruleId, description } = this.rule.meta.docs;\n\n\t\tconst fileIntro = {\n\t\t\tpageClass: 'rule-details',\n\t\t\tsidebarDepth: 0,\n\t\t\ttitle: ruleId,\n\t\t\tdescription,\n\t\t\t...(this.since ? { since: await this.since } : {})\n\t\t};\n\t\tconst computed = `---\\n${Object.keys(fileIntro)\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- tool\n\t\t\t.map((key) => `${key}: ${yamlValue((fileIntro as any)[key])}`)\n\t\t\t.join('\\n')}\\n---\\n\\n`;\n\n\t\tconst fileIntroPattern = /^---\\n(?:.*\\n)+?---\\n*/gu;\n\n\t\tif (fileIntroPattern.test(this.content)) {\n\t\t\tthis.content = this.content.replace(fileIntroPattern, computed.replace(/\\$/g, '$$$$'));\n\t\t} else {\n\t\t\tthis.content = `${computed}${this.content.trim()}\\n`;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic async write() {\n\t\tthis.content = this.content.replace(/\\r?\\n/gu, '\\n');\n\n\t\tawait writeAndFormat(this.fileURL, this.content);\n\t}\n}\n\nvoid main();\n\n/** main */\nasync function main() {\n\tfor (const rule of rules) {\n\t\tconst doc = DocFile.read(rule);\n\t\tdoc.updateHeader();\n\t\tawait doc.updateFooter();\n\t\tdoc.updateCodeBlocks();\n\t\tawait doc.updateFileIntro();\n\t\tdoc.adjustCodeBlocks();\n\t\tawait doc.write();\n\t}\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-meta.ts",
    "content": "import { name, version } from '../package.json';\nimport { getNewVersion } from './lib/changesets-util.js';\nimport { writeAndFormat } from './lib/write.js';\n\nconst META_URL = new URL('../src/meta.ts', import.meta.url);\n\nvoid main();\n\n/** main */\nasync function main() {\n\tawait writeAndFormat(\n\t\tMETA_URL,\n\t\t`/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\nexport const name = ${JSON.stringify(name)} as const;\nexport const version = ${JSON.stringify(await getVersion())} as const;\n`\n\t);\n}\n\n/** Get version */\nfunction getVersion() {\n\t// eslint-disable-next-line no-process-env -- ignore\n\tif (process.env.IN_VERSION_CI_SCRIPT) {\n\t\treturn getNewVersion();\n\t}\n\treturn version;\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-readme.ts",
    "content": "import fs from 'fs';\nimport renderRulesTableContent from './render-rules.js';\nimport { writeAndFormat } from './lib/write.js';\n\nconst rootURL = new URL('../../../', import.meta.url);\n\nconst insertText = `\\n${renderRulesTableContent(\n\t(name) => `https://sveltejs.github.io/eslint-plugin-svelte/rules/${name}/`\n)}\\n`;\n\nconst readmeFileURL = new URL('README.md', rootURL);\nconst newReadme = fs\n\t.readFileSync(readmeFileURL, 'utf8')\n\t.replace(\n\t\t/<!--RULES_TABLE_START-->[\\s\\S]*<!--RULES_TABLE_END-->/u,\n\t\t`<!--RULES_TABLE_START-->${insertText.replace(/\\$/g, '$$$$')}<!--RULES_TABLE_END-->`\n\t);\nvoid writeAndFormat(readmeFileURL, newReadme);\n\nconst docsReadmeFileURL = new URL('./docs/README.md', rootURL);\n\nvoid writeAndFormat(\n\tdocsReadmeFileURL,\n\t`---\ntitle: \"eslint-plugin-svelte\"\n---\n\n${newReadme\n\t.replace('# eslint-plugin-svelte\\n', '# Introduction\\n')\n\t.replace(\n\t\t/<!--RULES_SECTION_START-->[\\s\\S]*<!--RULES_SECTION_END-->/u,\n\t\t'See [Available Rules](./rules.md).'\n\t)\n\t.replace(\n\t\t/<!--USAGE_SECTION_START-->[\\s\\S]*<!--USAGE_SECTION_END-->/u,\n\t\t'See [User Guide](./user-guide.md).'\n\t)\n\t.replace(/<!--DOCS_IGNORE_START-->[\\s\\S]*?<!--DOCS_IGNORE_END-->/gu, '')\n\t.replace(\n\t\t/\\(https:\\/\\/sveltejs.github.io\\/eslint-plugin-svelte(.*?)\\)/gu,\n\t\t(_ptn, filepath: string) => {\n\t\t\tconst [hash] = /(?:#.*)?$/u.exec(filepath)!;\n\t\t\tconst pathWithoutHash = hash ? filepath.slice(0, -hash.length) : filepath;\n\t\t\tconst normalizePathWithoutHash = pathWithoutHash.replace(/\\/$/u, '');\n\t\t\tconst [file] = /[^/]+$/u.exec(normalizePathWithoutHash)!;\n\t\t\tconst pathWithoutFile = file\n\t\t\t\t? normalizePathWithoutHash.slice(0, -file.length)\n\t\t\t\t: normalizePathWithoutHash;\n\n\t\t\tlet result = `(.${pathWithoutFile}`;\n\t\t\tif (file.endsWith('.html')) {\n\t\t\t\tresult += file === 'index.html' ? 'README.md' : file.replace(/\\.html$/, '.md');\n\t\t\t} else {\n\t\t\t\tresult += `${file}.md`;\n\t\t\t}\n\t\t\tresult += `${hash})`;\n\t\t\treturn result;\n\t\t}\n\t)\n\t.replace(\n\t\t'[LICENSE](LICENSE)',\n\t\t'[LICENSE](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/LICENSE)'\n\t)\n\t.replace(/\\n{3,}/gu, '\\n\\n')}`\n);\n\nconst docsUserGuideFileURL = new URL('./docs/user-guide.md', rootURL);\n\nconst docsUserGuide = fs.readFileSync(docsUserGuideFileURL, 'utf8');\n\nvoid writeAndFormat(\n\tdocsUserGuideFileURL,\n\tdocsUserGuide\n\t\t.replace(\n\t\t\t/<!--USAGE_GUIDE_START-->[\\s\\S]*<!--USAGE_GUIDE_END-->/u,\n\t\t\t/<!--USAGE_GUIDE_START-->[\\s\\S]*<!--USAGE_GUIDE_END-->/u.exec(newReadme)![0]\n\t\t)\n\t\t.replace(\n\t\t\t/\\(https:\\/\\/sveltejs.github.io\\/eslint-plugin-svelte(.*?)\\)/gu,\n\t\t\t(_s: string, c: string) => `(.${c.endsWith('/') ? c.slice(0, -1) : c}.md)`\n\t\t)\n);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-rule-types.ts",
    "content": "import fs from 'fs';\nimport plugin from '../src/index.js';\n\nvoid main();\n\nasync function main() {\n\tconst { pluginsToRulesDTS } = await import('eslint-typegen/core');\n\n\tconst ruleTypes = await pluginsToRulesDTS(\n\t\t{ svelte: plugin },\n\t\t{ includeAugmentation: false, includeTypeImports: false }\n\t);\n\n\tvoid fs.writeFileSync(\n\t\tnew URL('../src/rule-types.ts', import.meta.url),\n\t\t`// IMPORTANT!\n// This file has been automatically generated,\n// in order to update its content execute \"pnpm run update\"\n\n/* eslint-disable */\n/* prettier-ignore */\nimport type { Linter } from 'eslint'\n\ndeclare module 'eslint' {\n\tinterface RulesConfig extends RuleOptions {}\n}\n\n${ruleTypes}`\n\t);\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-rules.ts",
    "content": "// import eslint from \"eslint\"\nimport { rules } from './lib/load-rules.js';\nimport { writeAndFormat } from './lib/write.js';\n\n/**\n * Convert text to camelCase\n */\nfunction camelCase(str: string) {\n\treturn str.replace(/[-_](\\w)/gu, (_, c) => (c ? c.toUpperCase() : ''));\n}\n\n/**\n * Convert text to identifier\n */\nfunction toIdentifier(str: string) {\n\tconst clean = str\n\t\t.replace(/^[^\\p{ID_Start}$_]/u, '')\n\t\t.replace(/[^\\p{ID_Continue}$\\u200c\\u200d]/gu, '-');\n\n\treturn camelCase(clean);\n}\n\nconst content = `/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\nimport type { RuleModule } from \"../types.js\"\n${rules\n\t.map(\n\t\t(rule) =>\n\t\t\t`import ${toIdentifier(rule.meta.docs.ruleName)} from \"../rules/${rule.meta.docs.ruleName}.js\"`\n\t)\n\t.join('\\n')}\n\nexport const rules = [\n    ${rules.map((rule) => toIdentifier(rule.meta.docs.ruleName)).join(',')}\n] as RuleModule[]\n`;\n\nconst fileURL = new URL('../src/utils/rules.ts', import.meta.url);\n\n// Update file.\nvoid writeAndFormat(fileURL, content);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-rulesets.ts",
    "content": "import { rules } from './lib/load-rules.js';\nimport { writeAndFormat } from './lib/write.js';\n\nconst flatConfigFolderURL = new URL('../src/configs/flat/', import.meta.url);\n\n// ------------------\n// Flat Config\n// ------------------\n\nconst baseContent = `/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\nimport type { ESLint, Linter } from 'eslint';\nimport * as parser from 'svelte-eslint-parser';\nlet pluginObject: ESLint.Plugin | null = null;\nexport function setPluginObject(plugin: ESLint.Plugin): void {\n\tpluginObject = plugin;\n}\nconst config: Linter.Config[] = [\n\t{\n\t\tname: 'svelte:base:setup-plugin',\n\t\tplugins: {\n\t\t\tget svelte(): ESLint.Plugin {\n\t\t\t\treturn pluginObject!;\n\t\t\t}\n\t\t},\n\t},\n\t{\n\t\tname: 'svelte:base:setup-for-svelte',\n\t\tfiles: [\"*.svelte\", \"**/*.svelte\"],\n\t\tlanguageOptions: {\n\t\t\tparser: parser,\n\t\t},\n\t\trules: {\n\t\t\t// ESLint core rules known to cause problems with \\`.svelte\\`.\n\t\t\t\"no-inner-declarations\": \"off\", // The AST generated by svelte-eslint-parser will false positives in it rule because the root node of the script is not the \\`Program\\`.\n\t\t\t// \"no-irregular-whitespace\": \"off\",\n\t\t\t// Self assign is one of way to update reactive value in Svelte.\n\t\t\t\"no-self-assign\": \"off\",\n\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t${rules\n\t\t\t\t.filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated)\n\t\t\t\t.map((rule) => {\n\t\t\t\t\tconst conf = rule.meta.docs.default || 'error';\n\t\t\t\t\treturn `\"${rule.meta.docs.ruleId}\": \"${conf}\"`;\n\t\t\t\t})\n\t\t\t\t.join(',\\n\t\t\t')}\n\t\t},\n\t\tprocessor: 'svelte/svelte'\n\t},\n\t{\n\t\tname: 'svelte:base:setup-for-svelte-script',\n\t\tfiles: ['*.svelte.js', '*.svelte.ts', '**/*.svelte.js', '**/*.svelte.ts'],\n\t\tlanguageOptions: {\n\t\t\tparser: parser,\n\t\t},\n\t\trules: {\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t${rules\n\t\t\t\t.filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated)\n\t\t\t\t.filter(\n\t\t\t\t\t// Exclude rules that are not applicable to JavaScript files\n\t\t\t\t\t(rule) =>\n\t\t\t\t\t\trule.meta.docs.ruleId !== 'svelte/comment-directive' &&\n\t\t\t\t\t\trule.meta.docs.ruleId !== 'svelte/system'\n\t\t\t\t)\n\t\t\t\t.map((rule) => {\n\t\t\t\t\tconst conf = rule.meta.docs.default || 'error';\n\t\t\t\t\treturn `\"${rule.meta.docs.ruleId}\": \"${conf}\"`;\n\t\t\t\t})\n\t\t\t\t.join(',\\n\t\t\t')}\n\t\t},\n\t}\n]\nexport default config\n`;\n\nconst baseFileURL = new URL('base.ts', flatConfigFolderURL);\n\n// Update file.\nvoid writeAndFormat(baseFileURL, baseContent);\n\nconst recommendedContent = `/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\nimport type { Linter } from 'eslint';\nimport base from \"./base.js\"\nconst config: Linter.Config[] = [\n\t...base,\n\t{\n\t\tname: 'svelte:recommended:rules',\n\t\trules: {\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t${rules\n\t\t\t\t.filter((rule) => rule.meta.docs.recommended && !rule.meta.deprecated)\n\t\t\t\t.map((rule) => {\n\t\t\t\t\tconst conf = rule.meta.docs.default || 'error';\n\t\t\t\t\treturn `\"${rule.meta.docs.ruleId}\": \"${conf}\"`;\n\t\t\t\t})\n\t\t\t\t.join(',\\n\t\t\t')},\n\t\t},\n\t}\n]\nexport default config\n`;\n\nconst recommendedFileURL = new URL('recommended.ts', flatConfigFolderURL);\n\n// Update file.\nvoid writeAndFormat(recommendedFileURL, recommendedContent);\n\nconst prettierContent = `/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\nimport type { Linter } from 'eslint';\nimport base from \"./base.js\"\nconst config: Linter.Config[] = [\n\t...base,\n\t{\n\t\tname: 'svelte:prettier:turn-off-rules',\n\t\trules: {\n\t\t\t// eslint-plugin-svelte rules\n\t\t\t${rules\n\t\t\t\t.filter((rule) => rule.meta.docs.conflictWithPrettier)\n\t\t\t\t.map((rule) => `\"${rule.meta.docs.ruleId}\": \"off\"`)\n\t\t\t\t.join(',\\n\t\t\t')},\n\t\t},\n\t}\n]\nexport default config\n`;\n\nconst prettierFileURL = new URL('prettier.ts', flatConfigFolderURL);\n\n// Update file.\nvoid writeAndFormat(prettierFileURL, prettierContent);\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update-types-for-node.ts",
    "content": "import { AST_NODE_TYPES } from '@typescript-eslint/types';\nimport { parseForESLint } from 'svelte-eslint-parser';\nimport { writeAndFormat } from './lib/write.js';\n\nconst sourceFolderURL = new URL('../src/', import.meta.url);\n\nconst typesForNodeFileURL = new URL('types-for-node.ts', sourceFolderURL);\nconst estreeFileURL = new URL('type-defs/estree.d.ts', sourceFolderURL);\nconst { visitorKeys } = parseForESLint('');\n\nconst esNextNodeNames = ['Decorator', 'ImportAttribute', 'StaticBlock'];\nconst esSvelteNodeNames = ['Program', 'SvelteReactiveStatement'];\nconst tsEsNodeNames = Object.keys(AST_NODE_TYPES).filter((k) => k !== 'Program');\nconst esNodeNames = tsEsNodeNames.filter(\n\t(k) => !k.startsWith('TS') && !k.startsWith('JSX') && !esNextNodeNames.includes(k)\n);\nconst tsNodeNames = tsEsNodeNames.filter((k) => !k.startsWith('JSX') && !esNodeNames.includes(k));\nconst svelteNodeNames = Object.keys(visitorKeys).filter(\n\t(k) => !tsEsNodeNames.includes(k) && !k.startsWith('Experimental')\n);\n\nconst estreeCode = [\n\t`/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\n//\n// Replace type information to use \"@typescript-eslint/types\" instead of \"estree\".\n//\ndeclare module 'estree' {\nimport type { TSESTree } from \"@typescript-eslint/types\"\n\nexport type Node = TSESTree.Node\nexport type Program = TSESTree.Program\nexport type Expression = TSESTree.Expression\nexport type Statement = TSESTree.Statement\nexport type Pattern = TSESTree.DestructuringPattern`\n];\nconst typesForNodeCode = [\n\t`/*\n * IMPORTANT!\n * This file has been automatically generated,\n * in order to update its content execute \"pnpm run update\"\n */\n//\n// The information here can be calculated by calculating the type,\n// but is pre-defined to avoid the computational cost.\n//\n\nimport type { TSESTree, AST_NODE_TYPES } from \"@typescript-eslint/types\";\nimport type { AST } from \"svelte-eslint-parser\"\n\nexport type ASTNode =\n  | AST.SvelteNode\n  | Exclude<Omit<TSESTree.Node, \"parent\">, { type: AST.SvelteNode[\"type\"] }>\nexport type ASTNodeWithParent =\n  | (Exclude<ASTNode, AST.SvelteProgram> & { parent: ASTNodeWithParent })\n  | AST.SvelteProgram\n\nexport type ASTNodeListener = {`\n];\nfor (const nodeType of tsEsNodeNames) {\n\tlet argType = `TSESTree.${nodeType}`;\n\tif (nodeType === 'TSIntrinsicKeyword') {\n\t\targType = `TSESTree.Node & { type: AST_NODE_TYPES.${nodeType}}`;\n\t}\n\ttypesForNodeCode.push(`  ${nodeType}?: (node: ${argType} & ASTNodeWithParent) => void`);\n\ttypesForNodeCode.push(`  '${nodeType}:exit'?: (node: ${argType} & ASTNodeWithParent) => void`);\n}\nfor (const nodeType of svelteNodeNames) {\n\tlet argType = `AST.${nodeType}`;\n\tif (nodeType === 'Program') {\n\t\targType = `AST.SvelteProgram`;\n\t}\n\ttypesForNodeCode.push(`  ${nodeType}?: (node: ${argType} & ASTNodeWithParent) => void`);\n\ttypesForNodeCode.push(`  '${nodeType}:exit'?: (node: ${argType} & ASTNodeWithParent) => void`);\n}\ntypesForNodeCode.push(`}`);\ntypesForNodeCode.push(``);\ntypesForNodeCode.push(`export type ESNodeListener = {`);\nfor (const nodeType of esNodeNames) {\n\tconst argType = `TSESTree.${nodeType}`;\n\ttypesForNodeCode.push(`  ${nodeType}?: (node: ${argType} & ASTNodeWithParent) => void`);\n\ttypesForNodeCode.push(`  '${nodeType}:exit'?: (node: ${argType} & ASTNodeWithParent) => void`);\n\testreeCode.push(`export type ${nodeType} = TSESTree.${nodeType}`);\n}\nfor (const nodeType of esSvelteNodeNames) {\n\tlet argType = `AST.${nodeType}`;\n\tif (nodeType === 'Program') {\n\t\targType = `AST.SvelteProgram`;\n\t}\n\ttypesForNodeCode.push(`  ${nodeType}?: (node: ${argType} & ASTNodeWithParent) => void`);\n\ttypesForNodeCode.push(`  '${nodeType}:exit'?: (node: ${argType} & ASTNodeWithParent) => void`);\n}\ntypesForNodeCode.push(`}`);\ntypesForNodeCode.push(``);\ntypesForNodeCode.push(`export type TSNodeListener = {`);\nfor (const nodeType of tsNodeNames) {\n\tlet argType = `TSESTree.${nodeType}`;\n\tif (nodeType === 'TSIntrinsicKeyword') {\n\t\targType = `TSESTree.Node & { type: AST_NODE_TYPES.${nodeType}}`;\n\t}\n\ttypesForNodeCode.push(`  ${nodeType}?: (node: ${argType} & ASTNodeWithParent) => void`);\n\ttypesForNodeCode.push(`  '${nodeType}:exit'?: (node: ${argType} & ASTNodeWithParent) => void`);\n}\ntypesForNodeCode.push(`}`);\ntypesForNodeCode.push(``);\ntypesForNodeCode.push(`export type SvelteNodeListener = {`);\nfor (const nodeType of svelteNodeNames.filter((k) => !esSvelteNodeNames.includes(k))) {\n\tconst argType = `AST.${nodeType}`;\n\ttypesForNodeCode.push(`  ${nodeType}?: (node: ${argType} & ASTNodeWithParent) => void`);\n\ttypesForNodeCode.push(`  '${nodeType}:exit'?: (node: ${argType} & ASTNodeWithParent) => void`);\n}\ntypesForNodeCode.push(`}`);\n\nestreeCode.push(`}`);\nvoid writeAndFormat(typesForNodeFileURL, typesForNodeCode.join('\\n'));\nvoid writeAndFormat(estreeFileURL, estreeCode.join('\\n'));\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tools/update.ts",
    "content": "import './update-rules';\nimport './update-rulesets';\nimport './update-docs';\nimport './update-readme';\nimport './update-docs-rules-index';\nimport './update-types-for-node';\nimport './update-meta';\nimport './update-rule-types';\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tsconfig.build.json",
    "content": "{\n\t\"extends\": \"./tsconfig.json\",\n\t\"exclude\": [\n\t\t\"tests/**/*\",\n\t\t\"tools/**/*\",\n\t\t\"typings/**/*\",\n\t\t\"vite.config.mts\",\n\t\t\"docs-svelte-kit/**/*.mts\",\n\t\t\"internal-rules/**/*\",\n\t\t\"eslint.config.mts\"\n\t]\n}\n"
  },
  {
    "path": "packages/eslint-plugin-svelte/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"es2020\",\n\t\t\"module\": \"NodeNext\",\n\t\t\"moduleResolution\": \"Node16\",\n\t\t\"lib\": [\"es2020\", \"dom\"],\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"declaration\": true,\n\t\t\"strict\": true,\n\t\t\"noImplicitAny\": true,\n\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"noImplicitReturns\": true,\n\t\t\"noFallthroughCasesInSwitch\": true,\n\t\t\"baseUrl\": \".\",\n\t\t\"esModuleInterop\": true,\n\t\t\"outDir\": \"lib\",\n\t\t\"skipLibCheck\": true,\n\t\t\"resolveJsonModule\": true\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"tests/src/**/*\",\n\t\t\"tests/utils/**/*\",\n\t\t\"tools/**/*\",\n\t\t\"vite.config.mts\",\n\t\t\"docs-svelte-kit/**/*.mts\",\n\t\t\"internal-rules/**/*\",\n\t\t\"eslint.config.mts\"\n\t],\n\t\"exclude\": [\"lib/**/*\", \"tests/fixtures/**/*\"]\n}\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "# Do not adopt new versions of dependency libraries within the first 24 hours of their release (to reduce the risk of supply chain attacks).\nminimumReleaseAge: 1440\n\nminimumReleaseAgeExclude:\n  - '@ota-meshi/*'\n  - '@oxc-project/*'\n  - '@rolldown/*'\n  - '@sveltejs/*'\n  - create-vite\n  - devalue\n  - esm-env\n  - esrap\n  - is-reference\n  - locate-character\n  - rolldown-vite\n  - rolldown\n  - svelte-eslint-parser\n  - svelte\n  - typescript-eslint-parser-for-extra-files\n  - vite\n  - zimmerframe\n  - eslint\n  - '@eslint/*'\n  - eslint-visitor-keys\n  - eslint-scope\n  - espree\n\npackages:\n  - 'packages/*'\n  - 'docs-svelte-kit'\n"
  },
  {
    "path": "prettier.config.cjs",
    "content": "'use strict';\n\nmodule.exports = {\n\tendOfLine: 'lf',\n\tuseTabs: true,\n\tsingleQuote: true,\n\ttrailingComma: 'none',\n\tprintWidth: 100,\n\tplugins: ['prettier-plugin-svelte'],\n\toverrides: [\n\t\t{\n\t\t\tfiles: ['.*rc'],\n\t\t\texcludeFiles: ['.browserslistrc', '.npmrc', '.nvmrc'],\n\t\t\toptions: {\n\t\t\t\tparser: 'json'\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tfiles: ['*.svelte'],\n\t\t\toptions: {\n\t\t\t\tbracketSameLine: false\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tfiles: ['*.md', 'package.json', '**/package.json'],\n\t\t\toptions: {\n\t\t\t\tuseTabs: false,\n\t\t\t\ttabWidth: 2\n\t\t\t}\n\t\t}\n\t]\n};\n"
  },
  {
    "path": "renovate.json",
    "content": "{\n\t\"extends\": [\"config:base\", \":preserveSemverRanges\", \":disableDependencyDashboard\"],\n\t\"packageRules\": [\n\t\t{\n\t\t\t\"updateTypes\": [\"minor\", \"patch\", \"pin\", \"digest\"],\n\t\t\t\"automerge\": true\n\t\t},\n\t\t{\n\t\t\t\"depTypeList\": [\"devDependencies\"],\n\t\t\t\"automerge\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "tools/pkg.pr.new-comment.mjs",
    "content": "/**\n * Used in `/.github/workflows/pkg.pr.new.yml`\n */\nexport default async function ({ github, context, output }) {\n\t// eslint-disable-next-line no-console -- For debugging on github actions.\n\tconsole.log('pkg-pr-new publish output:', JSON.stringify(output));\n\n\tconst sha = output.sha;\n\tconst commitUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${sha}`;\n\n\tconst pullRequestNumber = await getPullRequestNumber();\n\n\tconst packages = output.packages.map((p) => {\n\t\tlet normalizedUrl = p.url;\n\t\tif (pullRequestNumber && p.url.endsWith(sha)) {\n\t\t\tnormalizedUrl = `${p.url.slice(0, -sha.length)}${pullRequestNumber}`;\n\t\t}\n\t\tconst repoPath = `/${context.repo.owner}/${context.repo.repo}/`;\n\t\tnormalizedUrl = normalizedUrl.replace(repoPath, '/');\n\n\t\treturn {\n\t\t\tname: p.name,\n\t\t\turl: normalizedUrl\n\t\t};\n\t});\n\n\tconst botCommentIdentifier = '<!-- posted by pkg.pr.new-comment.mjs -->';\n\n\tconst onlineUrl = new URL(\n\t\t'https://eslint-online-playground.netlify.app/#eslint-plugin-svelte%20with%20typescript'\n\t);\n\tconst overrideDeps = {};\n\tfor (const p of packages) {\n\t\toverrideDeps[p.name] = p.url;\n\t}\n\tonlineUrl.searchParams.set('overrideDeps', JSON.stringify(overrideDeps));\n\tconst body = `${botCommentIdentifier}\n\n## Try the Instant Preview in Online Playground\n\n[ESLint Online Playground](${onlineUrl})\n\n## Install the Instant Preview to Your Local\n\n\\`\\`\\`\nnpm i ${packages.map((p) => p.url).join(' ')}\n\\`\\`\\`\n\n## Published Instant Preview Packages:\n\n${packages.map((p) => `- ${p.name}: ${p.url}`).join('\\n')}\n\n[View Commit](${commitUrl})`;\n\n\tif (pullRequestNumber) {\n\t\tawait createOrUpdateComment(pullRequestNumber);\n\t} else {\n\t\t/* eslint-disable no-console -- For debugging on github actions. */\n\t\tconsole.log(\n\t\t\t'No open pull request found for this push. Logging publish information to console:'\n\t\t);\n\t\tconsole.log(`\\n${'='.repeat(50)}`);\n\t\tconsole.log(body);\n\t\tconsole.log(`\\n${'='.repeat(50)}`);\n\t\t/* eslint-enable no-console -- For debugging on github actions. */\n\t}\n\n\tasync function getPullRequestNumber() {\n\t\treturn output.number;\n\t}\n\n\tasync function findBotComment(issueNumber) {\n\t\tif (!issueNumber) return null;\n\t\tconst comments = await github.rest.issues.listComments({\n\t\t\towner: context.repo.owner,\n\t\t\trepo: context.repo.repo,\n\t\t\t// eslint-disable-next-line camelcase -- The ID defined in the GitHub API.\n\t\t\tissue_number: issueNumber\n\t\t});\n\t\treturn comments.data.find((comment) => comment.body.includes(botCommentIdentifier));\n\t}\n\n\tasync function createOrUpdateComment(issueNumber) {\n\t\tconst existingComment = await findBotComment(issueNumber);\n\t\tif (existingComment) {\n\t\t\tawait github.rest.issues.updateComment({\n\t\t\t\towner: context.repo.owner,\n\t\t\t\trepo: context.repo.repo,\n\t\t\t\t// eslint-disable-next-line camelcase -- The ID defined in the GitHub API.\n\t\t\t\tcomment_id: existingComment.id,\n\t\t\t\tbody\n\t\t\t});\n\t\t} else {\n\t\t\tawait github.rest.issues.createComment({\n\t\t\t\t// eslint-disable-next-line camelcase -- The ID defined in the GitHub API.\n\t\t\t\tissue_number: issueNumber,\n\t\t\t\towner: context.repo.owner,\n\t\t\t\trepo: context.repo.repo,\n\t\t\t\tbody\n\t\t\t});\n\t\t}\n\t}\n}\n"
  }
]