diff --git a/crates/biome_js_analyze/src/analyzers/a11y/no_svg_without_title.rs b/crates/biome_js_analyze/src/analyzers/a11y/no_svg_without_title.rs
index b263986a981d..3f304f9c80bb 100644
--- a/crates/biome_js_analyze/src/analyzers/a11y/no_svg_without_title.rs
+++ b/crates/biome_js_analyze/src/analyzers/a11y/no_svg_without_title.rs
@@ -36,7 +36,7 @@ declare_rule! {
///
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
///
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
///
diff --git a/crates/biome_js_analyze/src/aria_analyzers/a11y/no_interactive_element_to_noninteractive_role.rs b/crates/biome_js_analyze/src/aria_analyzers/a11y/no_interactive_element_to_noninteractive_role.rs
index 65322db5964a..564bfc186c83 100644
--- a/crates/biome_js_analyze/src/aria_analyzers/a11y/no_interactive_element_to_noninteractive_role.rs
+++ b/crates/biome_js_analyze/src/aria_analyzers/a11y/no_interactive_element_to_noninteractive_role.rs
@@ -26,7 +26,7 @@ declare_rule! {
/// ;
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
/// ;
diff --git a/crates/biome_js_analyze/src/aria_analyzers/a11y/no_noninteractive_tabindex.rs b/crates/biome_js_analyze/src/aria_analyzers/a11y/no_noninteractive_tabindex.rs
index b284d7eeb724..eee88fe4f567 100644
--- a/crates/biome_js_analyze/src/aria_analyzers/a11y/no_noninteractive_tabindex.rs
+++ b/crates/biome_js_analyze/src/aria_analyzers/a11y/no_noninteractive_tabindex.rs
@@ -34,7 +34,7 @@ declare_rule! {
///
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
///
diff --git a/crates/biome_js_analyze/src/aria_analyzers/a11y/no_redundant_roles.rs b/crates/biome_js_analyze/src/aria_analyzers/a11y/no_redundant_roles.rs
index b8cd2f0f1c3d..a3dbdfdf58a2 100644
--- a/crates/biome_js_analyze/src/aria_analyzers/a11y/no_redundant_roles.rs
+++ b/crates/biome_js_analyze/src/aria_analyzers/a11y/no_redundant_roles.rs
@@ -29,7 +29,7 @@ declare_rule! {
/// title
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
///
diff --git a/crates/biome_js_analyze/src/aria_analyzers/a11y/use_aria_activedescendant_with_tabindex.rs b/crates/biome_js_analyze/src/aria_analyzers/a11y/use_aria_activedescendant_with_tabindex.rs
index 3c28b0698be1..3feac574f7ae 100644
--- a/crates/biome_js_analyze/src/aria_analyzers/a11y/use_aria_activedescendant_with_tabindex.rs
+++ b/crates/biome_js_analyze/src/aria_analyzers/a11y/use_aria_activedescendant_with_tabindex.rs
@@ -38,7 +38,7 @@ declare_rule! {
///
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
///
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/a11y/use_button_type.rs b/crates/biome_js_analyze/src/semantic_analyzers/a11y/use_button_type.rs
index a081e60ebce9..4c2f7746fb2b 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/a11y/use_button_type.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/a11y/use_button_type.rs
@@ -28,7 +28,7 @@ declare_rule! {
/// React.createElement('button');
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
/// <>
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_fragments.rs b/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_fragments.rs
index b20abac88581..f6343f8a7b90 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_fragments.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_fragments.rs
@@ -44,7 +44,7 @@ declare_rule! {
/// <>>
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```jsx
/// <>
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_this_alias.rs b/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_this_alias.rs
index d3805ca0097f..c2d39a9ee649 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_this_alias.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/complexity/no_useless_this_alias.rs
@@ -35,7 +35,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// class A {
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_global_object_calls.rs b/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_global_object_calls.rs
index 53f20aabd2f1..82caf68b14f8 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_global_object_calls.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_global_object_calls.rs
@@ -67,7 +67,7 @@ declare_rule! {
/// var newIntl = new Intl();
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// function area(r) {
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_invalid_new_builtin.rs b/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_invalid_new_builtin.rs
index 7d798fe7f9e6..1b72049f9b88 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_invalid_new_builtin.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/correctness/no_invalid_new_builtin.rs
@@ -32,7 +32,7 @@ declare_rule! {
/// let bar = new BigInt(9007199254740991);
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// let foo = Symbol('foo');
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_exhaustive_dependencies.rs b/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_exhaustive_dependencies.rs
index 3e36e7749f0d..5d2d5a8da100 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_exhaustive_dependencies.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_exhaustive_dependencies.rs
@@ -94,7 +94,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// import { useEffect } from "react";
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_hook_at_top_level.rs b/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_hook_at_top_level.rs
index 6b3929272c1c..8aa9325805df 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_hook_at_top_level.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/correctness/use_hook_at_top_level.rs
@@ -54,7 +54,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// function Component1() {
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_global_assign.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_global_assign.rs
index e690aa2448de..96fdd26abbc0 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_global_assign.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_global_assign.rs
@@ -30,7 +30,7 @@ declare_rule! {
/// undefined = true;
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// a = 0;
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_invalid_use_before_declaration.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_invalid_use_before_declaration.rs
index 9a262c21692e..f7bd8a751dfa 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_invalid_use_before_declaration.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_invalid_use_before_declaration.rs
@@ -37,7 +37,7 @@ declare_rule! {
/// function f(a = b, b = 0) {}
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// f();
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_misleading_character_class.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_misleading_character_class.rs
index 09a2e460d403..a7ef5c31de1f 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_misleading_character_class.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_misleading_character_class.rs
@@ -51,7 +51,7 @@ declare_rule! {
/// /^[👍]$/; // surrogate pair without u flag
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// /^[abc]$/;
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_then_property.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_then_property.rs
index 50e2833d14ab..5c2c45235d1c 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_then_property.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_then_property.rs
@@ -61,7 +61,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// export {then as success};
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_unused_imports.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_unused_imports.rs
index ace9ab68a28e..47a4f932daaa 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_unused_imports.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/no_unused_imports.rs
@@ -52,7 +52,7 @@ declare_rule! {
/// export { B }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```ts
/// import { A, type B } from 'mod';
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_export_type.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_export_type.rs
index e13189192155..c696fc90cef8 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_export_type.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_export_type.rs
@@ -43,7 +43,7 @@ declare_rule! {
/// export { type X, type Y };
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// class C {}
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_for_of.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_for_of.rs
index 979e566c8d01..9821cc890254 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_for_of.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_for_of.rs
@@ -25,7 +25,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// for (let i = 0; i < array.length; i++) {
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_import_type.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_import_type.rs
index 597ec492d9f0..b649d41aa304 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_import_type.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_import_type.rs
@@ -44,7 +44,7 @@ declare_rule! {
/// import { type A, type B } from "./mod.js";
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```ts
/// import type { A } from "./mod.js";
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_number_namespace.rs b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_number_namespace.rs
index d7d4f1949607..703b5d841559 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_number_namespace.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/nursery/use_number_namespace.rs
@@ -43,7 +43,7 @@ declare_rule! {
/// -Infinity; // true
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// Number.parseInt("1"); // false
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/performance/no_accumulating_spread.rs b/crates/biome_js_analyze/src/semantic_analyzers/performance/no_accumulating_spread.rs
index 3ba228774986..7eca61334598 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/performance/no_accumulating_spread.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/performance/no_accumulating_spread.rs
@@ -38,7 +38,7 @@ declare_rule! {
/// a.reduce((acc, val) => ({...acc, [val]: val}), {});
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// var a = ['a', 'b', 'c'];
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/style/no_parameter_assign.rs b/crates/biome_js_analyze/src/semantic_analyzers/style/no_parameter_assign.rs
index 1fd106e3c430..1c6b6f18b1fc 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/style/no_parameter_assign.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/style/no_parameter_assign.rs
@@ -45,7 +45,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// function f(param) {
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/style/use_const.rs b/crates/biome_js_analyze/src/semantic_analyzers/style/use_const.rs
index 356579bf1594..55530a015b0a 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/style/use_const.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/style/use_const.rs
@@ -44,7 +44,7 @@ declare_rule! {
/// }
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// let a = 2;
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_console_log.rs b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_console_log.rs
index 74ad784ce3f8..4c3eca5edd5c 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_console_log.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_console_log.rs
@@ -19,7 +19,7 @@ declare_rule! {
/// console.log()
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// console.info("info");
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_function_assign.rs b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_function_assign.rs
index fef9c20b4238..9046eaeb131a 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_function_assign.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_function_assign.rs
@@ -50,7 +50,7 @@ declare_rule! {
/// })();
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// function foo() {
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_finite.rs b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_finite.rs
index ffd044846723..d824214259b0 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_finite.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_finite.rs
@@ -24,7 +24,7 @@ declare_rule! {
/// isFinite(false); // true
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// Number.isFinite(false); // false
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_nan.rs b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_nan.rs
index be63c78b22e9..81701a1b7440 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_nan.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_global_is_nan.rs
@@ -24,7 +24,7 @@ declare_rule! {
/// isNaN({}); // true
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// Number.isNaN({}); // false
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_unsafe_declaration_merging.rs b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_unsafe_declaration_merging.rs
index 5caab8f56b01..a57deed43a2d 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_unsafe_declaration_merging.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/no_unsafe_declaration_merging.rs
@@ -28,7 +28,7 @@ declare_rule! {
/// foo.f(); // Runtime Error: Cannot read properties of undefined.
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```ts
/// interface Foo {}
diff --git a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/use_is_array.rs b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/use_is_array.rs
index d6e1ffeb7011..1c16518d5e12 100644
--- a/crates/biome_js_analyze/src/semantic_analyzers/suspicious/use_is_array.rs
+++ b/crates/biome_js_analyze/src/semantic_analyzers/suspicious/use_is_array.rs
@@ -29,7 +29,7 @@ declare_rule! {
/// if (xs instanceof Array) {}
/// ```
///
- /// ## Valid
+ /// ### Valid
///
/// ```js
/// const xs = [];
diff --git a/website/src/content/docs/linter/rules-sources.mdx b/website/src/content/docs/linter/rules-sources.mdx
index 7e1caba35aaa..d22f14dc1d05 100644
--- a/website/src/content/docs/linter/rules-sources.mdx
+++ b/website/src/content/docs/linter/rules-sources.mdx
@@ -3,16 +3,34 @@ title: Rules sources
description: A page that maps lint rules from other sources to Biome
---
+## Biome exclusive rules
+- [noAccumulatingSpread](/linter/rules/no-accumulating-spread)
+- [noConstEnum](/linter/rules/no-const-enum)
+- [noDelete](/linter/rules/no-delete)
+- [noGlobalIsFinite](/linter/rules/no-global-is-finite)
+- [noGlobalIsNan](/linter/rules/no-global-is-nan)
+- [noImplicitAnyLet](/linter/rules/no-implicit-any-let)
+- [noRedundantUseStrict](/linter/rules/no-redundant-use-strict)
+- [noRenderReturnValue](/linter/rules/no-render-return-value)
+- [noShoutyConstants](/linter/rules/no-shouty-constants)
+- [noSvgWithoutTitle](/linter/rules/no-svg-without-title)
+- [noUnnecessaryContinue](/linter/rules/no-unnecessary-continue)
+- [noVoidTypeReturn](/linter/rules/no-void-type-return)
+- [useSimpleNumberKeys](/linter/rules/use-simple-number-keys)
+- [useSimplifiedLogicExpression](/linter/rules/use-simplified-logic-expression)
+- [useSingleCaseStatement](/linter/rules/use-single-case-statement)
+- [useWhile](/linter/rules/use-while)
+## Rules from other sources
:::note
Some **Biome** rules might **not** have options, compared to the original rule.
:::
-## Clippy
+### Clippy
| Clippy rule name | Biome rule name |
| ---- | ---- |
-| [approx_constant](https://rust-lang.github.io/rust-clippy/master/#/approx_constant) |[noApproximativeNumericConstant](/lint/rules/no-approximative-numeric-constant) (inspired) |
+| [approx_constant](https://rust-lang.github.io/rust-clippy/master/#/approx_constant) |[noApproximativeNumericConstant](/linter/rules/no-approximative-numeric-constant) (inspired) |
| [match_str_case_mismatch](https://rust-lang.github.io/rust-clippy/master/#/match_str_case_mismatch) |[noStringCaseMismatch](/linter/rules/no-string-case-mismatch) |
| [misrefactored_assign_op](https://rust-lang.github.io/rust-clippy/master/#/misrefactored_assign_op) |[noMisrefactoredShorthandAssign](/linter/rules/no-misrefactored-shorthand-assign) |
-## ESLint
+### ESLint
| ESLint rule name | Biome rule name |
| ---- | ---- |
| [constructor-super](https://eslint.org/docs/latest/rules/constructor-super) |[noInvalidConstructorSuper](/linter/rules/no-invalid-constructor-super) |
@@ -87,16 +105,16 @@ Some **Biome** rules might **not** have options, compared to the original rule.
| [prefer-exponentiation-operator](https://eslint.org/docs/latest/rules/prefer-exponentiation-operator) |[useExponentiationOperator](/linter/rules/use-exponentiation-operator) |
| [prefer-numeric-literals](https://eslint.org/docs/latest/rules/prefer-numeric-literals) |[useNumericLiterals](/linter/rules/use-numeric-literals) |
| [prefer-regex-literals](https://eslint.org/docs/latest/rules/prefer-regex-literals) |[useRegexLiterals](/linter/rules/use-regex-literals) |
-| [prefer-rest-params](https://eslint.org/docs/latest/rules/prefer-rest-params) |[noArguments](/lint/rules/no-arguments) (inspired) |
+| [prefer-rest-params](https://eslint.org/docs/latest/rules/prefer-rest-params) |[noArguments](/linter/rules/no-arguments) (inspired) |
| [prefer-template](https://eslint.org/docs/latest/rules/prefer-template) |[useTemplate](/linter/rules/use-template) |
| [require-yield](https://eslint.org/docs/latest/rules/require-yield) |[useYield](/linter/rules/use-yield) |
| [use-isnan](https://eslint.org/docs/latest/rules/use-isnan) |[useIsNan](/linter/rules/use-is-nan) |
| [valid-typeof](https://eslint.org/docs/latest/rules/valid-typeof) |[useValidTypeof](/linter/rules/use-valid-typeof) |
-## eslint-plugin-import
+### eslint-plugin-import
| eslint-plugin-import rule name | Biome rule name |
| ---- | ---- |
-| [no-default-export](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-default-export.md) |[noDefaultExport](/lint/rules/no-default-export) (inspired) |
-## eslint-plugin-jsx-a11y
+| [no-default-export](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-default-export.md) |[noDefaultExport](/linter/rules/no-default-export) (inspired) |
+### eslint-plugin-jsx-a11y
| eslint-plugin-jsx-a11y rule name | Biome rule name |
| ---- | ---- |
| [alt-text](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md) |[useAltText](/linter/rules/use-alt-text) |
@@ -114,7 +132,7 @@ Some **Biome** rules might **not** have options, compared to the original rule.
| [lang](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/lang.md) |[useValidLang](/linter/rules/use-valid-lang) |
| [media-has-caption](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/media-has-caption.md) |[useMediaCaption](/linter/rules/use-media-caption) |
| [mouse-events-have-key-events](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/mouse-events-have-key-events.md) |[useKeyWithMouseEvents](/linter/rules/use-key-with-mouse-events) |
-| [no-access-key](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-access-key.md) |[noAccessKey](/lint/rules/no-access-key) (inspired) |
+| [no-access-key](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-access-key.md) |[noAccessKey](/linter/rules/no-access-key) (inspired) |
| [no-aria-hidden-on-focusable](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-aria-hidden-on-focusable.md) |[noAriaHiddenOnFocusable](/linter/rules/no-aria-hidden-on-focusable) |
| [no-autofocus](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-autofocus.md) |[noAutofocus](/linter/rules/no-autofocus) |
| [no-distracting-elements](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-distracting-elements.md) |[noDistractingElements](/linter/rules/no-distracting-elements) |
@@ -125,11 +143,11 @@ Some **Biome** rules might **not** have options, compared to the original rule.
| [role-has-required-aria-props](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-has-required-aria-props.md) |[useAriaPropsForRole](/linter/rules/use-aria-props-for-role) |
| [scope](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/scope.md) |[noHeaderScope](/linter/rules/no-header-scope) |
| [tabindex-no-positive](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/tabindex-no-positive.md) |[noPositiveTabindex](/linter/rules/no-positive-tabindex) |
-## eslint-plugin-mysticates
+### eslint-plugin-mysticates
| eslint-plugin-mysticates rule name | Biome rule name |
| ---- | ---- |
-| [no-this-in-static](https://github.com/mysticatea/eslint-plugin/blob/master/docs/rules/no-this-in-static.md) |[noThisInStatic](/lint/rules/no-this-in-static) (inspired) |
-## eslint-plugin-react
+| [no-this-in-static](https://github.com/mysticatea/eslint-plugin/blob/master/docs/rules/no-this-in-static.md) |[noThisInStatic](/linter/rules/no-this-in-static) (inspired) |
+### eslint-plugin-react
| eslint-plugin-react rule name | Biome rule name |
| ---- | ---- |
| [button-has-type](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/button-has-type.md) |[useButtonType](/linter/rules/use-button-type) |
@@ -139,29 +157,29 @@ Some **Biome** rules might **not** have options, compared to the original rule.
| [jsx-no-duplicate-props](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md) |[noDuplicateJsxProps](/linter/rules/no-duplicate-jsx-props) |
| [jsx-no-target-blank](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md) |[noBlankTarget](/linter/rules/no-blank-target) |
| [jsx-no-useless-fragment](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md) |[noUselessFragments](/linter/rules/no-useless-fragments) |
-| [no-array-index-key](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md) |[noArrayIndexKey](/lint/rules/no-array-index-key) (inspired) |
+| [no-array-index-key](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md) |[noArrayIndexKey](/linter/rules/no-array-index-key) (inspired) |
| [no-children-prop](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md) |[noChildrenProp](/linter/rules/no-children-prop) |
| [no-danger](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger.md) |[noDangerouslySetInnerHtmlWithChildren](/linter/rules/no-dangerously-set-inner-html-with-children) |
| [no-danger-with-children](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md) |[noDangerouslySetInnerHtml](/linter/rules/no-dangerously-set-inner-html) |
| [void-dom-elements-no-children](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md) |[noVoidElementsWithChildren](/linter/rules/no-void-elements-with-children) |
-## eslint-plugin-react-hooks
+### eslint-plugin-react-hooks
| eslint-plugin-react-hooks rule name | Biome rule name |
| ---- | ---- |
-| [exhaustive-deps](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md) |[useExhaustiveDependencies](/lint/rules/use-exhaustive-dependencies) (inspired) |
+| [exhaustive-deps](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md) |[useExhaustiveDependencies](/linter/rules/use-exhaustive-dependencies) (inspired) |
| [rules-of-hooks](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md) |[useHookAtTopLevel](/linter/rules/use-hook-at-top-level) |
-## eslint-plugin-sonarjs
+### eslint-plugin-sonarjs
| eslint-plugin-sonarjs rule name | Biome rule name |
| ---- | ---- |
-| [cognitive-complexity](https://github.com/SonarSource/eslint-plugin-sonarjs/blob/HEAD/docs/rules/cognitive-complexity.md) |[noExcessiveCognitiveComplexity](/lint/rules/no-excessive-cognitive-complexity) (inspired) |
-## eslint-plugin-stylistic
+| [cognitive-complexity](https://github.com/SonarSource/eslint-plugin-sonarjs/blob/HEAD/docs/rules/cognitive-complexity.md) |[noExcessiveCognitiveComplexity](/linter/rules/no-excessive-cognitive-complexity) (inspired) |
+### eslint-plugin-stylistic
| eslint-plugin-stylistic rule name | Biome rule name |
| ---- | ---- |
-| [jsx-self-closing-comp](https://eslint.style/rules/default/jsx-self-closing-comp) |[useSelfClosingElements](/lint/rules/use-self-closing-elements) (inspired) |
-## eslint-plugin-typescript
+| [jsx-self-closing-comp](https://eslint.style/rules/default/jsx-self-closing-comp) |[useSelfClosingElements](/linter/rules/use-self-closing-elements) (inspired) |
+### eslint-plugin-typescript
| eslint-plugin-typescript rule name | Biome rule name |
| ---- | ---- |
| [array-type](https://typescript-eslint.io/rules/array-type) |[useShorthandArrayType](/linter/rules/use-shorthand-array-type) (inspired) |
-| [ban-types](https://typescript-eslint.io/rules/ban-types) |[noBannedTypes](/lint/rules/no-banned-types) (inspired) |
+| [ban-types](https://typescript-eslint.io/rules/ban-types) |[noBannedTypes](/linter/rules/no-banned-types) (inspired) |
| [naming-convention](https://typescript-eslint.io/rules/naming-convention) |[useNamingConvention](/linter/rules/use-naming-convention) (inspired) |
| [no-empty-interface](https://typescript-eslint.io/rules/no-empty-interface) |[noEmptyInterface](/linter/rules/no-empty-interface) (inspired) |
| [no-explicit-any](https://typescript-eslint.io/rules/no-explicit-any) |[noExplicitAny](/linter/rules/no-explicit-any) |
@@ -185,10 +203,10 @@ Some **Biome** rules might **not** have options, compared to the original rule.
| [prefer-literal-enum-member](https://typescript-eslint.io/rules/prefer-literal-enum-member) |[useLiteralEnumMembers](/linter/rules/use-literal-enum-members) |
| [prefer-namespace-keyword](https://typescript-eslint.io/rules/prefer-namespace-keyword) |[useNamespaceKeyword](/linter/rules/use-namespace-keyword) |
| [prefer-optional-chain](https://typescript-eslint.io/rules/prefer-optional-chain) |[useOptionalChain](/linter/rules/use-optional-chain) |
-## eslint-plugin-unicorn
+### eslint-plugin-unicorn
| eslint-plugin-unicorn rule name | Biome rule name |
| ---- | ---- |
-| [no-array-for-each](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-array-for-each.md) |[noForEach](/lint/rules/no-for-each) (inspired) |
+| [no-array-for-each](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-array-for-each.md) |[noForEach](/linter/rules/no-for-each) (inspired) |
| [no-instanceof-array](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-instanceof-array.md) |[useIsArray](/linter/rules/use-is-array) |
| [no-useless-switch-case](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-useless-switch-case.md) |[noUselessSwitchCase](/linter/rules/no-useless-switch-case) |
| [prefer-array-flat-map](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-array-flat-map.md) |[useFlatMap](/linter/rules/use-flat-map) |
diff --git a/website/src/content/docs/linter/rules/no-accumulating-spread.md b/website/src/content/docs/linter/rules/no-accumulating-spread.md
index 69f85c1da5b4..5e62e575d7bc 100644
--- a/website/src/content/docs/linter/rules/no-accumulating-spread.md
+++ b/website/src/content/docs/linter/rules/no-accumulating-spread.md
@@ -81,7 +81,7 @@ a.reduce((acc, val) => ({...acc, [val]: val}), {});
-## Valid
+### Valid
```jsx
var a = ['a', 'b', 'c'];
diff --git a/website/src/content/docs/linter/rules/no-approximative-numeric-constant.md b/website/src/content/docs/linter/rules/no-approximative-numeric-constant.md
index f20c88406500..91b8bb6de7e3 100644
--- a/website/src/content/docs/linter/rules/no-approximative-numeric-constant.md
+++ b/website/src/content/docs/linter/rules/no-approximative-numeric-constant.md
@@ -44,7 +44,7 @@ let x = 2.302;
-## Valid
+### Valid
```jsx
let x = Math.PI;
diff --git a/website/src/content/docs/linter/rules/no-aria-hidden-on-focusable.md b/website/src/content/docs/linter/rules/no-aria-hidden-on-focusable.md
index 3223f53339be..e5eacb3f5dab 100644
--- a/website/src/content/docs/linter/rules/no-aria-hidden-on-focusable.md
+++ b/website/src/content/docs/linter/rules/no-aria-hidden-on-focusable.md
@@ -60,7 +60,7 @@ This can lead to confusion or unexpected behavior for screen reader users.
│ -------------------
-## Valid
+### Valid
```jsx
diff --git a/website/src/content/docs/linter/rules/no-aria-unsupported-elements.md b/website/src/content/docs/linter/rules/no-aria-unsupported-elements.md
index 7a9ad2bf98ab..537b4a988776 100644
--- a/website/src/content/docs/linter/rules/no-aria-unsupported-elements.md
+++ b/website/src/content/docs/linter/rules/no-aria-unsupported-elements.md
@@ -56,7 +56,7 @@ Enforce that elements that do not support ARIA roles, states, and properties do
│ ---------------------
-## Valid
+### Valid
```jsx
diff --git a/website/src/content/docs/linter/rules/no-console-log.md b/website/src/content/docs/linter/rules/no-console-log.md
index 4dd3f32fe7d3..5867a05aca23 100644
--- a/website/src/content/docs/linter/rules/no-console-log.md
+++ b/website/src/content/docs/linter/rules/no-console-log.md
@@ -34,7 +34,7 @@ console.log()
│ -------------
-## Valid
+### Valid
```jsx
console.info("info");
diff --git a/website/src/content/docs/linter/rules/no-default-export.md b/website/src/content/docs/linter/rules/no-default-export.md
index c5a9b6f67b40..a75f93c97bfa 100644
--- a/website/src/content/docs/linter/rules/no-default-export.md
+++ b/website/src/content/docs/linter/rules/no-default-export.md
@@ -103,7 +103,7 @@ export { X as default };
-## Valid
+### Valid
```jsx
export function f () {};
diff --git a/website/src/content/docs/linter/rules/no-duplicate-class-members.md b/website/src/content/docs/linter/rules/no-duplicate-class-members.md
index e428f582762a..990053d21757 100644
--- a/website/src/content/docs/linter/rules/no-duplicate-class-members.md
+++ b/website/src/content/docs/linter/rules/no-duplicate-class-members.md
@@ -100,7 +100,7 @@ class Foo {
-## Valid
+### Valid
```jsx
class Foo {
diff --git a/website/src/content/docs/linter/rules/no-empty-block-statements.md b/website/src/content/docs/linter/rules/no-empty-block-statements.md
index dda4b465c10f..bfb9f8c800a7 100644
--- a/website/src/content/docs/linter/rules/no-empty-block-statements.md
+++ b/website/src/content/docs/linter/rules/no-empty-block-statements.md
@@ -82,7 +82,7 @@ class Foo {
-## Valid
+### Valid
```jsx
function foo () {
diff --git a/website/src/content/docs/linter/rules/no-empty-character-class-in-regex.md b/website/src/content/docs/linter/rules/no-empty-character-class-in-regex.md
index ebaf51f77a47..bfa334f08168 100644
--- a/website/src/content/docs/linter/rules/no-empty-character-class-in-regex.md
+++ b/website/src/content/docs/linter/rules/no-empty-character-class-in-regex.md
@@ -56,7 +56,7 @@ They are often the result of a typing mistake.
-## Valid
+### Valid
```jsx
/^a[xy]/.test("ay"); // true
diff --git a/website/src/content/docs/linter/rules/no-empty-type-parameters.md b/website/src/content/docs/linter/rules/no-empty-type-parameters.md
index 1e868c0f9c8d..f3a577c0044e 100644
--- a/website/src/content/docs/linter/rules/no-empty-type-parameters.md
+++ b/website/src/content/docs/linter/rules/no-empty-type-parameters.md
@@ -50,7 +50,7 @@ type Bar<> = {};
-## Valid
+### Valid
```ts
interface Foo {}
diff --git a/website/src/content/docs/linter/rules/no-fallthrough-switch-clause.md b/website/src/content/docs/linter/rules/no-fallthrough-switch-clause.md
index 499d0350040e..07cbb606869e 100644
--- a/website/src/content/docs/linter/rules/no-fallthrough-switch-clause.md
+++ b/website/src/content/docs/linter/rules/no-fallthrough-switch-clause.md
@@ -44,7 +44,7 @@ switch (bar) {
-## Valid
+### Valid
```jsx
switch (foo) {
diff --git a/website/src/content/docs/linter/rules/no-for-each.md b/website/src/content/docs/linter/rules/no-for-each.md
index 525819740555..930c03d7a393 100644
--- a/website/src/content/docs/linter/rules/no-for-each.md
+++ b/website/src/content/docs/linter/rules/no-for-each.md
@@ -78,7 +78,7 @@ els["forEach"](el => {
-## Valid
+### Valid
```jsx
els.forEach((el, i) => {
diff --git a/website/src/content/docs/linter/rules/no-function-assign.md b/website/src/content/docs/linter/rules/no-function-assign.md
index 757177912517..b6b4bbdfc466 100644
--- a/website/src/content/docs/linter/rules/no-function-assign.md
+++ b/website/src/content/docs/linter/rules/no-function-assign.md
@@ -208,7 +208,7 @@ function foo() {
-## Valid
+### Valid
```jsx
function foo() {
diff --git a/website/src/content/docs/linter/rules/no-global-assign.md b/website/src/content/docs/linter/rules/no-global-assign.md
index ee673d491ae3..15347dab5390 100644
--- a/website/src/content/docs/linter/rules/no-global-assign.md
+++ b/website/src/content/docs/linter/rules/no-global-assign.md
@@ -67,7 +67,7 @@ undefined = true;
-## Valid
+### Valid
```jsx
a = 0;
diff --git a/website/src/content/docs/linter/rules/no-global-is-finite.md b/website/src/content/docs/linter/rules/no-global-is-finite.md
index a022767bd3ea..053e9ee1e462 100644
--- a/website/src/content/docs/linter/rules/no-global-is-finite.md
+++ b/website/src/content/docs/linter/rules/no-global-is-finite.md
@@ -41,7 +41,7 @@ isFinite(false); // true
-## Valid
+### Valid
```jsx
Number.isFinite(false); // false
diff --git a/website/src/content/docs/linter/rules/no-global-is-nan.md b/website/src/content/docs/linter/rules/no-global-is-nan.md
index 2caaa4cecdf8..2c8c9cd21424 100644
--- a/website/src/content/docs/linter/rules/no-global-is-nan.md
+++ b/website/src/content/docs/linter/rules/no-global-is-nan.md
@@ -41,7 +41,7 @@ isNaN({}); // true
-## Valid
+### Valid
```jsx
Number.isNaN({}); // false
diff --git a/website/src/content/docs/linter/rules/no-global-object-calls.md b/website/src/content/docs/linter/rules/no-global-object-calls.md
index 843b3324aa03..b361dbda9acc 100644
--- a/website/src/content/docs/linter/rules/no-global-object-calls.md
+++ b/website/src/content/docs/linter/rules/no-global-object-calls.md
@@ -171,7 +171,7 @@ var newIntl = new Intl();
-## Valid
+### Valid
```jsx
function area(r) {
diff --git a/website/src/content/docs/linter/rules/no-implicit-any-let.md b/website/src/content/docs/linter/rules/no-implicit-any-let.md
index 75b8c2a0e17a..ac5c75cf59fa 100644
--- a/website/src/content/docs/linter/rules/no-implicit-any-let.md
+++ b/website/src/content/docs/linter/rules/no-implicit-any-let.md
@@ -55,7 +55,7 @@ b = 1
-## Valid
+### Valid
```ts
var a = 1;
diff --git a/website/src/content/docs/linter/rules/no-interactive-element-to-noninteractive-role.md b/website/src/content/docs/linter/rules/no-interactive-element-to-noninteractive-role.md
index 2de5d684e8ae..ef857ed0bd61 100644
--- a/website/src/content/docs/linter/rules/no-interactive-element-to-noninteractive-role.md
+++ b/website/src/content/docs/linter/rules/no-interactive-element-to-noninteractive-role.md
@@ -46,7 +46,7 @@ Non-interactive ARIA roles include `article`, `banner`, `complementary`, `img`,
│ -----------
-## Valid
+### Valid
```jsx
;
diff --git a/website/src/content/docs/linter/rules/no-invalid-new-builtin.md b/website/src/content/docs/linter/rules/no-invalid-new-builtin.md
index f39e77217524..56e153f57250 100644
--- a/website/src/content/docs/linter/rules/no-invalid-new-builtin.md
+++ b/website/src/content/docs/linter/rules/no-invalid-new-builtin.md
@@ -62,7 +62,7 @@ let bar = new BigInt(9007199254740991);
│ ----
-## Valid
+### Valid
```jsx
let foo = Symbol('foo');
diff --git a/website/src/content/docs/linter/rules/no-invalid-use-before-declaration.md b/website/src/content/docs/linter/rules/no-invalid-use-before-declaration.md
index 05420c3f9358..01e64eb9096c 100644
--- a/website/src/content/docs/linter/rules/no-invalid-use-before-declaration.md
+++ b/website/src/content/docs/linter/rules/no-invalid-use-before-declaration.md
@@ -91,7 +91,7 @@ function f(a = b, b = 0) {}
-## Valid
+### Valid
```jsx
f();
diff --git a/website/src/content/docs/linter/rules/no-misleading-character-class.md b/website/src/content/docs/linter/rules/no-misleading-character-class.md
index 11f3c64c9dc9..6bf49ecef959 100644
--- a/website/src/content/docs/linter/rules/no-misleading-character-class.md
+++ b/website/src/content/docs/linter/rules/no-misleading-character-class.md
@@ -110,7 +110,7 @@ This rule reports the regular expressions which include multiple code point char
│ +
-## Valid
+### Valid
```jsx
/^[abc]$/;
diff --git a/website/src/content/docs/linter/rules/no-misrefactored-shorthand-assign.md b/website/src/content/docs/linter/rules/no-misrefactored-shorthand-assign.md
index 8388072413b7..67f138149626 100644
--- a/website/src/content/docs/linter/rules/no-misrefactored-shorthand-assign.md
+++ b/website/src/content/docs/linter/rules/no-misrefactored-shorthand-assign.md
@@ -75,7 +75,7 @@ a *= a * b
│ ----
-## Valid
+### Valid
```jsx
a += b
diff --git a/website/src/content/docs/linter/rules/no-namespace.md b/website/src/content/docs/linter/rules/no-namespace.md
index 107b9a643846..655e4b98409c 100644
--- a/website/src/content/docs/linter/rules/no-namespace.md
+++ b/website/src/content/docs/linter/rules/no-namespace.md
@@ -80,7 +80,7 @@ declare namespace foo {}
-## Valid
+### Valid
```ts
import foo from 'foo';
diff --git a/website/src/content/docs/linter/rules/no-noninteractive-tabindex.md b/website/src/content/docs/linter/rules/no-noninteractive-tabindex.md
index d07a0d12af4b..0c90e14450c4 100644
--- a/website/src/content/docs/linter/rules/no-noninteractive-tabindex.md
+++ b/website/src/content/docs/linter/rules/no-noninteractive-tabindex.md
@@ -80,7 +80,7 @@ Keep the tab ring small, which is the order of elements when tabbing, for a more
│ -------------
-## Valid
+### Valid
```jsx
diff --git a/website/src/content/docs/linter/rules/no-nonoctal-decimal-escape.md b/website/src/content/docs/linter/rules/no-nonoctal-decimal-escape.md
index b2423795af6a..68911e42fd3e 100644
--- a/website/src/content/docs/linter/rules/no-nonoctal-decimal-escape.md
+++ b/website/src/content/docs/linter/rules/no-nonoctal-decimal-escape.md
@@ -89,7 +89,7 @@ const x = "Don't use \9 escape.";
│ -
-## Valid
+### Valid
```jsx
const x = "8";
diff --git a/website/src/content/docs/linter/rules/no-parameter-assign.md b/website/src/content/docs/linter/rules/no-parameter-assign.md
index a72fe8cad809..f3f27db4b05a 100644
--- a/website/src/content/docs/linter/rules/no-parameter-assign.md
+++ b/website/src/content/docs/linter/rules/no-parameter-assign.md
@@ -135,7 +135,7 @@ class C {
-## Valid
+### Valid
```jsx
function f(param) {
diff --git a/website/src/content/docs/linter/rules/no-prototype-builtins.md b/website/src/content/docs/linter/rules/no-prototype-builtins.md
index e3a7d68ca44a..8f2a00b8997c 100644
--- a/website/src/content/docs/linter/rules/no-prototype-builtins.md
+++ b/website/src/content/docs/linter/rules/no-prototype-builtins.md
@@ -71,7 +71,7 @@ var invalid = foo.propertyIsEnumerable("bar");
-## Valid
+### Valid
```jsx
var valid = Object.hasOwn(foo, "bar");
diff --git a/website/src/content/docs/linter/rules/no-redundant-roles.md b/website/src/content/docs/linter/rules/no-redundant-roles.md
index 54800d020fc2..6d1f752c6317 100644
--- a/website/src/content/docs/linter/rules/no-redundant-roles.md
+++ b/website/src/content/docs/linter/rules/no-redundant-roles.md
@@ -70,7 +70,7 @@ Enforce explicit `role` property is not the same as implicit/default role proper
│ ---------------
-## Valid
+### Valid
```jsx
diff --git a/website/src/content/docs/linter/rules/no-self-assign.md b/website/src/content/docs/linter/rules/no-self-assign.md
index 314a6eb5f39c..c8061a028f02 100644
--- a/website/src/content/docs/linter/rules/no-self-assign.md
+++ b/website/src/content/docs/linter/rules/no-self-assign.md
@@ -158,7 +158,7 @@ a['b'].foo = a['b'].foo;
-## Valid
+### Valid
```jsx
a &= a;
diff --git a/website/src/content/docs/linter/rules/no-static-only-class.md b/website/src/content/docs/linter/rules/no-static-only-class.md
index acf4d5cf340a..f97759882f36 100644
--- a/website/src/content/docs/linter/rules/no-static-only-class.md
+++ b/website/src/content/docs/linter/rules/no-static-only-class.md
@@ -71,7 +71,7 @@ class StaticConstants {
-## Valid
+### Valid
```jsx
const X = {
diff --git a/website/src/content/docs/linter/rules/no-svg-without-title.md b/website/src/content/docs/linter/rules/no-svg-without-title.md
index abb64f9294ae..289de2a61074 100644
--- a/website/src/content/docs/linter/rules/no-svg-without-title.md
+++ b/website/src/content/docs/linter/rules/no-svg-without-title.md
@@ -78,7 +78,7 @@ To make svg accessible, the following methods are available:
```
-## Valid
+### Valid
```jsx