Repository: sveltejs/eslint-plugin-svelte
Pull request #1033 (2025-01-19 02:52:58)

chore!: update recommended config
close: https://github.com/sveltejs/eslint-plugin-svelte/issues/755
close: https://github.com/sveltejs/eslint-plugin-svelte/issues/785
close: https://github.com/sveltejs/eslint-plugin-svelte/issues/894

pkg-pr-new[bot]: 
[Open in Stackblitz](https://pkg.pr.new/template/ccce973a-8c80-4c3a-b84a-a31df1bdebd5)


```
npm i https://pkg.pr.new/eslint-plugin-svelte@1033
```


_commit: <a href="https://github.com/sveltejs/eslint-plugin-svelte/runs/35828623737"><code>44282f1</code></a>_

changeset-bot[bot]: ###  ⚠️  No Changeset found

Latest commit: a3907308b369d7630b614472ecb087f08c91ba44

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. **If these changes should result in a version bump, you need to add a changeset.**

<details><summary>This PR includes no changesets</summary>

  When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

</details>

[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add a changeset to this PR](https://github.com/sveltejs/eslint-plugin-svelte/new/breaking/update-recommended?filename=.changeset/perfect-seahorses-pull.md&value=---%0A%22eslint-plugin-svelte%22%3A%20patch%0A---%0A%0Achore%3A%20update%20recommended%20config%0A)


baseballyama: @ota-meshi 
The current configuration seems quite aggressive. Could you share your thoughts on which rules should be included as recommended?
marekdedic: Hi, thanks, I am thinking about whether these shouldn't be added as well (in decreasing order of certainty):
- `svelte/no-navigation-without-base` - This one warns about what is incorrect code (though it may be fixed in SvelteKit at some point in the future)
- `svelte/button-has-type` - This one is about what is considered best practice
- `svelte/no-unused-class-name` - This one is more about unused code...
baseballyama: > svelte/no-navigation-without-base

I don’t think this needs to be added. (In fact, it’s better not to add it.) This is because it would result in meaningless linting errors for users who don’t use basepath. Only users who use basepath should opt in to this rule.

> svelte/button-has-type

This is not included in the recommended rules for Vue either. IIRC it was added to the Vue's recommended config once before but was removed due to user pushback.
https://github.com/vuejs/eslint-plugin-vue/pull/1432

> svelte/no-unused-class-name

This was initially added, but in the codebases I tested, false positives occurred. Therefore, I judged that it was not mature enough to be included in the recommended rules.

baseballyama: > I am torn on this one - on the one hand, it would be more warnings for users, on the other, I consider not adding the base path to be incorrect - if the code is e.g. reused in the future, this is a serious foot-gun (So much so that the SvelteKit team considers fixing it on their end).

IMO:
Whether to reuse the code with a different basepath is up to each project. If there’s no chance of reuse, we don’t need to consider the basepath at all. If it turns out later that a basepath is needed, we can simply opt into this rule and make adjustments then.

Code is read more often than it is written, so reducing unnecessary noise is important. For projects where the basepath doesn’t need to be considered, the code added by this rule would just become noise.
ota-meshi: The config provided by eslint-plugin-vue follows the Vue style guide, so if something is not mentioned in the style guide, it will not be added to the config. Therefore, the `vue/button-has-type` rule is not included in the config.

However, neither `react/button-has-type` nor `@angular-eslint/template/button-has-type` seem to be included in the config provided by those plugins.
Therefore, it seems reasonable to not include `svelte/button-has-type` in the config either.
baseballyama: I believe we’ve agreed on the recommended config. Finally, I’ll document the changes in detail in the changeset and wrap it up.

Patch:
diff --git a/.changeset/gorgeous-cats-exercise.md b/.changeset/gorgeous-cats-exercise.md
new file mode 100644
index 0000000..2db770b
--- /dev/null
+++ b/.changeset/gorgeous-cats-exercise.md
@@ -0,0 +1,31 @@
+---
+'eslint-plugin-svelte': major
+---
+
+**Enabled in recommended config**:
+- `svelte/infinite-reactive-loop`
+- `svelte/no-dom-manipulating`
+- `svelte/no-dupe-on-directives`
+- `svelte/no-dupe-use-directives`
+- `svelte/no-export-load-in-svelte-module-in-kit-pages`
+- `svelte/no-immutable-reactive-statements`
+- `svelte/no-inspect`
+- `svelte/no-raw-special-elements`
+- `svelte/no-reactive-functions`
+- `svelte/no-reactive-literals`
+- `svelte/no-reactive-reassign`
+- `svelte/no-store-async`
+- `svelte/no-svelte-internal`
+- `svelte/no-useless-children-snippet`
+- `svelte/no-useless-mustaches`
+- `svelte/require-each-key`
+- `svelte/require-event-dispatcher-types`
+- `svelte/require-store-reactive-access`
+- `svelte/require-stores-init`
+- `svelte/valid-each-key`
+- `svelte/valid-prop-names-in-kit-pages`
+
+**Removed from recommended config**:
+- `svelte/valid-compile`
+
+This update introduces breaking changes due to newly enabled rules.
diff --git a/.changeset/old-numbers-pull.md b/.changeset/old-numbers-pull.md
new file mode 100644
index 0000000..9bcf48b
--- /dev/null
+++ b/.changeset/old-numbers-pull.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': patch
+---
+
+fix: account for \n and \r in `TemplateLiteral` handling for the `no-useless-mustaches` rule
diff --git a/README.md b/README.md
index 9ebcfd4..01eb6bd 100644
--- a/README.md
+++ b/README.md
@@ -319,22 +319,22 @@ These rules relate to possible syntax or logic errors in Svelte code:
 
 | Rule ID | Description |    |
 |:--------|:------------|:---|
-| [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. |  |
-| [svelte/no-dom-manipulating](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dom-manipulating/) | disallow DOM manipulating |  |
+| [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: |
+| [svelte/no-dom-manipulating](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dom-manipulating/) | disallow DOM manipulating | :star: |
 | [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: |
-| [svelte/no-dupe-on-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-on-directives/) | disallow duplicate `on:` directives |  |
+| [svelte/no-dupe-on-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-on-directives/) | disallow duplicate `on:` directives | :star: |
 | [svelte/no-dupe-style-properties](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-style-properties/) | disallow duplicate style properties | :star: |
-| [svelte/no-dupe-use-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-use-directives/) | disallow duplicate `use:` directives |  |
+| [svelte/no-dupe-use-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-use-directives/) | disallow duplicate `use:` directives | :star: |
 | [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: |
 | [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: |
-| [svelte/no-raw-special-elements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-raw-special-elements/) | Checks for invalid raw HTML elements | :wrench: |
-| [svelte/no-reactive-reassign](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-reassign/) | disallow reassigning reactive values |  |
+| [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: |
+| [svelte/no-reactive-reassign](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-reassign/) | disallow reassigning reactive values | :star: |
 | [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: |
-| [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 |  |
+| [svelte/no-store-async](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-store-async/) | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features | :star: |
 | [svelte/no-unknown-style-directive-property](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/) | disallow unknown `style:property` | :star: |
 | [svelte/require-store-callbacks-use-set-param](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-callbacks-use-set-param/) | store callbacks must use `set` param |  |
-| [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. | :wrench: |
-| [svelte/valid-compile](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. | :star: |
+| [svelte/require-store-reactive-access](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-reactive-access/) | disallow to use of the store itself as an operand. Need to use $ prefix or get function. | :star::wrench: |
+| [svelte/valid-compile](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. |  |
 
 ## Security Vulnerability
 
@@ -355,23 +355,23 @@ These rules relate to better ways of doing things to help you avoid problems:
 | [svelte/button-has-type](https://sveltejs.github.io/eslint-plugin-svelte/rules/button-has-type/) | disallow usage of button without an explicit type attribute |  |
 | [svelte/no-at-debug-tags](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-debug-tags/) | disallow the use of `{@debug}` | :star: |
 | [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. |  |
-| [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. |  |
+| [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: |
 | [svelte/no-inline-styles](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inline-styles/) | disallow attributes and directives that produce inline styles |  |
-| [svelte/no-inspect](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inspect/) | Warns against the use of `$inspect` directive |  |
-| [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 | :bulb: |
-| [svelte/no-reactive-literals](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-literals/) | don't assign literal values in reactive statements | :bulb: |
-| [svelte/no-svelte-internal](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-svelte-internal/) | svelte/internal will be removed in Svelte 6. |  |
+| [svelte/no-inspect](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inspect/) | Warns against the use of `$inspect` directive | :star: |
+| [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: |
+| [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: |
+| [svelte/no-svelte-internal](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-svelte-internal/) | svelte/internal will be removed in Svelte 6. | :star: |
 | [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 |  |
 | [svelte/no-unused-svelte-ignore](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-svelte-ignore/) | disallow unused svelte-ignore comments | :star: |
-| [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 |  |
-| [svelte/no-useless-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/) | disallow unnecessary mustache interpolations | :wrench: |
+| [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: |
+| [svelte/no-useless-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/) | disallow unnecessary mustache interpolations | :star::wrench: |
 | [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: |
 | [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: |
-| [svelte/require-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/) | require keyed `{#each}` block |  |
-| [svelte/require-event-dispatcher-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/) | require type parameters for `createEventDispatcher` |  |
+| [svelte/require-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/) | require keyed `{#each}` block | :star: |
+| [svelte/require-event-dispatcher-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/) | require type parameters for `createEventDispatcher` | :star: |
 | [svelte/require-optimized-style-attribute](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-optimized-style-attribute/) | require style attributes that can be optimized |  |
-| [svelte/require-stores-init](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/) | require initial value in store |  |
-| [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 |  |
+| [svelte/require-stores-init](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/) | require initial value in store | :star: |
+| [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: |
 
 ## Stylistic Issues
 
@@ -414,9 +414,9 @@ These rules relate to SvelteKit and its best Practices.
 
 | Rule ID | Description |    |
 |:--------|:------------|:---|
-| [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. |  |
+| [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: |
 | [svelte/no-navigation-without-base](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-base/) | disallow using navigation (links, goto, pushState, replaceState) without the base path |  |
-| [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. |  |
+| [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: |
 
 ## Experimental
 
diff --git a/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte b/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte
index f0f7f1d..3248bb5 100644
--- a/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte
+++ b/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte
@@ -7,7 +7,7 @@
 </script>
 
 <ul class="sidebar-menu sidebar-menu--level{level}">
-	{#each children as item}
+	{#each children as item (item.id)}
 		<li
 			class="sidebar-menu-item"
 			class:active={item.active || (item.path && isActive(item.path, $page))}
diff --git a/docs/rules.md b/docs/rules.md
index 5e710c5..5e509b0 100644
--- a/docs/rules.md
+++ b/docs/rules.md
@@ -14,24 +14,24 @@ sidebarDepth: 0
 
 These rules relate to possible syntax or logic errors in Svelte code:
 
-| Rule ID                                                                                          | Description                                                                                                                            |          |
-| :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| [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. |          |
-| [svelte/no-dom-manipulating](./rules/no-dom-manipulating.md)                                     | disallow DOM manipulating                                                                                                              |          |
-| [svelte/no-dupe-else-if-blocks](./rules/no-dupe-else-if-blocks.md)                               | disallow duplicate conditions in `{#if}` / `{:else if}` chains                                                                         | :star:   |
-| [svelte/no-dupe-on-directives](./rules/no-dupe-on-directives.md)                                 | disallow duplicate `on:` directives                                                                                                    |          |
-| [svelte/no-dupe-style-properties](./rules/no-dupe-style-properties.md)                           | disallow duplicate style properties                                                                                                    | :star:   |
-| [svelte/no-dupe-use-directives](./rules/no-dupe-use-directives.md)                               | disallow duplicate `use:` directives                                                                                                   |          |
-| [svelte/no-not-function-handler](./rules/no-not-function-handler.md)                             | disallow use of not function in event handler                                                                                          | :star:   |
-| [svelte/no-object-in-text-mustaches](./rules/no-object-in-text-mustaches.md)                     | disallow objects in text mustache interpolation                                                                                        | :star:   |
-| [svelte/no-raw-special-elements](./rules/no-raw-special-elements.md)                             | Checks for invalid raw HTML elements                                                                                                   | :wrench: |
-| [svelte/no-reactive-reassign](./rules/no-reactive-reassign.md)                                   | disallow reassigning reactive values                                                                                                   |          |
-| [svelte/no-shorthand-style-property-overrides](./rules/no-shorthand-style-property-overrides.md) | disallow shorthand style properties that override related longhand properties                                                          | :star:   |
-| [svelte/no-store-async](./rules/no-store-async.md)                                               | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features                          |          |
-| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md)     | disallow unknown `style:property`                                                                                                      | :star:   |
-| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param                                                                                                   |          |
-| [svelte/require-store-reactive-access](./rules/require-store-reactive-access.md)                 | disallow to use of the store itself as an operand. Need to use $ prefix or get function.                                               | :wrench: |
-| [svelte/valid-compile](./rules/valid-compile.md)                                                 | disallow warnings when compiling.                                                                                                      | :star:   |
+| Rule ID                                                                                          | Description                                                                                                                            |                |
+| :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------- |
+| [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:         |
+| [svelte/no-dom-manipulating](./rules/no-dom-manipulating.md)                                     | disallow DOM manipulating                                                                                                              | :star:         |
+| [svelte/no-dupe-else-if-blocks](./rules/no-dupe-else-if-blocks.md)                               | disallow duplicate conditions in `{#if}` / `{:else if}` chains                                                                         | :star:         |
+| [svelte/no-dupe-on-directives](./rules/no-dupe-on-directives.md)                                 | disallow duplicate `on:` directives                                                                                                    | :star:         |
+| [svelte/no-dupe-style-properties](./rules/no-dupe-style-properties.md)                           | disallow duplicate style properties                                                                                                    | :star:         |
+| [svelte/no-dupe-use-directives](./rules/no-dupe-use-directives.md)                               | disallow duplicate `use:` directives                                                                                                   | :star:         |
+| [svelte/no-not-function-handler](./rules/no-not-function-handler.md)                             | disallow use of not function in event handler                                                                                          | :star:         |
+| [svelte/no-object-in-text-mustaches](./rules/no-object-in-text-mustaches.md)                     | disallow objects in text mustache interpolation                                                                                        | :star:         |
+| [svelte/no-raw-special-elements](./rules/no-raw-special-elements.md)                             | Checks for invalid raw HTML elements                                                                                                   | :star::wrench: |
+| [svelte/no-reactive-reassign](./rules/no-reactive-reassign.md)                                   | disallow reassigning reactive values                                                                                                   | :star:         |
+| [svelte/no-shorthand-style-property-overrides](./rules/no-shorthand-style-property-overrides.md) | disallow shorthand style properties that override related longhand properties                                                          | :star:         |
+| [svelte/no-store-async](./rules/no-store-async.md)                                               | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features                          | :star:         |
+| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md)     | disallow unknown `style:property`                                                                                                      | :star:         |
+| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param                                                                                                   |                |
+| [svelte/require-store-reactive-access](./rules/require-store-reactive-access.md)                 | disallow to use of the store itself as an operand. Need to use $ prefix or get function.                                               | :star::wrench: |
+| [svelte/valid-compile](./rules/valid-compile.md)                                                 | disallow warnings when compiling.                                                                                                      |                |
 
 ## Security Vulnerability
 
@@ -46,29 +46,29 @@ These rules relate to security vulnerabilities in Svelte code:
 
 These rules relate to better ways of doing things to help you avoid problems:
 
-| Rule ID                                                                                  | Description                                                                                                                               |          |
-| :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| [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:   |
-| [svelte/button-has-type](./rules/button-has-type.md)                                     | disallow usage of button without an explicit type attribute                                                                               |          |
-| [svelte/no-at-debug-tags](./rules/no-at-debug-tags.md)                                   | disallow the use of `{@debug}`                                                                                                            | :star:   |
-| [svelte/no-ignored-unsubscribe](./rules/no-ignored-unsubscribe.md)                       | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.                                                  |          |
-| [svelte/no-immutable-reactive-statements](./rules/no-immutable-reactive-statements.md)   | disallow reactive statements that don't reference reactive values.                                                                        |          |
-| [svelte/no-inline-styles](./rules/no-inline-styles.md)                                   | disallow attributes and directives that produce inline styles                                                                             |          |
-| [svelte/no-inspect](./rules/no-inspect.md)                                               | Warns against the use of `$inspect` directive                                                                                             |          |
-| [svelte/no-reactive-functions](./rules/no-reactive-functions.md)                         | it's not necessary to define functions in reactive statements                                                                             | :bulb:   |
-| [svelte/no-reactive-literals](./rules/no-reactive-literals.md)                           | don't assign literal values in reactive statements                                                                                        | :bulb:   |
-| [svelte/no-svelte-internal](./rules/no-svelte-internal.md)                               | svelte/internal will be removed in Svelte 6.                                                                                              |          |
-| [svelte/no-unused-class-name](./rules/no-unused-class-name.md)                           | disallow the use of a class in the template without a corresponding style                                                                 |          |
-| [svelte/no-unused-svelte-ignore](./rules/no-unused-svelte-ignore.md)                     | disallow unused svelte-ignore comments                                                                                                    | :star:   |
-| [svelte/no-useless-children-snippet](./rules/no-useless-children-snippet.md)             | disallow explicit children snippet where it's not needed                                                                                  |          |
-| [svelte/no-useless-mustaches](./rules/no-useless-mustaches.md)                           | disallow unnecessary mustache interpolations                                                                                              | :wrench: |
-| [svelte/prefer-const](./rules/prefer-const.md)                                           | Require `const` declarations for variables that are never reassigned after declared                                                       | :wrench: |
-| [svelte/prefer-destructured-store-props](./rules/prefer-destructured-store-props.md)     | destructure values from object stores for better change tracking & fewer redraws                                                          | :bulb:   |
-| [svelte/require-each-key](./rules/require-each-key.md)                                   | require keyed `{#each}` block                                                                                                             |          |
-| [svelte/require-event-dispatcher-types](./rules/require-event-dispatcher-types.md)       | require type parameters for `createEventDispatcher`                                                                                       |          |
-| [svelte/require-optimized-style-attribute](./rules/require-optimized-style-attribute.md) | require style attributes that can be optimized                                                                                            |          |
-| [svelte/require-stores-init](./rules/require-stores-init.md)                             | require initial value in store                                                                                                            |          |
-| [svelte/valid-each-key](./rules/valid-each-key.md)                                       | enforce keys to use variables defined in the `{#each}` block                                                                              |          |
+| Rule ID                                                                                  | Description                                                                                                                               |                |
+| :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :------------- |
+| [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:         |
+| [svelte/button-has-type](./rules/button-has-type.md)                                     | disallow usage of button without an explicit type attribute                                                                               |                |
+| [svelte/no-at-debug-tags](./rules/no-at-debug-tags.md)                                   | disallow the use of `{@debug}`                                                                                                            | :star:         |
+| [svelte/no-ignored-unsubscribe](./rules/no-ignored-unsubscribe.md)                       | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.                                                  |                |
+| [svelte/no-immutable-reactive-statements](./rules/no-immutable-reactive-statements.md)   | disallow reactive statements that don't reference reactive values.                                                                        | :star:         |
+| [svelte/no-inline-styles](./rules/no-inline-styles.md)                                   | disallow attributes and directives that produce inline styles                                                                             |                |
+| [svelte/no-inspect](./rules/no-inspect.md)                                               | Warns against the use of `$inspect` directive                                                                                             | :star:         |
+| [svelte/no-reactive-functions](./rules/no-reactive-functions.md)                         | it's not necessary to define functions in reactive statements                                                                             | :star::bulb:   |
+| [svelte/no-reactive-literals](./rules/no-reactive-literals.md)                           | don't assign literal values in reactive statements                                                                                        | :star::bulb:   |
+| [svelte/no-svelte-internal](./rules/no-svelte-internal.md)                               | svelte/internal will be removed in Svelte 6.                                                                                              | :star:         |
+| [svelte/no-unused-class-name](./rules/no-unused-class-name.md)                           | disallow the use of a class in the template without a corresponding style                                                                 |                |
+| [svelte/no-unused-svelte-ignore](./rules/no-unused-svelte-ignore.md)                     | disallow unused svelte-ignore comments                                                                                                    | :star:         |
+| [svelte/no-useless-children-snippet](./rules/no-useless-children-snippet.md)             | disallow explicit children snippet where it's not needed                                                                                  | :star:         |
+| [svelte/no-useless-mustaches](./rules/no-useless-mustaches.md)                           | disallow unnecessary mustache interpolations                                                                                              | :star::wrench: |
+| [svelte/prefer-const](./rules/prefer-const.md)                                           | Require `const` declarations for variables that are never reassigned after declared                                                       | :wrench:       |
+| [svelte/prefer-destructured-store-props](./rules/prefer-destructured-store-props.md)     | destructure values from object stores for better change tracking & fewer redraws                                                          | :bulb:         |
+| [svelte/require-each-key](./rules/require-each-key.md)                                   | require keyed `{#each}` block                                                                                                             | :star:         |
+| [svelte/require-event-dispatcher-types](./rules/require-event-dispatcher-types.md)       | require type parameters for `createEventDispatcher`                                                                                       | :star:         |
+| [svelte/require-optimized-style-attribute](./rules/require-optimized-style-attribute.md) | require style attributes that can be optimized                                                                                            |                |
+| [svelte/require-stores-init](./rules/require-stores-init.md)                             | require initial value in store                                                                                                            | :star:         |
+| [svelte/valid-each-key](./rules/valid-each-key.md)                                       | enforce keys to use variables defined in the `{#each}` block                                                                              | :star:         |
 
 ## Stylistic Issues
 
@@ -109,11 +109,11 @@ These rules extend the rules provided by ESLint itself, or other plugins to work
 
 These rules relate to SvelteKit and its best Practices.
 
-| Rule ID                                                                                                        | Description                                                                            |     |
-| :------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :-- |
-| [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.   |     |
-| [svelte/no-navigation-without-base](./rules/no-navigation-without-base.md)                                     | disallow using navigation (links, goto, pushState, replaceState) without the base path |     |
-| [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.                 |     |
+| Rule ID                                                                                                        | Description                                                                            |        |
+| :------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :----- |
+| [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: |
+| [svelte/no-navigation-without-base](./rules/no-navigation-without-base.md)                                     | disallow using navigation (links, goto, pushState, replaceState) without the base path |        |
+| [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: |
 
 ## Experimental
 
diff --git a/docs/rules/infinite-reactive-loop.md b/docs/rules/infinite-reactive-loop.md
index 30da359..aa76e2f 100644
--- a/docs/rules/infinite-reactive-loop.md
+++ b/docs/rules/infinite-reactive-loop.md
@@ -10,6 +10,8 @@ since: 'v2.16.0'
 
 > Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 Svelte runtime prevents calling the same reactive statement twice in a microtask.<br/>
diff --git a/docs/rules/no-dom-manipulating.md b/docs/rules/no-dom-manipulating.md
index 8a0ddec..e6ac3d1 100644
--- a/docs/rules/no-dom-manipulating.md
+++ b/docs/rules/no-dom-manipulating.md
@@ -10,6 +10,8 @@ since: 'v2.13.0'
 
 > disallow DOM manipulating
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 In 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.
diff --git a/docs/rules/no-dupe-on-directives.md b/docs/rules/no-dupe-on-directives.md
index 12823fc..777c9f0 100644
--- a/docs/rules/no-dupe-on-directives.md
+++ b/docs/rules/no-dupe-on-directives.md
@@ -10,6 +10,8 @@ since: 'v2.14.0'
 
 > disallow duplicate `on:` directives
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 We 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.
diff --git a/docs/rules/no-dupe-use-directives.md b/docs/rules/no-dupe-use-directives.md
index da1b6dd..956d695 100644
--- a/docs/rules/no-dupe-use-directives.md
+++ b/docs/rules/no-dupe-use-directives.md
@@ -10,6 +10,8 @@ since: 'v2.14.0'
 
 > disallow duplicate `use:` directives
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 We 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.
diff --git a/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md b/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md
index 45bf702..5c6ccab 100644
--- a/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md
+++ b/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md
@@ -10,6 +10,8 @@ since: 'v2.12.0'
 
 > disallow exporting load functions in `*.svelte` module in SvelteKit page components.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports unexpected exported `load` function at `<script context="module">`.
diff --git a/docs/rules/no-immutable-reactive-statements.md b/docs/rules/no-immutable-reactive-statements.md
index 956e10f..9109a6b 100644
--- a/docs/rules/no-immutable-reactive-statements.md
+++ b/docs/rules/no-immutable-reactive-statements.md
@@ -10,6 +10,8 @@ since: 'v2.27.0'
 
 > disallow reactive statements that don't reference reactive values.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports if all variables referenced in reactive statements are immutable. That reactive statement is immutable and not reactive.
diff --git a/docs/rules/no-inspect.md b/docs/rules/no-inspect.md
index 07eb48d..f671135 100644
--- a/docs/rules/no-inspect.md
+++ b/docs/rules/no-inspect.md
@@ -10,6 +10,8 @@ since: 'v2.45.0'
 
 > Warns against the use of `$inspect` directive
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports usages of `$inspect`.
diff --git a/docs/rules/no-raw-special-elements.md b/docs/rules/no-raw-special-elements.md
index 30d9653..1e6f9bc 100644
--- a/docs/rules/no-raw-special-elements.md
+++ b/docs/rules/no-raw-special-elements.md
@@ -10,6 +10,7 @@ since: 'v3.0.0-next.1'
 
 > Checks for invalid raw HTML elements
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
 
 ## :book: Rule Details
diff --git a/docs/rules/no-reactive-functions.md b/docs/rules/no-reactive-functions.md
index ff88faf..d81f186 100644
--- a/docs/rules/no-reactive-functions.md
+++ b/docs/rules/no-reactive-functions.md
@@ -10,6 +10,7 @@ since: 'v2.5.0'
 
 > it's not necessary to define functions in reactive statements
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).
 
 ## :book: Rule Details
diff --git a/docs/rules/no-reactive-literals.md b/docs/rules/no-reactive-literals.md
index 286eded..d0633ae 100644
--- a/docs/rules/no-reactive-literals.md
+++ b/docs/rules/no-reactive-literals.md
@@ -10,6 +10,7 @@ since: 'v2.4.0'
 
 > don't assign literal values in reactive statements
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).
 
 ## :book: Rule Details
diff --git a/docs/rules/no-reactive-reassign.md b/docs/rules/no-reactive-reassign.md
index 2635d30..210ad9d 100644
--- a/docs/rules/no-reactive-reassign.md
+++ b/docs/rules/no-reactive-reassign.md
@@ -10,6 +10,8 @@ since: 'v2.27.0'
 
 > disallow reassigning reactive values
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule aims to prevent unintended behavior caused by modification or reassignment of reactive values.
diff --git a/docs/rules/no-store-async.md b/docs/rules/no-store-async.md
index 5285688..6cdd6b6 100644
--- a/docs/rules/no-store-async.md
+++ b/docs/rules/no-store-async.md
@@ -10,6 +10,8 @@ since: 'v2.7.0'
 
 > disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports all uses of async/await inside svelte stores.
diff --git a/docs/rules/no-svelte-internal.md b/docs/rules/no-svelte-internal.md
index a1160b2..22c995d 100644
--- a/docs/rules/no-svelte-internal.md
+++ b/docs/rules/no-svelte-internal.md
@@ -10,6 +10,8 @@ since: 'v2.39.0'
 
 > svelte/internal will be removed in Svelte 6.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This 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.
diff --git a/docs/rules/no-useless-children-snippet.md b/docs/rules/no-useless-children-snippet.md
index 6e798ee..e27a1e7 100644
--- a/docs/rules/no-useless-children-snippet.md
+++ b/docs/rules/no-useless-children-snippet.md
@@ -10,6 +10,8 @@ since: 'v3.0.0-next.9'
 
 > disallow explicit children snippet where it's not needed
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 Any 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.
diff --git a/docs/rules/no-useless-mustaches.md b/docs/rules/no-useless-mustaches.md
index b4bf377..5ded185 100644
--- a/docs/rules/no-useless-mustaches.md
+++ b/docs/rules/no-useless-mustaches.md
@@ -10,6 +10,7 @@ since: 'v0.0.4'
 
 > disallow unnecessary mustache interpolations
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
 
 ## :book: Rule Details
diff --git a/docs/rules/require-each-key.md b/docs/rules/require-each-key.md
index 03bf626..af8186b 100644
--- a/docs/rules/require-each-key.md
+++ b/docs/rules/require-each-key.md
@@ -10,6 +10,8 @@ since: 'v2.28.0'
 
 > require keyed `{#each}` block
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports `{#each}` block without key
diff --git a/docs/rules/require-event-dispatcher-types.md b/docs/rules/require-event-dispatcher-types.md
index e89b0ec..7ee6273 100644
--- a/docs/rules/require-event-dispatcher-types.md
+++ b/docs/rules/require-event-dispatcher-types.md
@@ -10,6 +10,8 @@ since: 'v2.16.0'
 
 > require type parameters for `createEventDispatcher`
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This 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).
diff --git a/docs/rules/require-store-reactive-access.md b/docs/rules/require-store-reactive-access.md
index 6ade59c..b8d917c 100644
--- a/docs/rules/require-store-reactive-access.md
+++ b/docs/rules/require-store-reactive-access.md
@@ -10,6 +10,7 @@ since: 'v2.12.0'
 
 > disallow to use of the store itself as an operand. Need to use $ prefix or get function.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
 
 ## :book: Rule Details
diff --git a/docs/rules/require-stores-init.md b/docs/rules/require-stores-init.md
index 13dcc99..177dd3c 100644
--- a/docs/rules/require-stores-init.md
+++ b/docs/rules/require-stores-init.md
@@ -10,6 +10,8 @@ since: 'v2.5.0'
 
 > require initial value in store
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule is aimed to enforce initial values when initializing the Svelte stores.
diff --git a/docs/rules/valid-compile.md b/docs/rules/valid-compile.md
index 8783b30..567ad6c 100644
--- a/docs/rules/valid-compile.md
+++ b/docs/rules/valid-compile.md
@@ -10,8 +10,6 @@ since: 'v0.7.0'
 
 > disallow warnings when compiling.
 
-- :gear: This rule is included in `"plugin:svelte/recommended"`.
-
 ## :book: Rule Details
 
 This rule uses Svelte compiler to check the source code.
diff --git a/docs/rules/valid-each-key.md b/docs/rules/valid-each-key.md
index bf2d476..5e6aa57 100644
--- a/docs/rules/valid-each-key.md
+++ b/docs/rules/valid-each-key.md
@@ -10,6 +10,8 @@ since: 'v2.28.0'
 
 > enforce keys to use variables defined in the `{#each}` block
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports that `{#each}` block keys does not use the variables which are defined by the `{#each}` block.
diff --git a/docs/rules/valid-prop-names-in-kit-pages.md b/docs/rules/valid-prop-names-in-kit-pages.md
index 0400848..7162f4b 100644
--- a/docs/rules/valid-prop-names-in-kit-pages.md
+++ b/docs/rules/valid-prop-names-in-kit-pages.md
@@ -10,6 +10,8 @@ since: 'v2.12.0'
 
 > disallow props other than data or errors in SvelteKit page components.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports unexpected exported variables at `<script>`.<br>
diff --git a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
index 278704d..fc7f089 100644
--- a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
+++ b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
@@ -10,18 +10,38 @@ const config: Linter.Config[] = [
 		rules: {
 			// eslint-plugin-svelte rules
 			'svelte/comment-directive': 'error',
+			'svelte/infinite-reactive-loop': 'error',
 			'svelte/no-at-debug-tags': 'warn',
 			'svelte/no-at-html-tags': 'error',
+			'svelte/no-dom-manipulating': 'error',
 			'svelte/no-dupe-else-if-blocks': 'error',
+			'svelte/no-dupe-on-directives': 'error',
 			'svelte/no-dupe-style-properties': 'error',
+			'svelte/no-dupe-use-directives': 'error',
+			'svelte/no-export-load-in-svelte-module-in-kit-pages': 'error',
+			'svelte/no-immutable-reactive-statements': 'error',
 			'svelte/no-inner-declarations': 'error',
+			'svelte/no-inspect': 'warn',
 			'svelte/no-not-function-handler': 'error',
 			'svelte/no-object-in-text-mustaches': 'error',
+			'svelte/no-raw-special-elements': 'error',
+			'svelte/no-reactive-functions': 'error',
+			'svelte/no-reactive-literals': 'error',
+			'svelte/no-reactive-reassign': 'error',
 			'svelte/no-shorthand-style-property-overrides': 'error',
+			'svelte/no-store-async': 'error',
+			'svelte/no-svelte-internal': 'error',
 			'svelte/no-unknown-style-directive-property': 'error',
 			'svelte/no-unused-svelte-ignore': 'error',
+			'svelte/no-useless-children-snippet': 'error',
+			'svelte/no-useless-mustaches': 'error',
+			'svelte/require-each-key': 'error',
+			'svelte/require-event-dispatcher-types': 'error',
+			'svelte/require-store-reactive-access': 'error',
+			'svelte/require-stores-init': 'error',
 			'svelte/system': 'error',
-			'svelte/valid-compile': 'error'
+			'svelte/valid-each-key': 'error',
+			'svelte/valid-prop-names-in-kit-pages': 'error'
 		}
 	}
 ];
diff --git a/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts b/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts
index ff7c6b4..fba1ac9 100644
--- a/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts
+++ b/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts
@@ -136,7 +136,7 @@ export default createRule('@typescript-eslint/no-unnecessary-condition', {
 			noStrictNullCheck:
 				'This rule requires the `strictNullChecks` compiler option to be turned on to function correctly.'
 		},
-		type: 'suggestion', // "problem", or "layout",
+		type: 'suggestion',
 		deprecated: true,
 		replacedBy: {
 			note: 'This rule is no longer needed when using svelte-eslint-parser>=v0.19.0.'
diff --git a/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts b/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts
index 621dfef..1770f79 100644
--- a/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts
+++ b/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts
@@ -369,8 +369,7 @@ export default createRule('infinite-reactive-loop', {
 			description:
 				"Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.",
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts b/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts
index 0b5e7b7..08145f8 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts
@@ -35,7 +35,7 @@ export default createRule('no-dom-manipulating', {
 		docs: {
 			description: 'disallow DOM manipulating',
 			category: 'Possible Errors',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts
index 9762567..0b1bf87 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts
@@ -9,7 +9,7 @@ export default createRule('no-dupe-on-directives', {
 		docs: {
 			description: 'disallow duplicate `on:` directives',
 			category: 'Possible Errors',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts
index 09f6ef3..9c27fe0 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts
@@ -9,7 +9,7 @@ export default createRule('no-dupe-use-directives', {
 		docs: {
 			description: 'disallow duplicate `use:` directives',
 			category: 'Possible Errors',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts
index 0a39a4e..e4ce141 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts
@@ -7,8 +7,7 @@ export default createRule('no-export-load-in-svelte-module-in-kit-pages', {
 			description:
 				'disallow exporting load functions in `*.svelte` module in SvelteKit page components.',
 			category: 'SvelteKit',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts b/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts
index d6cba52..d9ed4db 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts
@@ -10,8 +10,7 @@ export default createRule('no-immutable-reactive-statements', {
 		docs: {
 			description: "disallow reactive statements that don't reference reactive values.",
 			category: 'Best Practices',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-inspect.ts b/packages/eslint-plugin-svelte/src/rules/no-inspect.ts
index b085d2a..c31c83e 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-inspect.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-inspect.ts
@@ -7,8 +7,7 @@ export default createRule('no-inspect', {
 		docs: {
 			description: 'Warns against the use of `$inspect` directive',
 			category: 'Best Practices',
-			// TODO: Enable recommended in major version
-			recommended: false,
+			recommended: true,
 			default: 'warn'
 		},
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts b/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts
index 84394c7..094090c 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts
@@ -33,7 +33,7 @@ export default createRule('no-not-function-handler', {
 		messages: {
 			unexpected: 'Unexpected {{phrase}} in event handler.'
 		},
-		type: 'problem' // "problem", or "layout",
+		type: 'problem'
 	},
 	create(context) {
 		/** Find data expression */
diff --git a/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts
index 473afc9..070a698 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts
@@ -19,7 +19,7 @@ export default createRule('no-object-in-text-mustaches', {
 		messages: {
 			unexpected: 'Unexpected {{phrase}} in text mustache interpolation.'
 		},
-		type: 'problem' // "problem", or "layout",
+		type: 'problem'
 	},
 	create(context) {
 		return {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts b/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts
index 14fd963..36c8829 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts
@@ -9,8 +9,7 @@ export default createRule('no-raw-special-elements', {
 		docs: {
 			description: 'Checks for invalid raw HTML elements',
 			category: 'Possible Errors',
-			// TODO: Switch to recommended in the major version
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts
index 0fa6974..43ca14b 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts
@@ -8,7 +8,7 @@ export default createRule('no-reactive-functions', {
 		docs: {
 			description: "it's not necessary to define functions in reactive statements",
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		hasSuggestions: true,
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts
index c814ed3..9931360 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts
@@ -7,7 +7,7 @@ export default createRule('no-reactive-literals', {
 		docs: {
 			description: "don't assign literal values in reactive statements",
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		hasSuggestions: true,
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts
index fb357cf..f379317 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts
@@ -9,8 +9,7 @@ export default createRule('no-reactive-reassign', {
 		docs: {
 			description: 'disallow reassigning reactive values',
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [
 			{
diff --git a/packages/eslint-plugin-svelte/src/rules/no-store-async.ts b/packages/eslint-plugin-svelte/src/rules/no-store-async.ts
index aee2e1f..66ba546 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-store-async.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-store-async.ts
@@ -7,9 +7,7 @@ export default createRule('no-store-async', {
 			description:
 				'disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features',
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			// recommended: true,
-			recommended: false,
+			recommended: true,
 			default: 'error'
 		},
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts b/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts
index de3b67d..38cab21 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts
@@ -6,9 +6,7 @@ export default createRule('no-svelte-internal', {
 		docs: {
 			description: 'svelte/internal will be removed in Svelte 6.',
 			category: 'Best Practices',
-			// TODO Switch to recommended in the major version.
-			// recommended: true,
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts b/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts
index 361f58b..28d86e8 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts
@@ -5,7 +5,7 @@ export default createRule('no-useless-children-snippet', {
 		docs: {
 			description: "disallow explicit children snippet where it's not needed",
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts
index 56c80c3..169cc8e 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts
@@ -20,7 +20,7 @@ export default createRule('no-useless-mustaches', {
 		docs: {
 			description: 'disallow unnecessary mustache interpolations',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		fixable: 'code',
 		schema: [
@@ -81,6 +81,10 @@ export default createRule('no-useless-mustaches', {
 				return;
 			}
 
+			if (expression.type === 'TemplateLiteral' && /[\n\r]/.test(rawValue)) {
+				return;
+			}
+
 			let hasEscape = false;
 			if (rawValue !== strValue) {
 				// check escapes
diff --git a/packages/eslint-plugin-svelte/src/rules/require-each-key.ts b/packages/eslint-plugin-svelte/src/rules/require-each-key.ts
index 7303427..1e7916b 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-each-key.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-each-key.ts
@@ -6,7 +6,7 @@ export default createRule('require-each-key', {
 		docs: {
 			description: 'require keyed `{#each}` block',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: { expectedKey: 'Each block should have a key' },
diff --git a/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts b/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts
index f40c6b9..41f2dbf 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts
@@ -9,7 +9,7 @@ export default createRule('require-event-dispatcher-types', {
 		docs: {
 			description: 'require type parameters for `createEventDispatcher`',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts b/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts
index 957a497..cfeed35 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts
@@ -10,9 +10,7 @@ export default createRule('require-store-reactive-access', {
 			description:
 				'disallow to use of the store itself as an operand. Need to use $ prefix or get function.',
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			// recommended: true,
-			recommended: false
+			recommended: true
 		},
 		fixable: 'code',
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts b/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts
index 3811304..820267e 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts
@@ -6,7 +6,7 @@ export default createRule('require-stores-init', {
 		docs: {
 			description: 'require initial value in store',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts b/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts
index 992cc55..ce68c44 100644
--- a/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts
+++ b/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts
@@ -24,7 +24,7 @@ export default createRule('shorthand-attribute', {
 			expectedShorthand: 'Expected shorthand attribute.',
 			expectedRegular: 'Expected regular attribute syntax.'
 		},
-		type: 'layout' // "problem", or "layout",
+		type: 'layout'
 	},
 	create(context) {
 		const sourceCode = getSourceCode(context);
diff --git a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts
index 178fe3b..097133f 100644
--- a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts
+++ b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts
@@ -30,7 +30,7 @@ export default createRule('valid-compile', {
 		docs: {
 			description: 'disallow warnings when compiling.',
 			category: 'Possible Errors',
-			recommended: true
+			recommended: false
 		},
 		schema: [
 			{
diff --git a/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts b/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts
index 5bcc29d..af2f223 100644
--- a/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts
+++ b/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts
@@ -7,8 +7,7 @@ export default createRule('valid-each-key', {
 		docs: {
 			description: 'enforce keys to use variables defined in the `{#each}` block',
 			category: 'Best Practices',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts
index 9519414..e846110 100644
--- a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts
+++ b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts
@@ -27,8 +27,7 @@ export default createRule('valid-prop-names-in-kit-pages', {
 		docs: {
 			description: 'disallow props other than data or errors in SvelteKit page components.',
 			category: 'SvelteKit',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {


Test patch:
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte
new file mode 100644
index 0000000..18ac5de
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte
@@ -0,0 +1,5 @@
+<HyperMD
+	value={`# Doc
+
+Text goes here`}
+/>